影像上有時會發現出現一點一點的雜訊,此種雜訊稱之為胡椒鹽雜訊(Salt and pepper noise),此類雜訊可以透過Median Filter過濾雜訊,使得影像較為接近原始的狀態。

 

以3*3的 「遮罩」為例,透過「Spatial Convolution」對整張影像進行處理。

取得遮罩之像素矩陣後透過排序演算法排序後,取其中間的像素值。處理流程如下圖所示。

此種演算邏輯可以有效的去除影像中較為極端的訊號(雜訊)

 

 

本實驗針對一張附加上胡椒鹽雜訊(Salt and pepper noise)的影像進行"Median Filter"之成果如下所示 :

 


C#

private Bitmap Process(Bitmap bitmap)
{
    int width = bitmap.Width, height = bitmap.Height;
    int w = 3, h = 3;
    //IComparer revComparer = new ReverseComparer();
    Bitmap dstBitmap = new Bitmap(bitmap);

    byte[,] pix = ImageExtract.getimageArray(bitmap);
    byte[,] resPix = new byte[3, width * height];

    for (int y = 1; y < (height - 1); y++)
    {
        for (int x = 1; x < (width - 1); x++)
        {
            //b,g,r 
            for (int c = 0; c < 3; c++)
            {
                //mask
                int current = x + y * width;
                byte[] mask = new byte[w * h];
                for (int my = 0; my < h; my++)
                    for (int mx = 0; mx < w; mx++)
                    {
                        int pos = current + (mx - 1) + ((my - 1) * width);
                        mask[mx + my * w] = pix[c, pos];
                    }

                Heap heap = new Heap(mask, mask.Length);
                heap.heapsort();
                resPix[c, current] = (byte)heap.get()[(w * h) / 2];
            }
        }
    }


    ImageExtract.writeImageByArray(resPix, dstBitmap);
    return dstBitmap;
}

完整程式碼 (連結)

 

arrow
arrow

    Lung-Yu,Tsai 發表在 痞客邦 留言(2) 人氣()