概述
我們已經(jīng)知道,線性空間濾波即為掩膜矩陣和圖像矩陣的卷積/相關(guān)運(yùn)算。本質(zhì)上來(lái)說(shuō),是像素點(diǎn)值與像素點(diǎn)鄰域像素點(diǎn)值之間的一種特殊運(yùn)算關(guān)系,因?yàn)槠溥\(yùn)算規(guī)則為鄰域像素點(diǎn)與對(duì)應(yīng)掩膜系數(shù)相乘后相加的線性運(yùn)算,故稱(chēng)之為線性空間濾波。
如果這種基于鄰域的運(yùn)算是非線性的,對(duì)圖像的每個(gè)像素點(diǎn)都進(jìn)行這種非線性運(yùn)算(濾波),即為非線性空間濾波。
本文首先會(huì)將線性空間濾波與非線性空間濾波做一個(gè)簡(jiǎn)單的對(duì)比,然后介紹matlab中幾種非線性空間濾波的函數(shù)。
與線性空間濾波對(duì)比
為了使得每一個(gè)像素都有相同的可計(jì)算鄰域,我們需要對(duì)圖像矩陣進(jìn)行填充。具體填充概念見(jiàn)線性空間濾波一文。
圖中:灰色數(shù)字部分:0填充部分;
黑色數(shù)字部分:圖像矩陣;
綠色數(shù)字部分:掩膜系數(shù)或劃定鄰域范圍;
Matlab 中非線性空間濾波函數(shù)
先介紹兩個(gè)執(zhí)行常規(guī)非線性濾波的函數(shù):nlfilter 和
colfilt。當(dāng)然, 一些常用的非線性濾波器可以通過(guò)其他MATLAB和IPT函數(shù)實(shí)現(xiàn),我們主要介紹colfilt。
其中colfilt因其出色的執(zhí)行速度,是進(jìn)行非線性濾波操作的最好選擇。首先介紹colfilt,然后將MATLAB中對(duì)nlfilter的描述,最后介紹另一種比較常用的統(tǒng)計(jì)排序?yàn)V波器。
colfilt是基于列的濾波方式,具體如下:
colfilt
函數(shù)語(yǔ)法:
B = colfilt(A,[m n],block_type,@fun,paramerters)
A:圖像矩陣;
[m n]:鄰域范圍;
block_type:鄰域塊的處理方式,有如下兩值可供選擇:distinct 和 sliding
二者通過(guò)fun運(yùn)算返回的值不同,通過(guò)colfilt最終返回的矩陣也不同;詳情如下:
@fun:函數(shù)句柄,調(diào)用外部寫(xiě)好的函數(shù)fun進(jìn)行鄰域像素處理;
parameters:fun所需的參數(shù) 。
函數(shù)原理:
鄰域和圖像例舉:
fun例舉: 為均值函數(shù)。
大致過(guò)程為:m x n大小領(lǐng)域矩陣中心從左至右,從上到下依次滑過(guò)M x
N大小的圖像的每一個(gè)像素點(diǎn)。鄰域矩陣將其所包圍范圍內(nèi),所有像素點(diǎn)的亮度值挑選出來(lái)。colfilt函數(shù)調(diào)用im2col函數(shù)將之轉(zhuǎn)換為列向量。如此一來(lái),鄰域矩陣中心每經(jīng)過(guò)一個(gè)像素點(diǎn),就產(chǎn)生一個(gè)mn維度的向量,M x N
大小的圖像就會(huì)產(chǎn)生MN個(gè)這樣的向量。我們得到一個(gè)mn x MN 的新的矩陣。對(duì)該矩陣每一列代入fun中運(yùn)算,產(chǎn)生一個(gè)MN維的向量,colfilt調(diào)用col2im 函數(shù)將MN維向量重新還原為M x N
的矩陣,完成運(yùn)算。
一、 零填充:
二、生成矩陣:
nlfilter
B = nlfilter(A,[M N],FUN)
針對(duì)圖像A的每一個(gè)M x N 滑動(dòng)塊應(yīng)用函數(shù)FUN。FUN是一個(gè)接收M x N矩陣作
為輸入并且返回一個(gè)標(biāo)量;
C = FUN(X)
FUN必須為一個(gè)函數(shù)句柄;
C是M x N 塊X的中心像素的輸出值;
nlfilter為圖像A中的每一個(gè)像素調(diào)用函數(shù)FUN。
B = nlfilter(A,'indexed',...) 將A作為索引圖像來(lái)處理,如果A 為單精度型或者雙
精度型則使用1來(lái)對(duì)A進(jìn)行填充,如果A 是邏輯型、uint8或uint16型圖像則使用0
來(lái)進(jìn)行填充。
B = nlfilter(A,'indexed',...)
數(shù)據(jù)類(lèi)型支持
-------------
輸入圖像A可以是FUN支持的任意數(shù)據(jù)類(lèi)型。B的類(lèi)型取決于FUN的輸出類(lèi)型。
如果A是灰度圖像,其可以為任意數(shù)字類(lèi)型或者邏輯型。如果A是索引圖形,其
可以是邏輯、uint8、uint16、單精度型或者、雙精度型。
注意
-------
在處理大圖片時(shí)nlfilter 需要花費(fèi)大量的時(shí)間。在大多數(shù)情況下colfilt 函數(shù)可
更快的處理相同的操作。
(本節(jié)內(nèi)容為從MATLAB help 中翻譯所得。)
orderfilt2
其相應(yīng)是基于對(duì)鄰域中所包含的像素進(jìn)行排序,然后使用排序結(jié)果的值來(lái)代替中心像素值。
函數(shù)語(yǔ)法:
g = ordfilt2(f , order , domain)
使用鄰域的一組排序元素的第order
個(gè)元素來(lái)替代f中的每個(gè)元素,而領(lǐng)域矩陣所選擇用來(lái)排序的元素,由domain中的非零元素指定。
百分位:我們將排序元素中第一個(gè)元素稱(chēng)為第0個(gè)百分位,最后一個(gè)元素為第100個(gè)百分位。
最小濾波器:取order 為0個(gè)百分位的排序?yàn)V波器;
中值濾波器:取order 為50個(gè)百分位的排序?yàn)V波器; (降低圖像椒鹽噪聲的有效工具)
最大濾波器:取order 為100個(gè)百分位的排序?yàn)V波器;
|