天天看點

邊緣檢測 java_Sobel邊緣檢測,奇怪的輸出

我正在嘗試為YUV錄影機流實作Sobel算法進行邊緣檢測 . 最初看起來很容易,但我不确定這種方法是否正确:

我正在将濾鏡應用于Y像素元件并執行U和V = 0(黑白圖像) .

之後,為了檢查結果,我通過序列槽發送幀,但是在将圖像從YUV轉換為jpg之前 .

黑白圖像完美運作,我可以在我編寫的PC應用程式上看到它,但是當我将Sobel濾鏡應用于Y元件時,我得到了這個:

邊緣檢測 java_Sobel邊緣檢測,奇怪的輸出

代碼:

#define index(xx, yy) ((yy * width + xx) * 2) & 0xFFFFFFFE // address multiple of 2

(...............)

for (y=1, y < height-1; y++){

for (x=1, y < width-1; y++){

pixel_valueY_h=0.0;

pixel_valueY_v=0.0;

for (j= -1; j<2; j++){

for (i= -1; i<2; i++){

offset= index(x+1, y+1);

pixel_valueY_h += (sobel_h[j + 1][i + 1])* input[offset+1]; //offset+1=> Y component

pixel_valueY_v += (sobel_v[j + 1][i + 1])* input[offset+1];

}

}

offset = index(x,y);

pixel_value= sqrt1((pixel_valueY_h * pixel_valueY_h)+(pixel_valueY_v * pixel_valueY_v));

if (pixel_value > 255) pixel_value=255;

if (pixel_value < 0) pixel_value=0;

//output frame

output[offset] &=0x00; //U and V components = 0

output[offset+1] &=(255- (unsigned char)pixel_value );

}

}

(...............)

關于發生了什麼的任何線索?提前緻謝 .