2015-10-20 137 views
0

我的算法輸出錯誤。我嘗試了很多解決方案,但沒有出現。 查看我的結果。 SourceImageSobel圖像處理

I'm sorry Lena

for (int x = 1; x < fimage.Bitmap.Width - 1; x++) 
{ 
    for (int y = 1; y < fimage.Bitmap.Height - 1; y++) 
    { 
     double sumX = 0, sumY = 0, sum = 0; 

     for (int i = -1; i <= 1; i++) 
     { 
      for (int j = -1; j <= 1; j++) 
      { 
       sumX += fimage[y + i, x + j].R * kernel1[i + 1, j + 1]; 
       sumY += fimage[y + i, x + j].R * kernel2[i + 1, j + 1]; 
      } 
     } 

     sum = Math.Sqrt(sumX * sumX + sumY * sumY); 
     sum = sum > 255 ? 255 : sum < 0 ? 0 : sum; 
     fimage[x, y] = Color.FromArgb((byte)sum, (byte)sum, (byte)sum); 
    } 
} 
+0

去除噪音http://meta.stackoverflow.com/questions/260776/should-i-remove-fluff-when-editing-questions –

+0

我修正了你的格式,但我不確定你到底在想什麼完成。 –

回答

0

兩個東西,是魚腥味:

for (int j = -1; j <= 1; j++) 
    { 
     sumX += fimage[y + i, x + j].R * kernel1[i + 1, j + 1]; 
     sumY += fimage[y + i, x + j].R * kernel2[i + 1, j + 1]; 
    } 

你只尊重這裏的圖像的紅色成分,這是爲什麼? 其他主要的事情是改變輸入畫面同時,通過它迭代:

   sum = Math.Sqrt(sumX * sumX + sumY * sumY); 
       sum = sum > 255 ? 255 : sum < 0 ? 0 : sum; 
       fimage[x, y] = Color.FromArgb((byte)sum, (byte)sum, (byte)sum); 

你應該值保存到不同的輸出圖像(創建與源圖像尺寸的new Bitmap(fimage.Width, fimage.Height))。這可以解釋圖片中奇怪的對角線對稱性,其中基本上是對方的對稱副本。

+0

我使用紅色組件,因爲我的圖像轉換爲灰度 –