少高潮爽了在观看奂费_奶水无码专区_欧美亚洲三级日韩_91精品国产综合香蕉_秋霞伦理电影在线_GOGO亚洲肉体艺术欣赏图片_一本一道a√无码中文字幕_免费看一级毛片无码区_内射视频网站在线观看_国产激情视频精品中文

圖像處理
新聞詳情

圖像處理基礎(chǔ)(3):均值濾波器及其變種

發(fā)布時間:2021-01-07 14:07:34 最后更新:2021-01-07 16:28:52 瀏覽次數(shù):4710

均值濾波器可以歸為低通濾波器,是一種線性濾波器,其輸出為鄰域模板內(nèi)的像素的簡單平均值,主要用于圖像的模糊和降噪。
均值濾波器的概念非常的直觀,使用濾波器窗口內(nèi)的像素的平均灰度值代替圖像中的像素值,這樣的結(jié)果就是降低圖像中的“尖銳”變化。這就造成,均值濾波器可以降低噪聲的同時,也會模糊圖像的邊緣。均值濾波器的處理結(jié)果是過濾掉圖像中的“不相關(guān)”細(xì)節(jié),其中“不相關(guān)”細(xì)節(jié)指的是:與濾波器模板尺寸相比較小的像素區(qū)域。

根據(jù)均值計(jì)算方法的不同,均值濾波器有以下幾種:

?算術(shù)均值濾波器

?幾何均值濾波器

?諧波均值濾波器

?逆諧波均值濾波器

算術(shù)均值濾波器 Arithmetic Mean Filter

這是最簡單的均值濾波器,可以去除均勻噪聲和高斯噪聲,但會對圖像造成一定程度的模糊。
表示中心點(diǎn)在處,大小為的濾波器窗口。算術(shù)均值濾波器就是簡單的計(jì)算窗口區(qū)域的像素均值,然后將均值賦值給窗口中心點(diǎn)處的像素:


其中,表示原始圖像,表示均值濾波后得到的圖像。
基于上述公式,可以很容易的得到的算術(shù)均值濾波器的窗口模板,下面以3×3為例


在OpenCV中,函數(shù)blur表示使用該模板的均值濾波器,其聲明如下:

void blur( InputArray src, OutputArray dst,
                        Size ksize, Point anchor = Point(-1,-1),
                        int borderType = BORDER_DEFAULT );

src是輸入圖像,dst為輸出圖像;ksize是濾波器模板窗口的大??;后兩個參數(shù)分別表示,待處理像素在模板窗口的位置,默認(rèn)值是窗口的中心位置,所以窗口的大小一般為奇數(shù),最后一個參數(shù)表示對編解類型的處理,使用默認(rèn)值即可。其調(diào)用示例blur(src,dst,Size(5,5),模板窗口的大小為5×5。

盒狀濾波器

當(dāng)濾波器的模板的所有的系數(shù)都相等時稱之為盒狀濾波器 Box Filter。其使用的模板如下(3×3 為例):


當(dāng)時,盒狀濾波器可以很方便的計(jì)算圖像像素鄰域的和,對計(jì)算圖像的各種積分特性例如圖像的協(xié)方差矩陣,是很有幫助的。OpenCV中的函數(shù)boxFilter就是盒狀濾波器,其聲明如下:

void boxFilter( InputArray src, OutputArray dst, int ddepth,
                             Size ksize, Point anchor = Point(-1,-1),
                             bool normalize = true,
                             int borderType = BORDER_DEFAULT );

和blur的參數(shù)比較類似,所不同的ddepth是濾波后圖像的深度,-1表示和原圖像的深度相同;參數(shù)normalize表示是否有歸一化的參數(shù),這是因?yàn)樵赽oxFilter使用的模板如下:


其中,


也就是說,當(dāng)normalize = true時,這也是一個默認(rèn)值,其就是一個算術(shù)均值濾波器;normalize=false,盒狀濾波器的作用就是計(jì)算模板窗口內(nèi)的像素的和,然后將值賦給窗口中心位置的像素,主要用來計(jì)算鄰域像素的和。

加權(quán)的均值濾波器

不同于上面的所有像素的系數(shù)都是相同的,加權(quán)的均值濾波器使用的模板系數(shù),會根據(jù)像素和窗口中心像素的距離而取不同的系數(shù)。賦予中心點(diǎn)最高的權(quán)重,然后隨著離中心點(diǎn)的距離增加而減小系數(shù),這樣做的目的是在平滑圖像的同時盡量降低對圖像的模糊。最常用的加權(quán)模板如下(3×3)為例:


其他的一些非線性均值濾波器

除了上述算術(shù)均值濾波器,根據(jù)計(jì)算均值方法的不同還有幾種均值濾波。

幾何均值濾波器 Geometric Mean Filter其公式如下:


濾波后圖像的像素由模板窗口內(nèi)像素的乘積的冪給出。 和算術(shù)均值濾波器相比,幾何均值濾波器能夠更好的取出高斯噪聲,并且能夠更多的保留圖像的邊緣信息。但,其對0值是非常敏感的,在濾波器的窗口內(nèi)只要有一個像素的灰度值為0,就會造成濾波器的輸出結(jié)果為0。

諧波均值濾波器 Harmonic Mean Filter 其公式如下:


諧波均值濾波器對鹽粒噪聲(白噪聲)效果較好,不適用于胡椒噪聲;比較適合處理高斯噪聲。

逆諧波均值濾波器 Contra-Harmonic Mean Filter其公式如下:


其中Q稱為濾波器的階數(shù),該濾波器可以用來消除椒鹽噪聲。但是需要不同同時處理鹽粒噪聲和胡椒噪聲,當(dāng)Q為正時,可以消除胡椒噪聲;當(dāng)Q為負(fù)時,消除鹽粒噪聲。當(dāng)Q=0時,該濾波器退化為算術(shù)均值濾波器;Q=-1時,退化為諧波均值濾波器。

