2016-07-05 51 views
0

我正在嘗試實現一個Sobel算法邊緣檢測YUV相機流。最初,它似乎很容易,但我不確定是否這種做法是正確的:索貝爾邊緣檢測,奇怪的輸出

  • I'm應用過濾器只是到Y像素分,做U和V = 0(黑白圖像)。
  • 之後,爲了檢查結果,我通過串口發送幀,但在將圖像從YUV轉換爲jpg之前。

的黑白圖像完美的作品,我可以看到它在我寫的PC應用程序,但是當I'm應用索貝爾過濾器Y分量I'm得到這個: Sobel output

代碼:

#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); 
    } 
} 

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

有關發生了什麼的任何線索? 在此先感謝。

+0

請將源代碼直接複製到帖子正文中。這使其他SO用戶更容易閱讀,運行和編輯您的代碼。 –

+0

Sobel之前我們能看到圖像嗎? –

回答

0

最後我得到它的工作,問題是使用宏的內存尋址:#define索引(xx,yy)((yy * width + xx)* 2)& 0xFFFFFFFE由於某些原因導致錯誤地址。 相反,我在代碼中添加了行(((yy * width + xx)* 2)& 0xFFFFFFFE),並且像這樣(沒有修改)工作正常。

謝謝。