数字图像处理与分析(matlab实现)——实现空域线性及非线性低通平滑滤波
空域低通濾波
? ? ?? 將空間域模板用于圖像處理,通常稱為空間濾波,而空間域模板稱為空間濾波器。
? ? ?? 空間域濾波按線性和非線性特點有:線性、非線性平滑濾波器。線性濾波在消除圖像噪聲的同時也會模糊圖像的細節,利用非線性平滑濾波可在消除圖像中噪聲的同時較好的保持圖像的細節。
? ? ?? 線性平滑濾波器包括鄰近域平均法。非線性平滑濾波器有中值濾波器。
? ? ?? 平滑濾波:平滑濾波能減弱或消除圖像中高頻率的分量,但不影響低頻率的分量。因為高頻分量對應圖像中的區域邊緣等灰度值具有較大、變化較快的部分,平滑濾波將這個分量濾除可以減少局部灰度的起伏,使圖像變得平滑。經常用于模糊處理和減小噪聲。
? ? ?? 鄰域平均法的思想是用像素及其指定鄰域內像素的平均值或加權平均值作為該像素的新值,以便去除突變的像素點,從而濾除一定的噪聲。鄰域平均法的數學含義可用下式表示:?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
式中:x,y =0,1,2,…,N-1;S為(x,y)點鄰域中到的坐標集合,但其中不包括(x,y)點;M為集合坐標點的總數。
鄰域平均法中常用的模板是(線性平滑濾波所用的卷積模板均為正值):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
鄰域平均處理方法是以圖像模糊為代價來減小噪聲的,且模板尺寸越大,噪聲減小的效果越顯著,灰度突變的邊緣圖像更模糊。
中值濾波的算法原理是,首先確定一個奇數像素的窗口W,窗口內各像素按灰度大小排隊后,用其中間位置的灰度值代替原f(x,y)灰度值成為窗口中心的灰度值g(x,y)。數學含義可用下式表示:
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ?? 式中:W為選定窗口大小,f(m-i,n-j)為窗口W的像素灰度值。通常窗內像素為奇數,以便于有中間像素。若窗內像素為偶數時,則中值取中間兩像素灰度值的平均值。
?? 給選定的圖像加上椒鹽噪聲、高斯噪聲
P=rgb2gray(imread('E:\文本文件\作業\數字圖像處理與分析\camema.jpg')); noise_bl=imnoise(P,'salt & pepper',0.1); %添加椒鹽噪聲 noise_gs=imnoise(P,'gaussian'); %添加高斯噪聲 subplot(131),imshow(P),title('原圖'); %一行三列第一個顯示原圖 subplot(132),imshow(noise_bl),title('添加椒鹽噪聲'); %一行三列第二個顯示添加椒鹽噪聲圖像 subplot(133),imshow(noise_gs),title('添加高斯噪聲'); %一行三列第三個顯示添加高斯噪聲圖像? 運行結果如下:
( 1 )鄰域平均法
- 用P=imread('E:\文本文件\作業\數字圖像處理與分析\camema.jpg')讀取圖像轉化為二維矩陣;
- 用noise_jy=imnoise(P,’salt & pepper’,0.1);得到椒鹽噪聲圖像
- 用noise_gs=imnoise(P,’gaussian’);得到高斯噪聲圖像
- 用 h1=fspecial(‘average’)? 得到默認的h為3x3的鄰域平均模板
- 用 h2=fspecial(‘average’,7])得到h為7x7的鄰域平均模板。
- P1=imfilter(P,h1) 進行3x3模板的平滑處理
- P2=imfilter(P,h2) 進行7x7模板的平滑處理
- 相同函數對椒鹽噪聲圖片和高斯噪聲圖片進行平滑處理
- 顯示原圖和處理后的圖片
? ? 代碼如下:
clear;close all;clc; P=rgb2gray(imread('E:\\作業\數字圖像處理與分析\圖片\camema.jpg')); %讀取圖像并轉為灰色圖像 noise_jy=imnoise(P,'salt & pepper',0.1); %添加椒鹽噪聲 noise_gs=imnoise(P,'gaussian'); %添加高斯噪聲 h1=fspecial('average'); % 產生3x3的默認均值模板 h2=fspecial('average',7); % 產生7x7的均值模板 P1=imfilter(P,h1); %進行3*3模板的均值濾波處理 P2=imfilter(P,h2); %進行7*7模板的均值濾波處理 B1=imfilter(noise_jy,h1); %3x3模板均值濾波處理椒鹽噪聲圖片 B2=imfilter(noise_gs,h1); %3x3模板均值濾波處理高斯噪聲圖片 subplot(3,3,1),imshow(P),title('原圖'); subplot(3,3,2),imshow(noise_jy),title('添加椒鹽噪聲'); subplot(3,3,3),imshow(noise_gs),title('添加高斯噪聲'); subplot(3,3,4);imshow(P1);title('3*3 均值濾波處理原圖后的圖像 '); subplot(3,3,5);imshow(B1);title('3*3 均值濾波處理椒鹽噪聲圖片后的圖像 '); subplot(3,3,6);imshow(B2);title('3*3 均值濾波處理高斯噪聲圖片后的圖像 '); subplot(3,3,7);imshow(P2);title('7*7 均值濾波處理原圖后的圖像 ');? 運行結果如下:
?
原 ?圖
添加椒鹽噪聲圖
添加高斯噪聲圖
3*3均值處理椒鹽噪聲圖
3*3均值處理高斯噪聲圖
3*3均值處理原圖
7*7均值處理原圖
( 2 )中值濾波
? 中值濾波的基本步驟是:
(1)將模板在圖中漫游,并將模板中心與圖中某個像素位置重合;
(2)讀取模板下各對應像素的灰度值;
(3)將這些灰度值從小到大排成一列;
(4)找出這些灰度值里排在中間的一個;
(5)將這個中間值賦給對應模板中心位置的像素。
?
? ? ? ? 選定了一幅二維圖像,分別加入椒鹽噪聲和高斯噪聲,均是期望為 0 ,椒鹽噪聲方差為 0.1 。然后利用中值濾波法進行濾波去噪。 Matlab 自帶了中值濾波的函數,因此較為便捷。
①用P=imread(’圖片位置’)與讀取圖像;
②用noise_jy=imnoise(P,’salt & pepper’,0.1);得到椒鹽噪聲圖像
③用noise_gs=imnoise(P,’gaussian’);得到高斯噪聲圖像
④用 h1= medfilt2(noise_jy,[5,5] ); 對有椒鹽噪聲圖像進行5×5方形窗口中值濾波
⑤相同函數對高斯噪聲圖片進行平滑處理
⑥顯示原圖和處理后的圖片?
? ? 代碼如下:
clear;close all;clc; P=rgb2gray(imread('E:\文本文件\作業\數字圖像處理與分析\圖片\camema.jpg')); noise_jy=imnoise(P,'salt & pepper',0.1); %添加椒鹽噪聲 noise_gs=imnoise(P,'gaussian'); %添加高斯噪聲 h1= medfilt2(noise_jy,[5,5] ); %對有椒鹽噪聲圖像進行5×5方形窗口中值濾波 h2= medfilt2(noise_gs,[5,5] ); %對有高斯噪聲圖像進行5×5方形窗口中值濾波 subplot(2,3,1),imshow(P),title('原圖'); subplot(2,3,2),imshow(noise_jy),title('添加椒鹽噪聲'); subplot(2,3,3),imshow(noise_gs),title('添加高斯噪聲'); subplot(2,3,5);imshow(h1);title('中值濾波處理椒鹽噪聲圖片后的圖像 '); subplot(2,3,6);imshow(h2);title('中值濾波處理高斯噪聲圖片后的圖像 ');? 運行結果如下:
?????????? 原圖
???????? 添加椒鹽噪聲圖
??????? 添加高斯噪聲圖
????? 中值濾波處理椒鹽噪聲圖
???? 中值濾波處理高斯噪聲圖
比較處理后的圖像結果可知:
(1)鄰域平均法的平滑效果與所采用鄰域的編輯有關,模板尺寸越大,則圖像的模糊程度越大;此時消除噪聲的效果也將增強,但同時所得到的圖像將變得更模糊;
(2)加入椒鹽噪聲的圖呈現出隨機分布的黑白斑點,用均值濾波后,噪聲并未消除多少,且圖片反而變得更加模糊了,而經過中值濾波器之后噪聲不但得到了有效的消除,同時圖片也并沒怎么模糊。
?
?
總結
以上是生活随笔為你收集整理的数字图像处理与分析(matlab实现)——实现空域线性及非线性低通平滑滤波的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: labview获取窗口句柄_LabVIE
- 下一篇: matlab快速实现线性规划求解