2012-03-09 49 views
-3

我已經花了最後兩個小時,並沒有意識到問題出在哪裏,你會幫我嗎?索貝爾操作員不工作

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沒有錯誤信息,沒有有用的線索,在代碼中沒有一個有用的評論。 – 2012-03-09 05:44:31

+1

這個問題似乎是在你的問題中沒有問題。 – 2012-03-09 09:51:33

+0

其實這個問題似乎是:「你能幫我嗎?」我的回答是:「當然,問題是什麼?」 – 2012-03-09 09:55:02

回答

1

您計算每個通道獨立的梯度;你真的需要,因爲你的輸出不是彩色的? 另外,給定0..255通道值輸入的運算符的輸出將爲-1020..1020,因此您需要在獲得Sqrt的幅度之前或之後對其進行縮放,以使其回到0..255範圍。

但是,主要的問題可能是「最終計算」輸出會覆蓋正在循環的數組(即過濾器正在重新處理已處理的值),因此將其放入其自己的數組中。這是什麼讓涼爽的抖動效果!

+0

對不起,沒有意識到這個問題「目前的形式不能合理地回答」,很確定我明白了! – 2012-03-09 20:45:47