數字圖像處理--(04)數字圖像增強之圖像平滑與銳化(MATLAB)

一般來說,圖像的能量主要集中在其低頻部分,噪聲所在的頻段主要在高頻段,同時圖像邊緣信息也主要集中在其高頻部分。這將導致原始圖像在平滑處理之後,圖像邊緣和圖像輪廓模糊的情況出現(平滑可以認爲是去除噪聲,這樣也就模糊了圖像的邊緣信息)。爲了減少這類不利效果的影響,就需要利用圖像銳化技術,使圖像的邊緣變得清晰。圖像銳化處理的目的是爲了使圖像的邊緣、輪廓線以及圖像的細節變得清晰,經過平滑的圖像變得模糊的根本原因是因爲圖像受到了平均或積分運算,因此可以對其進行逆運算(如微分運算)就可以使圖像變得清晰。微分運算是求信號的變化率,由傅立葉變換的微分性質可知,微分運算具有較強高頻分量作用。從頻率域來考慮,圖像模糊的實質是因爲其高頻分量被衰減,因此可以用高通濾波器來使圖像清晰。但要注意能夠進行銳化處理的圖像必須有較高的性噪比,否則銳化後圖像性噪比反而更低,從而使得噪聲增加的比信號還要多,因此一般是先去除或減輕噪聲後再進行銳化處理。

模板運算

模板( ( 也稱 樣板 或 窗) ) 是實現空域濾波的基本工具。
模板運算的基本思路 :將賦予某個像素的值作爲它本身灰度值和其相鄰像素灰度值的函數。

模板卷積在空域實現的 主要步驟 如下:

  1. 將模板在圖中漫遊,並將模板中心與圖中某個像素位置重合;
  2. 將模板上的各個係數與模板下各對應像素的灰度值相乘;
  3. 將所有乘積相加(爲保持灰度範圍,常將結果再除以模板的係數個數)
  4. 將上述運算結果(模板的輸出響應)賦給圖中對應模板 中心位置的像素

空域濾波增強的目的

主要是平滑圖像或銳化圖像,所以空域濾波器可分爲 平滑濾波器 和銳化濾波器 兩類

濾波器分類

  1. 平滑濾波器:模糊,消除噪聲能減弱或消除圖像中的高頻率分量,但不影響低頻率分量。 高頻對應圖像中的區域邊緣等灰度值具有較大較快變化的部分,平滑濾波器將這些分量濾去可減少局部灰度的起伏,使圖像變得比較平滑
  2. 銳化濾波器:增強被模糊的細節減弱或消除圖像中的低頻率分量,但不影響高頻率分量。 低頻分量對應圖像中灰度值緩慢變化的區域,銳化濾波器將這些分量濾去,可使圖像反差增加,邊緣明顯

部分使用的函數說明

Fspecial函數

用於創建預定義的濾波算子,其語法格式爲:
h = fspecial(type)
h = fspecial(type,parameters,sigma)

參數type制定算子類型,parameters指定相應的參數,具體格式爲:
type=‘average’,爲均值濾波,參數爲n,代表模版尺寸,用向量表示,默認值爲[3,3]。
type= ‘gaussian’,爲高斯低通濾波器,參數有兩個,n表示模版尺寸,默認值爲[3,3],sigma表示濾波器的標準差,單位爲像素,默認值爲 0.5。
type= ‘laplacian’,爲拉普拉斯算子,參數爲alpha,用於控制拉普拉斯算子的形狀,取值範圍爲[0,1],默認值爲0.2。
type= ‘log’,爲拉普拉斯高斯算子,參數有兩個,n表示模版尺寸,默認值爲[3,3],sigma爲濾波器的標準差,單位爲像素,默認值爲0.5
type= ‘prewitt’,爲prewitt算子,用於邊緣增強,無參數。
type= ‘sobel’,爲著名的sobel算子,用於邊緣提取,無參數。
type= ‘unsharp’,爲對比度增強濾波器,參數alpha用於控制濾波器的形狀,範圍爲[0,1],默認值爲0.2。

imfilter函數

函數名稱:imfilter
函數語法:g=imfilter(f,w,filtering_mode,boundary_options,size_optinos)
函數功能:對任意類型數組或多維圖像進行濾波
參數介紹:f是輸入圖像,w爲濾波模板,g爲濾波結果;表1-1總結了其他參數的含義。
在這裏插入圖片描述

例子

G=fspecial(‘gaussian’,5)%參數爲5,表示產生55的gaussian矩陣,如果沒有,默認爲33的矩陣。

G =
 
    0.0000    0.0000    0.0002    0.0000    0.0000
    0.0000    0.0113    0.0837    0.0113    0.0000
    0.0002    0.0837    0.6187    0.0837    0.0002
    0.0000    0.0113    0.0837    0.0113    0.0000
    0.0000    0.0000    0.0002    0.0000    0.0000

平滑

與銳化相反,就是濾掉高頻分量,從而達到減少圖象噪聲,使圖片變得有些模糊。因此又稱爲低通濾波。
介於之前做過相關的文章這裏就不展開說明了
使用均值濾波和中值濾波來驗證線型的和非線性不同模板大小的濾波效果

