数 字 图 像 处 理 实
验 指 导 书
125
200912512
班级: 学号: 姓名:田坤 专业:电子信息科学与技术
实验一 数字图像的运算
1.1 直方图 一.实验目的
1.熟悉matlab图像处理工具箱及直方图函数的使用; 2.理解和掌握直方图原理和方法;
二.实验设备:1.PC机一台;2.软件matlab。
三.程序设计
在matlab环境中,程序首先读取图像,然后调用直方图函数,设置相关参数,再输出处理后的图像。
I=imread('cameraman.tif');%读取图像 subplot(1,2,1),imshow(I) %输出图像
title('原始图像') %在原始图像中加标题 subplot(1,2,2),imhist(I) %输出原图直方图
title('原始图像直方图') %在原图直方图上加标题
四.实验步骤
1. 启动matlab双击桌面matlab图标启动matlab环境;
2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图像;
3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出;
五.实验结果:观察图像matlab环境下的直方图分布。
(a)原始图像 (b)原始图像直方图
六.实验报告要求
1、给出实验原理过程及实现代码: I=imread('coins.png');%读取图像
subplot(1,2,1),imshow(I) %输出图像
title('原始图像') %在原始图像中加标题 subplot(1,2,2),imhist(I) %输出原图直方图
title('原始图像直方图') %在原图直方图上加标题
2、输入一幅灰度图像,给出其灰度直方图结果,并进行灰度直方图分布原理分析。
1
1.2 3*3均值滤波 一.实验目的
1.熟悉matlab图像处理工具箱及均值滤波函数的使用; 2.理解和掌握3*3均值滤波的方法和应用;
二.实验设备:1.PC机一台;2.软件matlab 三.程序设计
在matlab环境中,程序首先读取图像,然后调用图像增强(均值滤波)函数,设置相关参数,再输出处理后的图像。 I = imread('cameraman.tif'); figure,imshow(I);
J=filter2(fspecial(‘average’,3),I)/255; figure,imshow(J);
四.实验步骤
1. 启动matlab
双击桌面matlab图标启动matlab环境;
2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的图像增强(均值滤波)函数,设置参数;最后输出处理后的图像; 3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出;
五.实验结果:
观察matlab环境下原始图像经3*3均值滤波处理后的结果。
2
(a)原始图像 (b)3*3均值滤波处理后的图像
六.实验报告要求
输入一幅灰度图像,给出其图像经3*3均值滤波处理后的结果,然后对每一点的灰度值和它周围24个点,一共25个点的灰度值进行均值滤波,看看对25个点取均值与对9个点取中值进行均值滤波有什么区别?有没有其他的算法可以改进滤波效果。
(a)原始图像 (b)3*3均值滤波处理后的图像
1.3 3*3中值滤波 一.实验目的
1.熟悉matlab图像处理工具箱及中值滤波函数的使用; 2.理解和掌握中值滤波的方法和应用;
二.实验设备:1.PC机一台;2.软件matlab 三.程序设计
在matlab环境中,程序首先读取图像,然后调用图像增强(中值滤波)函数,设置相关参数,再输出处理后的图像。 I = imread('cameraman.tif'); figure,imshow(I); J=medfilt2(I,[5,5]); figure,imshow(J);
四.实验步骤
1. 启动matlab
双击桌面matlab图标启动matlab环境;
2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的图像增强(中值滤波)函数,设置参数;最后输出处理后的图像; 3.浏览源程序并理解含义;
3
4.运行,观察显示结果; 5.结束运行,退出;
五.实验结果
观察matlab环境下原始图像经3*3中值滤波处理后的结果。
(a)原始图像 (b)3*3中值滤波处理后的图像
六.实验报告要求
输入一幅灰度图像,给出其图像经3*3中值滤波处理后的结果,然后对每一点的灰度值和它周围24个点,一共25个点的灰度值进行排序后取中值,然后该点的灰度值取中值。看看对25个点取中值与对9个点取中值进行中值滤波有什么区别?
(a)原始图像 (b)3*3中值滤波处理后的图像
1.4 图像的缩放 一.实验目的
1.熟悉matlab图像处理工具箱及图像缩放函数的使用; 2.掌握图像缩放的方法和应用;
二.实验设备:1.PC机一台;2.软件matlab 三.程序设计
在matlab环境中,程序首先读取图像,然后调用图像缩放函数,设置相关参数,再输出处理后的图像。
I = imread('cameraman.tif'); figure,imshow(I); scale = 0.5;
J = imresize(I,scale); figure,imshow(J);
四.实验步骤
1. 启动matlab
双击桌面matlab图标启动matlab环境;
4
2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的图像缩放函数,设置参数;最后输出处理后的图像;
3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出;
五.实验结果
观察matlab环境下图像缩放后的结果。
(a)原始图像 (b)缩放后的图像
六.实验报告要求
输入一幅灰度图像,给出其图像缩放后的结果,然后改变缩放比率,观察图像缩放后结果柄进行分析。
(a)原始图像 (b)缩放后的图像
1.5 图像旋转 一.实验目的
1.熟悉matlab图像处理工具箱及图像旋转函数的使用; 2.理解和掌握图像旋转的方法和应用;
二.实验设备:1.PC机一台;2.软件matlab 三.程序设计
在matlab环境中,程序首先读取图像,然后调用图像旋转函数,设置相关参数,再输出处理后的图像。
I = imread('cameraman.tif'); figure,imshow(I); theta = 30;
K = imrotate(I,theta); % Try varying the angle, theta. figure, imshow(K)
四.实验步骤
5
1. 启动matlab
双击桌面matlab图标启动matlab环境;
2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的图像旋转函数,设置参数;最后输出处理后的图像;
3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出;
五.实验结果
观察matlab环境下图像旋转后的结果。
(a)原始图像 (b)旋转后的图像
六.实验报告要求
输入一幅灰度图像,给出其图像旋转后的结果,然后改变旋转角度,观察图像旋转后结果柄进行分析。
(a)原始图像 (b)旋转后的图像
实验二 数字图像的离散余弦变换
一.实验目的
1.验证二维傅里叶变换的平移性和旋转不变性; 2.实现图像频域滤波,加深对频域图像增强的理解;
二.实验设备
1.PC机一台; 2.软件matlab;
6
三.实验内容及步骤
(1)产生如图3.1所示图像f1(x,y)(128×12小,暗处=0,亮处=255),用MATLAB中的fft2函数对其进行FFT:
① 同屏显示原图f1和FFT(f1)的幅度谱图;
② 若令f2(x,y)(1)xyf1(x,y),重复以上过程,比较二者幅度谱的异同,简述理由; ③ 若将f2(x,y)顺时针旋转45度得到f3(x,y),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较。
图3.1 实验图象f1(x, y) 1.%生成图形f1
f1=zeros(128,128);
f1((-30):(63+30),(-10):(63+10))=1; %FFT变换
fft_f1=log(1+abs(fftshift(fft2(f1)))); figure;
subplot(121);imshow(f1);title('Image f1');
subplot(122);imshow(fft_f1,[]);title('FFT f1');
2.%计算f2
f2=zeros(128,128); for i=1:128; for j=1:128;
f2(i,j)=((-1)^(i+j))*f1(i,j); end end
7
fft_f2A=log(1+abs(fft2(f2)));
fft_f2B=log(1+abs(fftshift(fft2(f2)))); figure;
subplot(131);imshow(f2);title('Image f2');
subplot(132);imshow(fft_f2B,[]);title('FFT f2');
subplot(133);imshow(fft_f2A,[]);title('FFT f2 Without FFTShift');
分析:根据傅里叶变换对的平移性质:
f(x,y)ej2(u0x/Mv0y/N)F(uu0,vv0);
当u0M/2且v0N/2时,有:
ej2(u0x/Mv0y/N)ej(xy)(1)xy
因此可得到:
f(x,y)(1)xyF(uM/2,vN/2)
所以,FFT(f2(x,y))就是FFT(f1(x,y))频谱中心化后的结果。
3.%计算f3
f3=imrotate(f2,-45,'nearest');
fft_f3=log(1+abs(fftshift(fft2(f3)))); figure;
subplot(121);imshow(f3);title('Image f3');
subplot(122);imshow(fft_f3,[]);title('FFT f3');
(2)对如图3.2所示的数字图像lena.img(256×256大小、256级灰度)进行频域的理想低通、高通滤波,同屏显示原图、幅度谱图和低通、高通滤波的结果图。
低通滤波:
fid=fopen('D:\\matlab7\\image\\lena.img','r'); data=(fread(fid,[256,256],'uint8'))';
8 图3.2 实验图象lena.img
subplot(1,2,1) imagesc(data); colormap(gray);
title('LENA','Color','r'); fft_lena=fft2(data); f=fftshift(fft_lena); for i=1:256 for j=1:256
if sqrt((i-128)^2+(j-128)^2)>30 f(i,j)=0; end end end
subplot(1,2,2);
[x,y]=meshgrid(1:1:256); surf(x,y,f)
高通滤波:
fid=fopen('D:\\matlab7\\image\\lena.img','r'); data=(fread(fid,[256,256],'uint8'))'; subplot(1,2,1) imagesc(data); colormap(gray);
title('LENA','Color','r'); fft_lena=fft2(data); for i=1:256
for j=1:256
if sqrt((i-128)^2+(j-128)^2)<2 f(i,j)=0; end end
subplot(1,2,2);
[x,y]=meshgrid(1:1:256); surf(x,y,f)
9
实验三 基于直方图均衡化的图像增强
一.实验目的
1.了解空间域图像增强的各种方法(点处理、掩模处理); 2.掌握采用直方图均衡化进行图像增强的方法;
3. 使用邻域平均法编写程序实现图像增强,进一步掌握掩模法及其改进(加门限法)消除噪声的原理;
二.实验设备
1.PC机一台; 2.软件matlab;
三.实验内容及步骤
对如图3.1所示的两幅128×128、256级灰度的数字图像fing_128.img和cell_128.img进行如下处理:
指纹图fing_128.img 显微医学图像cell_128.img
图3.1 实验图像
(1)对原图像进行直方图均衡化处理,同屏显示处理前后图像及其直方图,比较异同,并回答为什么数字图像均衡化后其直方图并非完全均匀分布。
指纹图像:
fid=fopen('fing_128.img','r');
im=(fread(fid,[128,128],'uint8'))'; im=uint8(im); colormap(gray);
10
subplot(221);imshow(im); subplot(222);
imh=histeq(im);%直方图均衡化 imshow(imh);
subplot(223);imhist(im); subplot(224);imhist(imh);
显微医学图像:
fid=fopen('cell_128.img','r');
im=(fread(fid,[128,128],'uint8'))'; im=uint8(im); colormap(gray);
subplot(221);imshow(im); subplot(222);
imh=histeq(im);%直方图均衡化 imshow(imh);
subplot(223);imhist(im); subplot(224);imhist(imh);
11
分析:由于数字图像中像素的灰度值取值是离散和不连续的,因而变换后的像素灰度值在计算中出现了归并现象,所以变换后的直方图并不是呈完全均匀分布的。 (2)对原图像加入点噪声,用4-邻域平均法平滑加噪声图像(图像四周边界不处理,下同),同屏显示原图像、加噪声图像和处理后的图像。
① 不加门限;
11② 加门限Tf(m,n),(其中f(m,n)2f(i,j))
2Nij代码:fid=fopen('fing_128.img','r');
im=(fread(fid,[128,128],'uint8')); im=im2double(uint8(im));
J=imnoise(im,'gaussian'); %加入高斯噪声 w=[0 0.25 0;0.25 0 0.25;0 0.25 0]; im_L=filter2(w,J);%四邻域平滑 %加门限后滤波
T=2*sum(J(:))/128^2; im_T=zeros(128,128); for i=1:128 for j=1:128
if abs(J(i,j)-im_L(i,j))>T im_T(i,j)=im_L(i,j); else
im_T(i,j)=J(i,j); end end end
colormap(gray);
subplot(2,2,1);imshow(im);title('Image'); subplot(2,2,2);imshow(J);title('Noise');
subplot(2,2,3);imshow(im_L);title('四邻域平滑后'); subplot(2,2,4);imshow(im_T);title('加门限后');
对高斯噪声的处理效果:
12
对脉冲噪声的处理效果:
实验四 图像分割(常见的边缘检测算子——Sobel、Prewitt、Log)
一.实验目的
1.熟悉matlab图像处理工具箱及图像边缘检测函数的使用;
2.理解和掌握图像边缘检测(Sobel、Prewitt、Log边缘算子)的方法和应用;
13
二.实验设备
1.PC机一台; 2.软件matlab;
三.程序设计
在matlab环境中,程序首先读取图像,然后调用图像边缘检测(Sobel、Prewitt、Log边缘算子)函数,设置相关参数,再输出处理后的图像。 I = imread('cameraman.tif'); J1=edge(I,'sobel'); J2=edge(I,'prewitt'); J3=edge(I,'log');
subplot(1,4,1),imshow(I); subplot(1,4,2),imshow(J1); subplot(1,4,3),imshow(J2); subplot(1,4,4),imshow(J3);
四.实验步骤
1. 启动matlab
双击桌面matlab图标启动matlab环境;
2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的边缘检测(Sobel边缘算子、Prewitt边缘算子、Log边缘算子)函数,设置参数;最后输出处理后的图像; 3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出;
五.实验结果
观察经过图像边缘检测(Sobel、Prewitt、Log边缘算子)处理后的结果。
(a)原始图像 (b)Sobel边缘算子
(c)Prewitt边缘算子 (d)Log边缘算子
六.实验报告要求
14
输入一幅灰度图像,给出其图像边缘检测(Sobel、Prewitt、Log边缘算子)后的结果并进行分析对比。
代码:
fid=fopen('lena.img','r');
im=(fread(fid,[256,256],'uint8'))'; im=im2double(uint8(im)); im_R=edge(im,'Roberts'); im_P=edge(im,'Prewitt'); im_S=edge(im,'Sobel'); im_L=edge(im,'Log'); colormap(gray);
subplot(321);imshow(im);title('源图像');
subplot(323);imshow(im_R);title('Roberts检测'); subplot(324);imshow(im_P);title('Prewitt检测'); subplot(325);imshow(im_S);title('Sobel检测'); subplot(326);imshow(im_L);title('Log检测');
15
16