数字图像处理实验报告.docx
《数字图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告.docx(46页珍藏版)》请在冰豆网上搜索。
数字图像处理实验报告
数字图像处理实验报告
实验一数字图像处理编程基础
一、实验目的
1.了解MATLAB图像处理工具箱;
2.掌握MATLAB的基本应用方法;
3.掌握MATLAB图像存储/图像数据类型/图像类型;
4.掌握图像文件的读/写/信息查询;
5.掌握图像显示--显示多幅图像、4种图像类型的显示方法;
6.编程实现图像类型间的转换。
二、实验内容
1.实现对图像文件的读/写/信息查询,图像显示--显示多幅图像、4种图像类型的显示方法、图像类型间的转换。
2.运行图像处理程序,并保存处理结果图像。
三、源代码
I=imread('cameraman.tif')
imshow(I);
subplot(221),
title('图像1');
imwrite('cameraman.tif')
M=imread('pout.tif')
imview(M)
subplot(222),
imshow(M);
title('图像2');
imread('pout.bmp')
N=imread('eight.tif')
imview(N)
subplot(223),
imshow(N);
title('图像3');
V=imread('circuit.tif')
imview(V)
subplot(224),
imshow(V);
title('图像4');
N=imread('C:
\Users\Administrator\Desktop\1.jpg')
imshow(N);
I=rgb2gary(GRB)
[X.map]=gary2ind(N,2)
RGB=ind2rgb(X,map)
[X.map]=gary2ind(I,2)
I=ind2gary(X,map)
I=imread('C:
\Users\dell\Desktop\111.jpg');
subplot(231),imshow(I);
title('原图');
M=rgb2gray(I);
subplot(232),imshow(M);
[X,map]=gray2ind(M,100);
subplot(233),imshow(X);
RGB=ind2rgb(X,map);
subplot(234),imshow(X);
[X,map]=rbg2ind(I);
subplot(235),imshow(X);
四、实验效果
实验二图像几何变换实验
一、实验目的
1.学习几种常见的图像几何变换,并通过实验体会几何变换的效果;
2.掌握图像平移、剪切、缩放、旋转、镜像等几何变换的算法原理及编程实现;
3.掌握matlab编程环境中基本的图像处理函数。
二、实验原理
1.初始坐标为
的点经过平移
,坐标变为
,两点之间的关系为:
,以矩阵形式表示为:
2.图像的镜像变换是以图象垂直中轴线或水平中轴线交换图像的变换,分为垂直镜像变换和水平镜像变换,两者的矩阵形式分别为:
3.图像缩小和放大变换矩阵相同:
当
,
时,图像缩小;当
,
时,图像放大。
4.图像旋转定义为以图像中某一点为原点以逆时针或顺时针方向旋转一定角度。
其变换矩阵为:
该变换矩阵是绕坐标轴原点进行的,如果是绕一个指定点旋转,则先要将坐标系平移到该点,进行旋转,然后再平移回到新的坐标原点。
三、实验内容
1.启动MATLAB程序,对图像文件分别进行平移、垂直镜像变换、水平镜像变换、缩放和旋转操作。
2.运行图像处理程序,并保存处理结果图像。
四、源代码及实验效果
1.平移
I=imread('circuit.tif');
subplot(121),imshow(I);
title('before');
I=double(I);
M=zeros(size(I));
N=size(I);
x=10;
y=10;
M(x+1:
N
(1),y+1:
N
(2))=I(1:
N
(1)-x,1:
N
(2)-y);
subplot(122),imshow(uint8(M));
title('after');
2.水平垂直镜像
I=imread('pout.tif');
subplot(131),imshow(I);
title('before');
I=double(I);
A=zeros(size(I));
B=zeros(size(I));
M=size(I);
A(1:
M
(1),1:
M
(2))=I(M
(1):
-1:
1,1:
M
(2));
B(1:
M
(1),1:
M
(2))=I(1:
M
(1),M
(2):
-1:
1);
subplot(132),imshow(uint8(A));
title('竖直');
subplot(133),imshow(uint8(B));
title('水平');
3.缩放
I=imread('pout.tif');
subplot(131),imshow(I);
title('before');
I=double(I);
A=zeros(size(I));
B=zeros(size(I));
[m,n]=size(I);
x=1.8;
y=1.8;
x2=0.85;
y2=0.85;
fori=1:
m
forj=1:
n
i1=round(i*x);
j1=round(j*y);
i2=round(i*x2);
j2=round(j*y2);
if(j1>=0)&&(i1>=0)&&(i1<=m)&&(j1<=n)
A(i,j)=I(i1,j1);
end
if(j2>=0)&&(i2>=0)&&(i2<=m)&&(j2<=n)
B(i,j)=I(i2,j2);
end
end
end
subplot(132),imshow(uint8(A));
title('small');
subplot(133),imshow(uint8(B));
title('big');
4.旋转
jiao=50;
M=imread('cameraman.tif');
imshow(M);
[hw]=size(M);
theta=jiao/180*pi;
rot=[cos(theta)-sin(theta)0;sin(theta)cos(theta)0;001];%建立变换矩阵
pix1=[111]*rot;%变后左上
pix2=[1w1]*rot;%变后右上
pix3=[h11]*rot;%变后左下
pix4=[hw1]*rot;%变后右下
height=round(max([abs(pix1
(1)-pix4
(1))+0.5abs(pix2
(1)-pix3
(1))+0.5]));%新宽
width=round(max([abs(pix1
(2)-pix4
(2))+0.5abs(pix2
(2)-pix3
(2))+0.5]));%新高
N=zeros(height,width);
chao_y=abs(min([pix1
(1)pix2
(1)pix3
(1)pix4
(1)]));%y负轴超量
chao_x=abs(min([pix1
(2)pix2
(2)pix3
(2)pix4
(2)]));%x负轴超量
fori=1-chao_y:
height-chao_y
forj=1-chao_x:
width-chao_x
pix=[ij1]/rot;%用变换后图像的点的坐标去寻找原图像点的坐标,
float_Y=pix
(1)-floor(pix
(1));%向下舍入
float_X=pix
(2)-floor(pix
(2));
ifpix
(1)>=1&&pix
(2)>=1&&pix
(1)<=h&&pix
(2)<=w
pix_up_left=[floor(pix
(1))floor(pix
(2))];%四个相邻的点
pix_up_right=[floor(pix
(1))ceil(pix
(2))];
pix_down_left=[ceil(pix
(1))floor(pix
(2))];
pix_down_right=[ceil(pix
(1))ceil(pix
(2))];
value_up_left=(1-float_X)*(1-float_Y);%周围四个点权重
value_up_right=float_X*(1-float_Y);
value_down_left=(1-float_X)*float_Y;
value_down_right=float_X*float_Y;
N(i+chao_y,j+chao_x)=value_up_left*M(pix_up_left
(1),pix_up_left
(2))+...
value_up_right*M(pix_up_right
(1),pix_up_right
(2))+...
value_down_left*M(pix_down_left
(1),pix_down_left
(2))+...
value_down_right*M(pix_down_right
(1),pix_down_right
(2));
end
end
end
figure,imshow(uint8(N))
实验三图像增强实验
一、实验目的
1.掌握基本的图像增强方法,观察图像增强的效果,加深对灰度直方图的理解。
2.掌握对数和和指数增强,直方图均衡化方法,重点掌握图像直方图增强的原理和程序设计。
二、实验原理
对数变化能对原图像的动态范围进行压缩,其数学表达如下:
其中C为尺寸比例常数。
指数变化一般的表示形式:
(a,b,c用于调整曲线的位置和形状的参数。
)
利用直方图统计的结果,使图像的直方图均衡的方法称为直方图均衡化,直方图均衡化可以达到增强图像显示效果的作用。
通过直方图统计,可以观察出,图像中各种亮度所占的比例大部分布不均匀,设法增加在直方图统计中所占比例高的象素和其他比例少的象素之间亮度差,可以提高图像的显示效果。
简单来说,直方图增强的方法就是压缩直方图中比例少的象素所占用的灰度范围,多出来的灰度空间按照统计比例分配给直方图中比例高的象素使用。
这种方法主要是针对人眼对灰度差别越大的图像越容易分辨的特点而进行的增强。
三、实验内容
1.实现对数增强或指数增强。
2.实现图像直方图均衡化增强。
四、分析思考
思考为什么进行图像直方图均衡化后,能够增强图像效果。
答:
因为直方图均衡化处理之后,原来比较少像素的灰度会被分配到别的灰度去,像素相对集中,处理后灰度范围变大,对比度变大,清晰度变大,所以能有效增强图像。
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。
通过这种方法,亮度可以更好地在直方图上分布。
这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
五、源代码及实验效果
1.对数增强
I=imread('cameraman.tif');
subplot(221);
imshow(I);
I=double(I);
I2=41*log(1+I);
I2=uint8(I2);
subplot(222);
imshow(I2);
2.指数增强
I=imread('circuit.tif');
>>[M,N]=size(I);
>>g=zeros(M,N);
>>I=double(I);
>>g=double(g);
>>k1=min(min(I));
>>k2=max(max(I));
>>a=(k2-k1)/2;
b=k2-80;
c=k1-20;
fori=1:
M
forj=1:
N
g(i,j)=b^(c*(I(i,j)-a))-1;
end
end
>>figure;
>>subplot(121);
imshow(I,[]);
>>subplot(122);
>>imshow(g,[]);
>>
3.直方图均衡化增强
I=imread('pout.tif');
graydis=zeros(1,256);%设置矩阵大小
graydispro=zeros(1,256);
new_graydis=zeros(1,256);
new_graydispro=zeros(1,256);
[hw]=size(I);
N=zeros(h,w);
%计算原始直方图各灰度级像素个数graydis
forx=1:
h
fory=1:
w
graydis(1,I(x,y))=graydis(1,I(x,y))+1;
end
end
%计算原始直方图graydispro
graydispro=graydis./sum(graydis);
subplot(2,2,1);
plot(graydispro);
title('灰度直方图');
xlabel('灰度值');ylabel('像素的概率密度');
%计算原始累计直方图
fori=2:
256
graydispro(1,i)=graydispro(1,i)+graydispro(1,i-1);
end
%计算和原始灰度对应的新的灰度t[],建立映射关系
fori=1:
256
t(1,i)=floor(254*graydispro(1,i)+0.5);
end
%统计新直方图各灰度级像素个数
fori=1:
256
new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i);
end
%计算新的灰度直方图new_graydispro
new_graydispro=new_graydis./sum(new_graydis);
subplot(2,2,2);
plot(new_graydispro);
title('均衡化后的灰度直方图');
xlabel('灰度值');ylabel('像素的概率密度');
%计算直方图均衡后的新图new_tu
forx=1:
h
fory=1:
w
N(x,y)=t(1,I(x,y));
end
end
subplot(2,2,3),imshow(I,[]);
title('原图');
subplot(2,2,4),imshow(N,[]);
title('直方图均衡化后的图');
实验四图像滤波实验
一、实验目的
掌握中值滤波方法,掌握图像锐化方法,比较各个梯度算子锐化的效果。
掌握频域滤波方法,观察低通滤波和高通滤波的效果。
二、实验原理
中值滤波是一种非线性平滑滤波,它是用一个有奇数点的滑动窗口,将窗口中心点的值用窗口各点的中值代替。
图像的锐化是使边缘和轮廓线模糊的图像变得清晰,使其细节更加清晰。
从数学上看,图像模糊的实质是图像受到平均或者积分运算的影响,因此对其进行逆运算(如微分运算)就可以使图像清晰。
在频域上卷积被表示为乘积,因此在频域上对图像进行滤波就变得更加直观了。
在频域上进行滤波的步骤:
计算需增强的图像的傅里叶变化。
将其与1个传递函数相乘。
再将结果进行傅里叶逆变化可以得到增强的图像。
三、实验内容
1.选择测试图像分别添加高斯、椒盐、泊松噪声,实现中值滤波;
2.选择测试图像实现两种常用梯度算子(Sobel算子、Prewitt算子);
3.选择测试图像实现理想低通滤波;
4.选择测试图像实现巴特沃斯高通滤波。
四、分析思考
依次给出“均值滤波器、中值滤波器、laplace滤波器”是线性还是非线性的。
答:
均值滤波器和中值滤波器是线性的,laplace滤波器是非线性的。
五、源代码及实验效果
1.椒盐噪声
I=imread('cameraman.tif');
I=imnoise(I,'salt&pepper',0.02);
I=double(I);
[dep,wide]=size(I);
M=ones(size(I));
fori=3:
dep-2
forj=3:
wide-2
M(i,j)=median([I(i-2,j-2)I(i-2,j-1)I(i-2,j)I(i-2,j+1)I(i-2,j+2)I(i-1,j-2)I(i-1,j-1)I(i-1,j)I(i-1,j+1)I(i-1,j+2)I(i,j-2)I(i,j-1)I(i,j)I(i,j+1)I(i,j+2)I(i+1,j-2)I(i+1,j-1)I(i+1,j)I(i+1,j+1)I(i+1,j+2)I(i+2,j-2)I(i+2,j-1)I(i+2,j)I(i+2,j+1)I(i+2,j+2)]);
end
end
fori=3:
dep-2
M(i,1)=M(i,3);
M(i,2)=M(i,3);
M(i,wide-1)=M(i,wide-2);
end
M(1,:
)=M(3,:
);
M(2,:
)=M(3,:
);
M(dep,:
)=M(dep-2,:
);
M(dep-1,:
)=M(dep-2,:
);
figure
subplot(121),imshow(uint8(I));
subplot(122),imshow(uint8(M));
2.高斯噪声
3.泊松噪声
4.Sobel
I=imread('cameraman.tif');
[H,W]=size(I);
M=double(I);
J=M;
fori=2:
H-1
forj=2:
W-1
J(i,j)=abs(M(i-1,j+1)-M(i-1,j-1)+2*M(i,j+1)-2*M(i,j-1)+M(i+1,j+1)-M(i+1,j-1))+abs(M(i-1,j-1)-M(i+1,j-1)+2*M(i-1,j)-2*M(i+1,j)+M(i-1,j+1)-M(i+1,j+1));
end;
end;
subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(uint8(J));title('Sobel处理后');
5.Prewwit
I=imread('cameraman.tif');
[H,W]=size(I);
M=double(I);
J=M;
fori=2:
H-1
forj=2:
W-1
J(i,j)=abs(M(i-1,j+1)-M(i-1,j-1)+M(i,j+1)-M(i,j-1)+M(i+1,j+1)-M(i+1,j-1))+abs(M(i-1,j-1)-M(i+1,j-1)+M(i-1,j)-M(i+1,j)+M(i-1,j+1)-M(i+1,j+1));
end;
end;
subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(uint8(J));title('Prewitt处理后');
6.理想低通滤波
G=imread('pout.tif');
J=imnoise(G,'salt&pepper',0.02);
subplot(121),imshow(J);title('添加椒盐噪声图像');
J=double(J);
%采用傅立叶变换
f=fft2(J);
%采用矩阵平衡
g=fftshift(f);
[M,N]=size(f);
n=3;
d0=45;
n1=floor(M/2);%向下取整
n2=floor(N/2);
fori=1:
M
forj=1:
N
d=sqrt((i-n1)^2+(j-n2)^2);
ifd<=d0
h=1;
else
h=0;
end
g(i,j)=h*g(i,j);
end
end
g=ifftshift(g);
g=uint8(real(ifft2(g)));
subplot(122);
imshow(g);title('理想低通滤波后图像');
7.巴特沃斯高通滤波
J=imread('cameraman.tif');
subplot(221),imshow(uint8(J));
title('模糊图像');
J=double(J);
f=fft2(J);
g=fftshift(f);
[M,N]=size(f);
n1=floor(M/2);
n2=floor(N/2);
n=2;
d0=20;
fori=1:
M
forj=1:
N
d=sqrt((i-n1)^2+(j-n2)^2);
ifd==0
h1=0;
h2=0.5;
else
h1=1/(1+(d0/d)^(2*n));
h2=1/(1+(d0/d)^(2*n))+0.5;
end
gg1(i,j)=h1*g(i,j);
gg2(i,j)=h2*g(i,j);
end
end
gg1=ifftshift(gg1);
gg1=uint8(real(ifft2(gg1)));
subplot(223);
imshow(gg1);
title('巴特沃斯高通滤波结果');
gg2=ifftshift(gg2);
gg2=uint8(real(ifft2(gg2)));
subplot(224);
imshow(gg2);
title('巴特沃斯高通加强滤波结果');
实验五图像分割实验
一、实验目的
掌握梯度边缘检测算子,了解拉普拉斯边缘检测算子和Canny边缘检测算子;
掌握边界跟踪方法及其原理;
掌握自动阈值法和分水岭法。
二、实验原理
图像分割是按照一定的规则把图像划分成若干个互不相交、具有一定性质的区域,把人们关注的部分从图像中提取出来,进一步加以研究分析和处理。
图像分割的结果是图像特征提取和识别等图像理解的基础,对图像分割的研究一直是数字图像处理技术研究中的热点和焦点。
图像分割使得其后的图像分析,识别等高级处理阶段所要处理的数据量大大减少,同时又保留有关图像结构特征的信息。
图像分割在不同的领域也有其它名称,如目标轮廓技术、目标检测技术、阈值化技术、目标跟踪技术等,这些技术本身或其核心实际上也就是图像分割技术。
边缘是图像上灰度变化最剧烈的地方,传统的边缘检测就是利用了这个特点,对图像各个像素点进行微分或求二阶微分来确定边缘像素点。
一阶微分图像的峰值处对应着图像的边缘点;二阶微分图像的过零点处对应着图像的边缘点。
根据数字图像的特点,处理图像过程中常采用差分来代替导数运算,对于图像的简单一阶导数运算,由于具有固定的方向性,只能检测特