簡體   English   中英

Sobel圖像處理

[英]Sobel image processing

我的算法輸出錯誤。 我嘗試了許多解決方案,但沒有任何結果。 查看我的結果。 源圖像

對不起莉娜

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

有兩點可疑:

    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) )。 這可以解釋圖片中奇怪的對角線對稱性,基本上是另一面的對稱復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM