% imshow
imshow是用来显示fft2
fft2函数用于计算二维快速傅立叶变换,其语法格式为:
B = fft2(I)
B = fft2(I)返回图象I的二维fft变换矩阵,输入图象I和输出图象B大小相同。
例如,计算图象的二维傅立叶变换,并显示其幅值的结果,其命令格式如下
load imdemos saturn2
imshow(saturn2)
B = fftshift(fft2(saturn2));
imshow(log(abs(B)),[],'notruesize')
(2)fftshift
MATLAB提供的fftshift函数用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心,其语法格式为:
B = fftshift(I)
对于矩阵I,B = fftshift(I)将I的一、三象限和二、四象限进行互换。
(3)ifft2
ifft2函数用于计算图象的二维傅立叶反变换,其语法格式为:
B = ifft2(I)
B = ifft2(A)返回图象I的二维傅立叶反变换矩阵,输入图象I和输出图象B大小相同。其语法格式含义与fft2函数的语法格式相同,可以参考fft2函数的说明。
conv2
MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:
C = conv2(A,B)
C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb+1)×(na+nb+1)。
例:
A=magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> B=[1 2 1 ;0 2 0;3 1 3]
B =
1 2 1
0 2 0
3 1 3
>> C=conv2(A,B)
C =
17 58 66 34 32 38 15
23 85 88 35 67 76 16
55 149 117 163 159 135 67
79 78 160 161 187 129 51
23 82 153 199 205 108 75
30 68 135 168 91 84 9
33 65 126 85 104 15 27
imfilter
语法:g=imfilter(f, w, filtering_mode, boundary_options, size_options)
说明:此函数用指定的模板实现对指定图像的空间滤波。f为待进行空间滤波的图像,w为滤波模板
滤波类型(filtering_mode)
'corr' 滤波器通过使用相关来完成。该值是默认值。
'conv' 滤波器通过使用卷积来完成
边界填充选项(boundary_options)
P 输入图像的边界通过用值P来扩展。P的默认值为0。
'replicate' 图像大小通过复制外边界的值来扩展。
'symmetric' 图像大小通过反射其边界来扩展。
'circular' 图像大小通过将图像看成是二维周期函数的一个周期来扩展
大小选项(size_options)
'full' 输出图像的大小与被填充后图像的大小相同
'same' 输出图像的大小与输入图像的大小相同
注:imfilter与filter2区别
imfilter 可进行多维图像(RGB等)进行空间滤波,且可选参数较多
filter2 只能对二维图像(灰度图)进行空间滤波
%例程
clc
originalRGB = imread('peppers.png');
h = fspecial('laplacian');
filteredRGB = imfilter(originalRGB,h);
figure, imshow(originalRGB)
figure, imshow(filteredRGB)
filter2
MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:
Y = filter2(h,X)
其中Y = filter2(h,X)返回图像X经滤波算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
fspecial
fspecial函数用于创建预定义的滤波算子(掩膜),其语法格式为:
h = fspecial(type)
h = fspecial(type,parameters)
参数type制定算子类型,parameters指定相应的参数,具体格式为:
type='average',fspecial('average',[r c]),大小为rxc的矩形均值滤波器,默认值为[3 3]。
type= 'gaussian',fspecial('gaussian',[r c],sigma),大小为rxc的高斯低通滤波器,参数有两个,[r c]表示模版尺寸,默认值为[3 3],sigma表示滤波器的标准差,单位为像素,默认值为0.5。
type= 'laplacian',fspecial('laplacian',alpha)大小为3x3为拉普拉斯滤波器,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1],默认值为0.2。
type= 'log',fspecial('log',[r c],sigma),为拉普拉斯-高斯(LoG)算子,参数有两个,[r c]表示模版尺寸,默认值为[5 5],sigma为滤波器的标准差,单位为像素,默认值为0.5
type= 'prewitt',fspecial('prewitt'),大小为为3x3的prewitt算子掩膜Pv,它仅为垂直梯度(并非计算完整的Prewitt梯度),用于边缘提取,水平梯度掩膜为其转置。
type= 'sobel',fspecial('sobel'),为著名的sobel算子,大小为为3x3的sobel算子掩膜Sv,仅为垂直梯度(并非计算完整的Sobel梯度),用于边缘提取,水平梯度掩膜为其转置。
type= 'unsharp',为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2。
注:fspecial仅仅是定义了滤波算子h,要想进行以该算子为掩膜的二维图像卷积运算(滤波),还需要使用filter2。
综合例程:
clc
%对原图象进行加噪
A=imread('cameraman.tif');
B=imnoise(A,'salt & pepper') ;
%用fspecial和filter2命令实现'gaussian','laplacian'滤波
h=fspecial('gaussian',[3,3],0.5) % 定义滤波算子h
X=filter2(h,B)/255; % 卷积/滤波运算
figure,imshow(X),title('gaussian滤波');
k=fspecial('laplacian',0.2) % 定义滤波算子k
Y=filter2(k,B);
figure,imshow(Y),title('laplacian滤波');
medfilt2
在MATLAB图像处理工具箱中,提供了medfilt2函数用于实现中值滤波。
medfilt2函数的语法格式为:
B = medfilt2(A) 用3×3的滤波窗口对图像A进行中值滤波。
B = medfilt2(A,[m n]) 用指定大小为m×n的窗口对图像A进行中值滤波。
edge
MATLAB的图像处理工具箱中提供的edge函数可以实现检测边缘的功能,其语法格式如下:
BW = edge(I,'sobel')
BW = edge(I,'sobel',direction)
BW = edge(I,'roberts')
BW = edge(I,'log')
这里BW = edge(I,'sobel')采用Sobel算子进行边缘检测。BW = edge(I,'sobel',direction)可以指定算子方向,即:
direction=’horizontal’,为水平方向;
direction=’vertical’,为垂直方向;
direction=’both’,为水平和垂直两个方向。
BW = edge(I,'roberts')和BW = edge(I,'log')分别为用Roberts算子和拉普拉斯高斯算子进行边缘检测。
例:用三种算子进行边缘检测。
I=imread('eight.tif');
imshow(I)
BW1=edge(I,'roberts');
figure ,imshow(BW1),title('用Roberts算子')
BW2=edge(I,'sobel');
figure,imshow(BW2),title('用Sobel算子 ')
BW3=edge(I,'log');
figure,imshow(BW3),title('用拉普拉斯高斯算子')