均值濾波和和中值濾波的對比

均值濾波和和中值濾波都可以起到平滑圖像,慮去噪聲的功能。均值濾波採用線性的方法,平均整個窗口範圍內的像素值,均值濾波本身存在着固有的缺陷,即它不能很好地保護圖像細節,在圖像去噪的同時也破壞了圖像的細節部分,從而使圖像變得模糊,不能很好地去除噪聲點。均值濾波對高斯噪聲表現較好,對椒鹽噪聲表現較差。中值濾波採用非線性的方法,它在平滑脈衝噪聲方面非常有效,同時它可以保護圖像尖銳的邊緣,選擇適當的點來替代污染點的值,所以處理效果好,對椒鹽噪聲表現較好,對高斯噪聲表現較差。

彩色圖像

clc;clear all;close all;
M=imread('../img1.jpg'); %讀取圖像
[ROW,COL, DIM] = size(M);%保存圖像尺寸
subplot(3,3,1),imshow(M),title('原始圖像');%顯示原始圖像
P1=imnoise(M,'gaussian',0.05); %加入高斯躁聲
subplot(3,3,2),imshow(P1),title('加入高斯躁聲 0.05');%加入高斯躁聲後顯示圖像
P2=imnoise(M,'gaussian',0.5); %加入高斯躁聲
subplot(3,3,3),imshow(P2),title('加入高斯躁聲 0.5');%加入高斯躁聲後顯示圖像
gauss_img1(:,:,1)=medfilt2(P1(:,:,1)); %對高斯躁聲中值濾波
gauss_img1(:,:,2)=medfilt2(P1(:,:,2)); %對高斯躁聲中值濾波
gauss_img1(:,:,3)=medfilt2(P1(:,:,3)); %對高斯躁聲中值濾波
subplot(3,3,4),imshow(gauss_img1),title('3X3高斯躁聲中值濾波 0.05');
gauss_img2(:,:,1)=medfilt2(P2(:,:,1)); %對高斯躁聲中值濾波
gauss_img2(:,:,2)=medfilt2(P2(:,:,2)); %對高斯躁聲中值濾波
gauss_img2(:,:,3)=medfilt2(P2(:,:,3)); %對高斯躁聲中值濾波
subplot(3,3,5),imshow(gauss_img2),title('3X3高斯躁聲中值濾波 0.5');
gauss_img3(:,:,1)=medfilt2(P2(:,:,1),[5 5]); %對高斯躁聲中值濾波
gauss_img3(:,:,2)=medfilt2(P2(:,:,2),[5 5]); %對高斯躁聲中值濾波
gauss_img3(:,:,3)=medfilt2(P2(:,:,3),[5 5]); %對高斯躁聲中值濾波
subplot(3,3,6),imshow(gauss_img3),title('5X5高斯躁聲中值濾波 0.5');
A=fspecial('average',3); %生成系統預定義的3X3濾波器
mean_filter_img1(:,:,1)=filter2(A,P1(:,:,1))/255.;     
mean_filter_img1(:,:,2)=filter2(A,P1(:,:,2))/255.; 
mean_filter_img1(:,:,3)=filter2(A,P1(:,:,3))/255.; 
subplot(3,3,7),imshow(mean_filter_img1),title('3X3高斯躁聲均值濾波 0.05');
mean_filter_img2(:,:,1)=filter2(A,P2(:,:,1))/255.;     
mean_filter_img2(:,:,2)=filter2(A,P2(:,:,2))/255.; 
mean_filter_img2(:,:,3)=filter2(A,P2(:,:,3))/255.; 
subplot(3,3,8),imshow(mean_filter_img2),title('3X3高斯躁聲均值濾波 0.5');
A=fspecial('average',5); %生成系統預定義的5X5濾波器
mean_filter_img3(:,:,1)=filter2(A,P2(:,:,1))/255.;     
mean_filter_img3(:,:,2)=filter2(A,P2(:,:,2))/255.; 
mean_filter_img3(:,:,3)=filter2(A,P2(:,:,3))/255.; 
subplot(3,3,9),imshow(mean_filter_img3),title('5X5高斯躁聲均值濾波 0.5');
disp('====================finish================'); 
 

在這裏插入圖片描述

灰度圖像

