2012-03-09 2 views
-3

Я проводил последние два часа и не понимал, где проблема, не могли бы вы мне помочь?Оператор Sobel не работает

public static void sobel(Img img) { 

    int[][][] myArray = img.getmyArray(); 
    int[][][] sobelX = img.copyMyArray(); 
    int[][][] sobelY = img.copyMyArray(); 

    //itearates through the matrix to apply the Sobel Operator 
    for (int line = 1; line < myArray.length -2; line++) 
     for (int column = 1; column < myArray[line].length -2; column++) 
      for(int color = 0; color < 3; color++){ 

      sobelX[line][column][color] = 
        -1 * myArray[line-1][column-1][color] + 
        -2 * myArray[line-1][column][color] + 
        -1 * myArray[line-1][column+1][color] + 

        0 * myArray[line][column-1][color] + 
        0 * myArray[line][column][color] + 
        0 * myArray[line][column+1][color] + 

        1 * myArray[line+1][column-1][color] + 
        2 * myArray[line+1][column][color] + 
        1 * myArray[line+1][column+1][color]; 

      sobelY[line][column][color] = 
        -1 * myArray[line-1][column-1][color] + 
        0 * myArray[line-1][column][color] + 
        1 * myArray[line-1][column+1][color] + 

        -2 * myArray[line][column-1][color] + 
        0 * myArray[line][column][color] + 
        2 * myArray[line][column+1][color] + 

        -1 * myArray[line+1][column-1][color] + 
        0 * myArray[line+1][column][color] + 
        1 * myArray[line+1][column+1][color]; 


      //Final Calculation 
      myArray[line][column][color] = check_0_255_limit((int)Math.sqrt(
        sobelX[line][column][color] * sobelX[line][column][color] 
        + 
        sobelY[line][column][color] * sobelY[line][column][color] 
        )); 

     }// end for loop 
} 

Нет сообщений об ошибках, код компиляции и запуска, но я получаю плохой выход, это не то, что я ожидал .. Sobel Operator

+5

-1 Сообщения об ошибках, полезные подсказки, ни один полезный комментарий в коде. –

+1

Проблема заключается в том, что в вашем вопросе нет вопросов. –

+0

На самом деле возникает вопрос: «Не могли бы вы мне помочь?» на что я бы ответил: «Конечно, в чем проблема?» –

ответ

1

Вы вычисления градиентов для каждого канала независимо друг от друга ; вам действительно нужно, так как ваш результат не в цвете? Кроме того, вывод оператора, заданный для ввода значений значения 0..255, будет -1020..1020, поэтому вам нужно масштабировать его до или после получения величины с помощью Sqrt, чтобы вернуть его обратно к 0..255 ассортимент.

Но главная проблема, вероятно, в том, что выход «окончательного расчета» перезаписывает массив, который вы перебираете (т. Е. Фильтр обрабатывает уже обработанные значения), поэтому ставьте его в свой собственный массив. Это то, что дает прохладный эффект сглаживания!

+0

Извините, не знал, что вопрос «не может быть разумно ответил в его текущей форме», довольно уверен, что я это понял! –

Смежные вопросы