Matlab影象處理系列2———空間域平滑濾波器
注:本系列來自於影象處理課程實驗,用Matlab實現最基本的影象處理演算法
本文章是Matlab影象處理系列的第二篇文章,介紹了空間域影象處理最基本的概念————模版和濾波器,給出了均值濾波起和中值濾波器的Matlab實現,最後簡要討論去躁效果。
1.空間域增強
(1)模版運算
影象處理中,模版可以看作是n*n(n一般是奇數)的視窗,模版連續地運動於整個影象中,對模版視窗範圍內的畫素做相應處理。
模版運算主要分為:
- 模版卷積
- 模版排序
模版卷積是把模版內畫素的灰度值和模版中對應的灰度值相乘,求平均值賦給當前模版視窗的中心畫素,作為它的灰度值;
模版排序是把模版內畫素的灰度值排序,取某個順序統計量作為模版中心畫素灰度值。
Matlab中做模版卷積十分高效,取出模版內子矩陣和模版權重點乘求平均即可
我們很容易想到模版的中心點是邊界的特殊情況,處理邊界有很多種做法:
- 忽略邊界
- 外插邊界
- 改變模版領域
忽略邊界是模版直接在非邊界點運動操作,直接忽略這些邊界點。這麼做的好處當然是效率高,比較適合影象尺寸較大或人們感興趣部分不在影象邊緣的情況;
外插邊界顧名思義就是補齊邊界點作為模版中心時缺失的畫素部分,可以賦予補邊畫素一定的灰度值並作計算。優點在於不犧牲效能的情況下,對邊界進行了處理,但是補邊畫素的灰度值設定勢必導致邊界的畫素點的不連貫性,嚴重情況下導致失真;
改變模版領域是指在邊界處理中改變模版視窗的大小,為邊界做特殊處理,如3*3
2*2
的模版運算。這樣為邊界特殊考慮既不失真又沒有忽略任何畫素點,但是在判斷邊界時勢必會產生一定的開銷,略微會影響影象處理的效能(可以分情況寫,在犧牲程式複雜度的情況下彌補判斷帶來的開銷)。
任何的邊界處理都不是完美的,都在一定程度上重新分配了模版權重。
(2)空間域濾波
把模版運算運用於影象的空間域增強的技術稱為空間域濾波,根據濾波頻率空間域濾波分為平滑濾波(減弱和去除高頻分量)和銳化濾波(減弱和去除低頻分量),根據濾波計算特點又分為線性濾波和非線性濾波。
因此空間域濾波可分為:
分類 | 線性 | 非線性 |
---|---|---|
平滑 | 線性平滑 | 非線性平滑 |
銳化 | 線性銳化 | 非線性銳化 |
2.均值濾波
(1)均值濾波器
領域均值濾波顧名思義是就是求模版內畫素點灰度的均值,是最經典的線性平滑濾波。空域濾波常用於去除加性噪聲,通常把濾波演算法封裝的模組稱作濾波器。
均值濾波的模版就是ones(n, n)
,模版內所有元素均是一,即他們的權重一模一樣。
其他常用的線性濾波還有:
- 加權濾波:通常中心元素權重較大,且對稱向外遞減
- 高斯濾波:加權濾波的特例,根據高斯分佈確定模版係數
(2)程式碼實現
先呼叫Matlab函式給影象新增3%的椒鹽噪聲:
salt = imnoise(original,'salt & pepper',0.03);
接下來構造我們的均值濾波器,我採用改變模版領域,也就是對邊界條件判斷做特殊處理:
function [ filtered ] = MeanFilter( noise )
filtered = noise;
h = size(filtered, 1);
w = size(filtered, 2);
for i = 1 : h
for j = 1 : w
up = max(i - 1, 1);
down = min(i + 1, h);
left = max(j - 1, 1);
right = min(j + 1, w);
filtered(i, j) = mean(mean(noise(up : down, left : right)));
end
end
end
這裡我呼叫了一系列的max
和min
函式避免寫起來比較繁雜的if語句,確定了模版邊界後直接呼叫mean
函式求均值,淡化了模版卷積的概念(後面邊緣檢測中會顯式地做模版卷積)。
3.中值濾波
(1)中值濾波器
中值濾波選取模版中畫素灰度值的中位數賦給模版中心畫素,是經典的非線性平滑濾波。理想情況下,中值濾波的椒鹽去噪效果優於均值濾波,是因為它能有效的消除孤立階躍脈衝噪聲,後面將比較分析。
2-D中值濾波也可以選取各種各樣的模版,我在這裡就選取最簡單的8-領域模版做演示。
(2)程式碼實現
同樣我檢測邊界,做特殊處理:
function [ filtered ] = MedianFilter( noise )
filtered = noise;
h = size(filtered, 1);
w = size(filtered, 2);
for i = 1 : h
for j = 1 : w
up = max(i - 1, 1);
down = min(i + 1, h);
left = max(j - 1, 1);
right = min(j + 1, w);
sub = noise(up : down, left : right);
sub = sub(:);
filtered(i, j) = median(sub);
end
end
end
只需要將子矩陣轉成向量,再求median
即可。
注:我沒有仔細研究Matlab median函式實現方式,假設它是一個平方量級的演算法,那麼我們有以下兩種優化方式,來提升中值濾波的速度:
- 尋求效率更高的順序統計量演算法,見演算法導論——期望為線性時間的選擇演算法和最壞情況為線性時間的選擇演算法
- 利用模版移動的連續性,鄰近移動區域只有少量畫素點不同,可以根據模版的這個性質構造線性時間的增量式順序統計量演算法
4.兩種濾波器結果對比討論
(1)平滑結果展示
下面是椒鹽噪聲的去除效果,中值濾波的效果更優:
下面是高斯噪聲的去除效果,均值濾波的效果更優:
(2)討論
這裡並沒有數學理論的數學分析,也沒有給出例子,只是從直觀理解角度簡要分析:
- 中值濾波去除椒鹽效果更好,因為椒鹽噪聲是階躍脈衝噪聲(取值0或255且小概率出現),中值濾波是去中位數,不會被階躍值影響,所以幾乎能完全過濾掉階躍脈衝噪聲。而均值濾波處理階躍值時分配權重不會變化,那麼求平均值時受階躍值影響而產生的誤差就較大,因此效果不理想。
- 高斯噪聲是影象中每個畫素點都從原灰度值根據高斯分佈做隨機噪聲,那麼選取中值的代表意義並不大,因為各個畫素都是獨立同分布的。中值濾波相當於在模版內再選出了一個經過高斯噪聲變換後的灰度值,濾波效果和噪聲影象沒有明顯改善,所以比較之下均值濾波較優。
相關推薦
Matlab影象處理系列2———空間域平滑濾波器
注:本系列來自於影象處理課程實驗,用Matlab實現最基本的影象處理演算法 本文章是Matlab影象處理系列的第二篇文章,介紹了空間域影象處理最基本的概念————模版和濾波器,給出了均值濾波起和中值濾波器的Matlab實現,最後簡要討論去躁效果。 1.空
Matlab影象處理系列3———空間域銳化濾波器
注:本系列來自於影象處理課程實驗,用Matlab實現最基本的影象處理演算法 1.銳化濾波器 銳化濾波,是將影象的低頻部分減弱或去除,保留影象的高頻部分,即影象的邊緣資訊。 影象的邊緣、輪廓一般位於灰度突變的地方,也就是影象的高頻部分,通常用灰度差分提取邊緣
Matlab影象處理系列1———線性變換和直方圖均衡
注:本系列來自於影象處理課程實驗,用Matlab實現最基本的影象處理演算法 影象點處理是影象處理系列的基礎,主要用於讓我們熟悉Matlab影象處理的程式設計環境。灰度線性變換和灰度拉伸是對畫素灰度值的變換操作,直方圖是對畫素灰度值的統計,直方圖均衡是對灰度值分
影象處理(2)空間濾波
濾波原理 濾波是為了消除噪聲影響,提高影象質量,濾波方法的選擇取決於噪聲的特性。濾波包括空間濾波和頻率域濾波,在數學上二者可以相互轉化。空間濾波本質上是通過臨近畫素的微操作來實現噪聲降低,比如線性平滑濾波,就是通過臨近畫素的加權或者不加權平均來消減噪聲強度,這對於方差較小較穩定
數字影象處理- 3.4 空間濾波 and 3.5 平滑空間濾波器
3.4 空間濾波基礎 • Images are often corrupted by random variations in intensity, illumination, or have poor contrast and can’t be used directly. • Filte
影象處理複習2——影象傅立葉變換和頻域濾波
影象處理複習 CH4 基本影象變換 4.1 DFT (1)一維DFT 一維DFT: F(u)=1N∑N−1x=0f(x)e−j2πuxN,x=0,1,…,N−1 其逆變換: f(x)=∑N−1u=0F(u)ej2πuxN,u=0,1
matlab 影象加入高斯噪聲和平滑處理練習
影象加入高斯噪聲和平滑處理程式碼 a=imread('lena.jpg'); subplot(221); imshow(a); title ('原始影象'); Inoise=imnoise(a,'ga
FPGA影象處理系列——實現窗處理
窗處理是影象處理中常見的一種處理,它的思想是對於影象矩陣,通過一個固定大小(例如3*3)的小矩陣對影象進行運算操作。常用的窗處理包括Sobel邊緣檢測,形態學操作,模糊濾波,高斯濾波等。在基於PC的影象處理領域,可以方便的實現窗處理操作。比如,在opencv庫中可以自己隨意構建視窗大小,然後呼叫相關
Python程式設計 簡單的影象處理(2)
有關中醫舌像的簡單分析 黑白圖的應用十分廣泛,它是深度學習影象處理的基礎,是影象分割、影象拼接、影象紋理分析等等技術的組成部分,較常見的應用在於X線圖片、CT圖片、MRI圖片、B超圖片、電鏡圖片等醫學領域。 在傳統醫學的“望聞問切”四診中,望診作為疾病視覺資訊的診察手段被譽為“四診之首”,舌
android影象處理系列之五--給圖片新增邊框(中)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
android影象處理系列之六--給圖片新增邊框(下)-圖片疊加
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
android影象處理系列之四--給圖片新增邊框(上)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
數字影象處理中的頻率域濾波
作者是一名在讀的碩士研究僧,方向是機器視覺。由於視覺是一門相對複雜的學科,作者在課堂上學到的東西只是非常淺顯的內容,我們老師說是,領我們進了個門。現在打算利用圖書館和網路上的資源進行自學。由於是剛開始寫自己的部落格,並且所具備的專業知識非常的有限,難免有出錯之處,如果有朋友發現一些毛病,希望能夠指正
python數字影象處理(2):影象的讀取、顯示與儲存
skimage提供了io模組,顧名思義,這個模組是用來圖片輸入輸出操作的。為了方便練習,也提供一個data模組,裡面嵌套了一些示例圖片,我們可以直接使用。 引入skimage模組可用: 1 from skimage import io
【數字影象處理系列二】基本概念:亮度、對比度、飽和度、銳化、解析度
本系列python版本:python3.5.4 本系列opencv-python版本:opencv-python3.4.2.17 本系列使用的開發環境是jupyter notebook,是一個python的互動式開發環境,測試十分方便,並集成了vim
自然語言處理系列-2-文字分類-傳統機器學習方法
文件分類是指給定文件p(可能含有標題t),將文件分類為n個類別中的一個或多個,本文以人機寫作為例子,針對有監督學習簡單介紹傳統機器學習方法。 文件分類的常見應用: 新聞分類: 也就是給新聞打標籤,一般標籤有幾千個,然後要選取k個標籤,多分類問題,可見2017知乎
自然語言處理系列-2-文字分類-深度學習-2
3. 正文與標題 文件分為正文和標題兩部分,一般兩部分分開處理,可以共享Embedding層也可以不共享,人機寫作分類問題中我們沒有共享Embedding。 3.1 正文多層CNN,未使用標題 CNN需要設定不同大小的卷積核,並且多層卷積才能較好的捕獲文字的特徵
【數字影象處理系列四】影象資料集增強方式總結和實現
本系列python版本:python2.7.15 本系列opencv-python版本:opencv-python3.4.2.17 本系列使用的開發環境是jupyter notebook,是一個python的互動式開發環境,測試十分方便,並集成了vim操作,
數字影象處理中的空間濾波
影象的空間濾波 空間卷積: 卷積是處理線性系統的基礎,以下介紹的濾波計算方式,都與卷積計算有密切關係,其計算形式與卷積的計算方式有高度的相似性。如果下面介紹的濾波運算
Matlab 影象處理 筆記
批量儲存視訊每一幀影象: video = VideoReader('realSample.avi'); % 讀取視訊檔案 nFrames = video.NumberOfFrames; %得到幀