clc;clear all;close all;
M=imread('../gray1.jpg'); %讀取圖像
M=rgb2gray(M);
[ROW,COL, DIM] = size(M);%保存圖像尺寸
subplot(3,3,1),imshow(M),title('原始圖像');%顯示原始圖像
P1=imnoise(M,'gaussian',0.05); %加入高斯躁聲
subplot(3,3,2),imshow(P1),title('加入高斯躁聲 0.05');%加入高斯躁聲後顯示圖像
P2=imnoise(M,'gaussian',0.5); %加入高斯躁聲
subplot(3,3,3),imshow(P2),title('加入高斯躁聲 0.5');%加入高斯躁聲後顯示圖像
gauss_img1=medfilt2(P1); %對高斯躁聲中值濾波
subplot(3,3,4),imshow(gauss_img1),title('3X3高斯躁聲中值濾波 0.05');
gauss_img2=medfilt2(P2); %對高斯躁聲中值濾波
subplot(3,3,5),imshow(gauss_img2),title('3X3高斯躁聲中值濾波 0.5');
gauss_img3=medfilt2(P2,[5 5]); %對高斯躁聲中值濾波
subplot(3,3,6),imshow(gauss_img3),title('5X5高斯躁聲中值濾波 0.5');
A=fspecial('average',3); %生成系統預定義的3X3濾波器
mean_filter_img1=filter2(A,P1)/255.;     
subplot(3,3,7),imshow(mean_filter_img1),title('3X3高斯躁聲均值濾波 0.05');
mean_filter_img2=filter2(A,P1)/255.;     
subplot(3,3,8),imshow(mean_filter_img2),title('3X3高斯躁聲均值濾波 0.5');
A=fspecial('average',5); %生成系統預定義的5X5濾波器
mean_filter_img3=filter2(A,P1)/255.;     
subplot(3,3,9),imshow(mean_filter_img3),title('5X5高斯躁聲均值濾波 0.5');
disp('====================finish================'); 
 
 

在這裏插入圖片描述

銳化

通過增強高頻分量來減少圖象中的模糊,因此又稱爲高通濾波。銳化處理在增強圖象邊緣的同時增加了圖象的噪聲。

這裏我爲了方便定義了個函數,不用再區分灰度和彩色圖了

My_filter

function IMG=My_filter(I,Module)
%
[~,~, DIM] = size(I);%保存圖像尺寸
IMG=I;
for i = 1:DIM
    IMG(:,:,i)=filter2(Module,I(:,:,i));
end



拉普拉斯算子

clc;clear all;close all;
%% 提取模板
L0=[0 1 0;1 -4 1;0 1 0];
L1=[-1 -1 -1;-1 8 -1;-1 -1 -1];
%% 增強模板
L2=[-1 -1 -1;-1 9 -1;-1 -1 -1];
L3=[-1 -1 -1;-1 10 -1;-1 -1 -1]/2;
L4=[-1 -1 -1;-1 11 -1;-1 -1 -1]/3;
%% 處理
I=imread('../img1.jpg'); %讀取圖像
[ROW,COL, DIM] = size(I);%保存圖像尺寸
subplot(231),imshow(I),title('原始圖像');%顯示原始圖像
%A=fspecial('laplacian'); %生成系統預定義的3X3濾波器
Laplacian_img1=My_filter(I,L0);
subplot(232),imshow(Laplacian_img1),title('Laplacian算子 L0');
Laplacian_img2=My_filter(I,L1);
subplot(233),imshow(Laplacian_img2),title('Laplacian算子 L1');
Laplacian_img3=My_filter(I,L2);
subplot(234),imshow(Laplacian_img3),title('Laplacian算子 L2');
Laplacian_img4=My_filter(I,L3);
subplot(235),imshow(Laplacian_img4),title('Laplacian算子 L3');
Laplacian_img5=My_filter(I,L4);
subplot(236),imshow(Laplacian_img5),title('Laplacian算子 L4');

效果奉上:
在這裏插入圖片描述
在這裏插入圖片描述

普瑞斯特算子

clc;clear all;close all;
%% 水平 垂直
Prewitt_x=[1 1 1;0 0 0;-1 -1 -1];
Prewitt_y=[-1 0 1;-1 0 1;-1 0 1];
%% 處理
I=imread('../gray4.jpg'); %讀取圖像
[ROW,COL, DIM] = size(I);%保存圖像尺寸
subplot(131),imshow(I),title('原始圖像');%顯示原始圖像
%A=fspecial('laplacian'); %生成系統預定義的3X3濾波器
Sobel_img1=My_filter(I,Prewitt_x);
subplot(132),imshow(Sobel_img1),title('水平 Prewitt_x');
Sobel_img2=My_filter(I,Prewitt_y);
subplot(133),imshow(Sobel_img2),title('垂直 Prewitt_y');

在這裏插入圖片描述
在這裏插入圖片描述

Sobel算子

clc;clear all;close all;
%% 水平 垂直
Sobel_x=[1 2 1;0 0 0;-1 -2 -1];
Sobel_y=[-1 0 1;-2 0 2;-1 0 1];
%% 處理
I=imread('../gray3.jpg'); %讀取圖像
[ROW,COL, DIM] = size(I);%保存圖像尺寸
subplot(131),imshow(I),title('原始圖像');%顯示原始圖像
%A=fspecial('laplacian'); %生成系統預定義的3X3濾波器
Sobel_img1=My_filter(I,Sobel_x);
subplot(132),imshow(Sobel_img1),title('水平 Sobel_x');
Sobel_img2=My_filter(I,Sobel_y);
subplot(133),imshow(Sobel_img2),title('垂直 Sobel_y');

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章