均值濾波器 非線性均值濾波器中的一種,其公式如下:


P為負(fù)數(shù)時可以有效的濾去鹽粒(白)噪聲,正的異常值;P為正時可以過濾胡椒(黑)噪聲,負(fù)的異常值。

基于OpenCV的實(shí)現(xiàn)

上述濾波器的實(shí)現(xiàn)大同小異,只是計(jì)算均值的方法不同。

    Mat tmp;
    copyMakeBorder(m, tmp, ksize / 2, ksize / 2, ksize / 2, ksize / 2, BorderTypes::BORDER_REFLECT); // 擴(kuò)展邊界
    int rows = tmp.rows - ksize / 2;
    int cols = (tmp.cols - ksize / 2) * tmp.channels();
    for (int i = ksize / 2; i < rows - ksize / 2; i++)
    {
        for (int j = ksize / 2; j < cols - ksize / 2; j++)
        {
           // 遍歷窗口內(nèi)的像素,計(jì)算均值
        }
    }
    Rect rect(ksize / 2, ksize / 2, m.cols, m.rows);
    m = tmp(rect);

下面就不再貼全的代碼,只給出根據(jù)不同的公式計(jì)算均值的代碼。
幾何均值濾波器

// 取得窗口像素
            double mul = 1;
            for (int a = -ksize / 2; a <= ksize / 2; a++)
            {
                for (int b = -ksize / 2; b <= ksize / 2; b++)
                {
                    mul *= tmp.at(i + a, j + b);
                }
            }
            auto pixel = pow(mul, 1.0 / (ksize * ksize));
            if (pixel < 0)
                pixel = 0;
            else if (pixel >= 255)
                pixel = 255;
            tmp.at(i, j) = static_cast(pixel);

基本就是遍歷圖像的像素,然后在濾波器的窗口內(nèi)根據(jù)均值的計(jì)算方式計(jì)算均值;幾何濾波器,就是將濾波器窗口內(nèi)的像素乘積,然后去乘積的冪。需要說明的是:幾何均值濾波器有個致命的缺陷,那就是當(dāng)窗口內(nèi)像素只要有一個值為0,則其計(jì)算得到的值就是0,這在去去噪時表現(xiàn)的比較明顯,例如:

由于噪聲的污染比較嚴(yán)重,在使用幾何均值濾波器去噪時,會得到一塊黑色區(qū)域(灰度值為0)。

加權(quán)的均值濾波器

            // 取得窗口像素
            int sum = 0;
              int weightSum = 0;
            for (int a = -ksize / 2; a <= ksize / 2; a++)
            {
                for (int b = -ksize / 2; b <= ksize / 2; b++)
                {
                    auto weight = pow(2, ksize - abs(a) - abs(b) - 1);
                    weightSum += weight;
                    sum += weight * tmp.at(i + a, j + b);
                }
            }
            auto pixel = static_cast<int>(sum / weightSum);
            if (pixel < 0)
                pixel = 0;
            else if (pixel > 255)
                pixel = 255;
            tmp.at(i,j) = pixel;

主要是權(quán)值系數(shù)的計(jì)算,可以發(fā)現(xiàn)一定的關(guān)系,和中心越近的其權(quán)值越高,具體公式:,其中為和中心在方向的距離。


加權(quán)的均值濾波器去噪效果和均值濾波器相當(dāng),但是在保護(hù)圖像細(xì)節(jié)方面比均值濾波器效果要好,上圖是3×3的濾波器,窗口較小,兩者的區(qū)別不是較大。
下圖是7×7的濾波器,對比就比較明顯了。


至于,其他的幾種:諧波濾波器、逆諧波濾波器和均值濾波器,實(shí)現(xiàn)都差不多,代碼就不再貼出了。

總結(jié)

均值濾波器能夠去除均勻分布和高斯分布的噪聲,但是在過濾掉噪聲的同時,會對圖像造成一定的模糊,使用的窗口越大,造成的模糊也就越明顯。
根據(jù)計(jì)算均值方法的不同,有多種均值濾波,經(jīng)常使用的是算術(shù)均值濾波器,計(jì)算簡單,但是對圖像造成的模糊交明顯;另外,有加權(quán)的均值濾波器,給窗口內(nèi)的像素不同的系數(shù),距離中心越近則系數(shù)越大。
使用加權(quán)的均值濾波器,去除噪聲的能力和算術(shù)均值濾波器相當(dāng),但是對圖像造成的模糊較輕,能夠更好的保護(hù)圖像的細(xì)節(jié)。(上面已有對比)

幾何均值濾波器,在過濾噪聲的同時也能更好的保護(hù)圖像的細(xì)節(jié),但是有個缺陷:在濾波的過程中,窗口內(nèi)的像素只要有一個為0,則其得出的值就是0.

至于余下的幾種,在能夠去除高斯噪聲,并且對椒鹽噪聲也有一定的作用,具體如下:

?諧波均值濾波器 能過濾鹽粒噪聲,對胡椒噪聲無效

?逆諧波均值濾波器,當(dāng)階數(shù)Q為正時,可以過濾胡椒噪聲;Q為負(fù)時可以過濾鹽粒噪聲。不能同時對椒鹽噪聲起作用。

? 均值濾波器, 和逆諧波均值濾波器類似。當(dāng)P為正時,能夠過濾椒鹽噪聲;P為負(fù)時,能夠過濾鹽粒噪聲。


文章轉(zhuǎn)自Brook_icv   https://www.cnblogs.com/wangguchangqing/p/6399293.html

在線客服 雙翌客服
客服電話
  • 0755-23712116
  • 13822267203