)频域滤波
原图用Fourier系数的幅度进行Fourier反变换后的图 原图像的频谱用Fourier系数的相位进行Fourier反变换后的图16
(2
实验四 噪声图像的复原
一、实验目的
1、熟悉并掌握MATLAB图像处理工具箱的使用; 2、理解并掌握常用的图像的恢复和增强技术。
二、实验内容及步骤
1、产生运动模糊图像,运用维纳滤波进行图像恢复,显示结果。 2、利用MATLAB实现频域滤波
频域滤波分为低通滤波和高通滤波两类,对应的滤波器分别为低通滤波器和高通滤波器。频域低通过滤的基本思想:
G(u,v)=F(u,v)H(u,v)
F(u,v)是需要钝化图像的傅立叶变换形式,H(u,v)是选取的一个低通过滤器变换函数,G(u,v)是通过H(u,v)减少F(u,v)的高频部分来得到的结果,运用傅立叶逆变换得到钝化后的图像。
理想地通滤波器(ILPF)具有传递函数:
?1ifD(u,v)?D0 H(u,v)??0ifD(u,v)?D0?其中,D0为指定的非负数,D(u,v)为(u,v)到滤波器的中心的距离。D(u,v)?D0的点的轨迹为一个圆。
n阶巴特沃兹低通滤波器(BLPF)(在距离原点D0处出现截至频率)的传递函数为
H(u,v)?11?[D(u,v)D0]2n
与理想地通滤波器不同的是,巴特沃兹率通滤波器的传递函数并不是在D0处突然不连续。
高斯低通滤波器(GLPF)的传递函数为
D2(u,v)2?2H(u,v)?e
其中,?为标准差。
相应的高通滤波器也包括:理想高通滤波器、n阶巴特沃兹高通滤波器、高斯高通滤波器。给定一个低通滤波器的传递函数Hlp(u,v),通过使用如下的简单关系,可以获得相应高通滤波器的传递函数:Hhp?1?Hlp(u,v)
17
三 实验源程序
1、产生运动模糊图像,运用维纳滤波进行图像恢复,显示结果。 i=imread('football.jpg'); I=rgb2gray(i); I = im2double(I); %模拟运动模糊 LEN = 21; THETA = 11;
PSF = fspecial('motion', LEN, THETA); blurred = imfilter(I, PSF, 'conv', 'circular'); %恢复图像
wnr2 = deconvwnr(blurred, PSF);
subplot(1,2,1);imshow(blurred);title('运动模糊图像') subplot(1,2,2);imshow(wnr2);title('恢复图像')
2、利用MATLAB实现频域滤波 clc;clear all, close all;
f=imread('cameraman.tif');
F=fft2(f); %对图像进行傅立叶变换
%对变换后图像进行对数变化,并对其坐标平移,使其中心化 S=fftshift(log(1+abs(F)));
S=gscale(S); %将频谱图像标度在0-256的范围内 subplot(3,3,1),imshow(S),title('原图频谱图'); %显示频谱图像 h=fspecial('sobel'); %产生空间‘sobel’模版
freqz2(h) %查看相应频域滤波器的图像 PQ=paddedsize(size(f)); %产生滤波时所需大小的矩阵 H=freqz2(h,PQ(1),PQ(2)); %产生频域中的‘sobel’滤波器
H1=ifftshift(H); %重排数据序列,使得原点位于频率矩阵的左上角
subplot(3,3,2),imshow(abs(H),[]),title('频域中的‘sobel’滤波器');%以图形形式显示滤波器 subplot(3,3,3),imshow(abs(H1),[]),title('重排数据序列后的‘sobel’滤波器'); gs=imfilter(double(f),h); %用模版h进行空域滤波
gf=dftfilt(f,H1); %用滤波器对图像进行频域滤波
subplot(3,3,4),imshow(gs,[]),title('用模版h对图像进行空域滤波'); subplot(3,3,5),imshow(gf,[]),title('用滤波器对图像进行频域滤波');
subplot(3,3,6),imshow(abs(gs),[]),title('图像用模版h空域滤波后的模值'); subplot(3,3,7),imshow(abs(gf),[]),title('图像滤波器频域滤波后的模值'); f=imread('cameraman.tif'); %读取图片
PQ=paddedsize(size(f)); %产生滤波时所需大小的矩阵 D0=0.05*PQ(1); %设定高斯高通滤波器的阈值
H=hpfilter('gaussian',PQ(1),PQ(2),D0); %产生高斯高通滤波器 g=dftfilt(f,H); %对图像进行滤波 subplot(3,3,8),imshow(f),title('原图'); %显示原图像
subplot(3,3,9),imshow(g,[]),title('对原图进行滤波后的图');%显示滤波后图像
18
四 实验结果
1、产生运动模糊图像,运用维纳滤波进行图像恢复,显示结果。
运动模糊图像2、利用MATLAB实现频域滤波
10udeti5agnM0101Fy-1-10Fx用模版h对图像进行空域滤波图像滤波器频域滤波后的模值
恢复图像频域中的‘sobel’滤波器用滤波器对图像进行频域滤波原图
重排数据序列后的‘sobel’滤波器像用模版h空域滤波后的模值对原图进行滤波后的图19
图
实验五 图像的分割与边缘提取
一.实验目的及要求
1.利用MATLAB研究图像分割与边缘检测的常用算法原理; 2.掌握MATLAB图像域值分割与边缘检测函数的使用方法;
3.了解边缘检测的算法和用途,比较Sobel、Prewitt、Canny等算子边缘检测的差异。
二、实验内容
(一)
1.图像阈值分割
2.边缘检测
(二)利用MATLAB熟悉并验证其它图像分割方法
(三)采用MATLAB编程实现自动全局阈值算法,对图像'rice.tif'进行二值化分割
算法步骤:
1)选取一个的初始估计值T;
2)用T分割图像。这样便会生成两组像素集合:G1由所有灰度值大于 T 的像素组成,而G2由所有灰度值小于或等于 T 的像素组成。
3)对G1和G2中所有像素计算平均灰度值?1和?2。 4)计算新的阈值: T =(?1+?2)/2 5)重复步骤(2)到(4),直到逐次迭代所得到的 T 值之差小于一个事先定义的参数To,即,如果 |Tn – Tn-1| 三 实验源程序 1.图像阈值分割 clc;clear all, close all; I = imread('cameraman.tif'); subplot(2,3,1),imshow(I),title('原图'); subplot(2,3,2),imhist(I),title('原图的直方图'); T=120/255; Ibw1 = im2bw(I,T); %选择阈值T=120/255对图像二值化; subplot(2,3,3), imshow(Ibw1),title('选择阈值T=120/255对图像二值化'); T=graythresh(I); %采用Otsu方法计算最优阈值T对图像二值化,Otsu为自动阈值法 L = uint8(T*255); Ibw2 = im2bw(I,T); subplot(2,3,4), imshow(Ibw2),title('用Otsu方法计算最优阈值T对图像二值化'); T1=150/255; Ibw1 = im2bw(I,T1); %选择阈值T1=150/255对图像二值化; subplot(2,3,5), imshow(Ibw1),title('选择阈值T1=150/255对图像二值化'); T1=graythresh(I); %采用Otsu方法计算最优阈值T1对图像二值化; L = uint8(T1*255); Ibw2 = im2bw(I,T1); subplot(2,3,6), imshow(Ibw2),title('用Otsu方法计算最优阈值T1对图像二值化'); 20