数字图像处理实验作业及代码.docx
《数字图像处理实验作业及代码.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验作业及代码.docx(23页珍藏版)》请在冰豆网上搜索。
数字图像处理实验作业及代码
数字图像处理—实验一
源程序:
a=imread('rice.png');
figure,imshow(a),title('原图');axison;
a=double(a)/256;
figure,imhist(a),title('原直方图');axison;
r=[0:
0.001:
1];
s1=[r<0.35].*r*0.3+[r<=0.65].*[r>=0.35].*(0.105+2.6333*(r-0.35))+[r>0.65].*(1+0.3*(r-1));
s2=[r<=0.5].*(r.^5)*15.9744+[r>0.5].*((r-0.5).^0.2+0.12);
a1=[a<0.35].*a*0.3+[a<=0.65].*[a>=0.35].*(0.105+2.6333*(a-0.35))+[a>0.65].*(1+0.3*(a-1));
a2=[a<=0.5].*(a.^5)*15.9744+[a>0.5].*((a-0.5).^0.2+0.12);
figure,imshow(a1),title('改后一');axison;
figure,imhist(a1),title('改后直方图一');axison;
figure,plot(r,s1),title('变换函数一');axison;
figure,imshow(a2),title('改后二');axison;
figure,imhist(a2),title('改后直方图二');axison;
figure,plot(r,s2),title('变换函数二');axison;
imwrite(a1,'改后rice一.jpg');
imwrite(a2,'改后rice二.jpg');
b=imread('kids.tif');
figure,imshow(b),title('原图');axison;
b=double(b)/256;
figure,imhist(b);title('原直方图');axison;
s1=r.^0.6;
s2=r.^0.4;
s3=r.^0.3;
b1=imadjust(b,[],[],0.6);
b2=imadjust(b,[],[],0.4);
b3=imadjust(b,[],[],0.3);
figure,imshow(b1),title('改后一');axison;
figure,imhist(b1),title('改后直方图一');axison;
figure,plot(r,s1),title('变换函数一');axison;
figure,imshow(b2),title('改后二');axison;
figure,imhist(b2),title('改后直方图二');axison;
figure,plot(r,s2),title('变换函数二');axison;
figure,imshow(b3),title('改后三');axison;
figure,imhist(b3),title('改后直方图三');axison;
figure,plot(r,s3),title('变换函数三');axison;
imwrite(b1,'改后kids一.jpg');
imwrite(b2,'改后kids二.jpg');
imwrite(b3,'改后kids三.jpg');
c=imread('circuit.tif');
figure,imshow(c),title('原图');axison;
c=double(c)/256;
figure,imhist(c),title('原直方图');axison;
s=1-r;
c=1-c;
figure,imshow(c),title('变换后');axison;
figure,imhist(c),title('变换后直方图');axison;
figure,plot(r,s),title('变换函数');axison;
imwrite(c,'改后circuit.jpg');
d=imread('rice.png');
figure,imshow(d),title('原图');axison;
d=double(d)/256;
figure,imhist(d),title('原直方图');axison;
r=[0:
0.001:
1];
s=[r<=0.4].*[r>=0.2]*0.6;
d=[d<=0.4].*[d>=0.2]*0.6+[d>0.4].*d+[d<0.2].*d;
figure,imshow(d),title('变换后');axison;
figure,imhist(d),title('变换后直方图');axison;
figure,plot(r,s),title('变换函数');axison;
imwrite(d,'第二次改后rice.jpg');
e=imread('Picture.jpg');
e=e(:
:
1);
e=im2double(e);
figure,imshow(e),title('原图');axison;
figure,imhist(e),title('原直方图');axison;
r=[0:
0.001:
1];
s=[r<0.3].*r*1.1+[r>0.65].*r*0.8+[r>=0.3].*[r<=0.65].*(0.11+r*1.5);
e=[e<0.3].*e*1.1+[e>0.65].*e*0.8+[e>=0.3].*[e<=0.65].*(0.11+e*1.5);
figure,imshow(e),title('变换后');axison;
figure,imhist(e),title('变换后直方图');axison;
figure,plot(r,s),title('变换函数');axison;
imwrite(e,'改后Picture.jpg');
处理前后图像:
结论:
不同的灰度变换对最终图像的影响效果是不同的。
通过matlab灰度变化可以增加图像亮度,提高比照度,使视觉效果更好。
数字图像处理—实验二
源代码:
I1=imread('mountain.jpg');
[J1,T1]=histeq(I1,256);
figure,subplot(2,3,1),imshow(I1),title('原图');axison;
subplot(2,3,2),imhist(I1),title('原图直方图');axison;
subplot(2,3,4),imshow(J1),title('均衡化后图像');axison;
subplot(2,3,5),imhist(J1),title('均衡化后直方图');axison;
subplot(2,3,6),plot(T1),title('变换函数');axison;
I2=uint8(I1);
r=0:
1:
255;
n=([r<=5].*r*1400+[r>5].*[r<=20].*(7000-r*310)+[r>20].*[r<=180].*(900-r*5)...
+[r>180].*[r<=225].*(r*8-1440)+[r>225].*[r<=255].*(3060-r.*12));
[J2,T2]=histeq(I2,n);
figure,subplot(2,3,1),imshow(I2),title('原图');axison;
subplot(2,3,2),imhist(I2),title('原图直方图');axison;
subplot(2,3,4),imshow(J2),title('规定化后图像');axison;
subplot(2,3,5),imhist(J2),title('规定化后直方图');axison;
subplot(2,3,6),plot(T2),title('变换函数');axison;
I3=im2double(I1);
[mn]=size(I3);
r1=zeros(1,256);p=r1;s1=r1;s2=r1;
a=0;
fork=1:
256
fori=1:
m
forj=1:
n
if(I3(i,j)==((k-1)/255));
r1(k)=r1(k)+1;
end
end
end
p(k)=r1(k)/65536;
s1(k)=a+p(k);
a=s1(k);
s2(k)=round(s1(k)/(1/255))/255;
end
[mn]=size(I3);
t=0;
fork=1:
256
t=t+1;
if(k==256||s2(k)~=s2(k+1))
fori=1:
m
forj=1:
n
if(I3(i,j)>=(k-t)/255&&I3(i,j)<=(k-1)/255)
I4(i,j)=s2(k);
end
end
end
t=0;
end
end
I3=mat2gray(I3);
I4=mat2gray(I4);
figure,subplot(2,3,1),imshow(I3),title('原图');axison;
subplot(2,3,2),imhist(I3),title('原图直方图');axison;
subplot(2,3,4),imshow(I4);title('自编函数均衡化');axison;
subplot(2,3,5);imhist(I4);title('自编函数均衡化后直方图');axison;
subplot(2,3,6),plot(s1),title('变换函数');axison;
处理前后图像:
结论:
直方图均衡化通过使用累积函数对灰度值进行“调整”以实现比照度的增强,
通常用来增加许多图像的局部比照度,尤其是当图像的有用数据的比照度相当接近的时候。
通过这种方法,亮度可以更好地在直方图上分布。
这样就可以用于增强局部的比照度而不影响整体的比照度。
数字图像处理—实验三
源代码:
closeall;
I=imread('test3_1.jpg');
I=im2double(I);
tic
J=nlfilter(I,[55],@mean2);
toc
tic
T=nlfilter(I,[55],@std2);
toc
figure
(1),subplot(2,3,1),imshow(I),title('原始图像');axison;
subplot(2,3,2),imshow(J),title('邻域均值图像');axison;
subplot(2,3,3),imshow(T),title('邻域均值标准差图像');axison;
imwrite(J,'nlfilterl滤波后.jpg');
I=imnoise(I,'gaussian',0,0.02);
J=nlfilter(I,[55],@mean2);
T=nlfilter(I,[55],@std2);
subplot(2,3,4),imshow(I),title('加噪图像');axison;
subplot(2,3,5),imshow(J),title('加噪邻域均值图像');axison;
subplot(2,3,6),imshow(T),title('加噪邻域均值标准差图像');axison;
imwrite(J,'加噪nlfilterl滤波后.jpg');
I2=imread('test3_2.jpg');
J2=im2double(I2);
tic
ave=fspecial('average',5);
J2=filter2(ave,J2);
toc
J3=medfilt2(J2,[55]);
tic
J4=nlfilter(J2,[55],@mean2);
toc
figure
(2),subplot(2,2,1),imshow(I2),title('原始图像');axison;
subplot(2,2,2),imshow(J2),title('filter2处理后图像');axison;
subplot(2,2,3),imshow(J3),title('medfilt2处理后图像');axison;
subplot(2,2,4),imshow(J4),title('nlfilter处理后图像');axison;
imwrite(J2,'filter2滤波后.jpg');
imwrite(J3,'medfilt2滤波后.jpg');
imwrite(J4,'nlfilter滤波后
(2).jpg');
F=midf(I2,3,3);
figure(3),subplot(1,2,1),imshow(I2),title('滤波前');axison;
subplot(1,2,2),imshow(F),title('中值滤波后');axison;
imwrite(F,'自编中值滤波后.jpg');
调用函数一:
functionmid=middle(F1)%求窗口元素的中值
[m,n]=size(F1);
x=m*n;
y=m*n;
k=0;
fori=1:
m
forj=1:
n
k=k+1;
x(k)=F1(i,j);%组成一维数组
end
end
fori=1:
y
k=i;
forj=i+1:
y
ifx(j)k=j;
end
end
ifk~=i
t=x(k);
x(k)=x(i);
x(i)=t;
end
end
mid=x(ceil(y/2));
functionave=midf(F,m,n)
[X,Y]=size(F);
fori=ceil(m/2):
X-fix(m/2)
forj=ceil(n/2):
Y-fix(n/2)
F1=F(i-fix(m/2):
i+fix(m/2),j-fix(n/2):
j+fix(n/2));%扣出窗口内的元素组成一矩阵
F(i,j)=middle(F1);%求该矩阵的中值
end
end
ave=uint8(F);
处理前后图像:
结论:
平滑技术用于平滑图像的噪声,平滑噪声可以在空间域中进行,基本方法是求像素灰度的平均值或中值。
但是这些很容易引起边缘的模糊,常用的有均值滤波、中值滤波,在使用时,针对不同的噪声,也需要不同的滤波法,没有哪种方法是绝对好,必须具体情况具体分析。
数字图像处理—实验四
源代码:
a=imread('cameraman.tif');
a=im2double(a);
figure;
subplot(1,3,1);imshow(a);title('inputimage');
h1=fspecial('sobel');
MotionBlur1=imfilter(a,h1);
subplot(1,3,2);imshow(MotionBlur1);title('sobel-MotionBlurredImage');
h2=fspecial('Laplacia',0);
MotionBlur2=imfilter(a,h2);
subplot(1,3,3);imshow(MotionBlur2);title('Laplacia-MotionBlurredImage');
figure('name','直接输入算子锐化处理','NumberTitle','Off');
subplot(1,3,1);imshow(a);title('inputimage');
dx=[-1-2-1;000;121];
dy=[-101;-202;-101];
d=(dx.^2+dy.^2).^0.5;
MotionBlur3=imfilter(a,d);
subplot(1,3,2);imshow(MotionBlur3);title('sobel-directinput-MotionBlurredImage');
l=[0-10;-14-1;0-10];
MotionBlur4=imfilter(a,l);
subplot(1,3,3);imshow(MotionBlur4);title('Laplacia-directinput-MotionBlurredImage');
a=imread('skeleton.jpg');
a=im2double(a);
figure;
subplot(1,3,1);imshow(a);title('inputimage');
L=[-1-1-1;-18-1;-1-1-1];
MotionBlur1=imfilter(a,L);
subplot(1,3,2);imshow(MotionBlur1);title('对角线Laplacian算子');
MotionBlur2=MotionBlur1+a;
subplot(1,3,3);imshow(MotionBlur2);title('叠加后图形');
figure;
subplot(2,3,1);imshow(a);title('inputimage');
h1=fspecial('sobel');
h2=imfilter(a,h1);
subplot(2,3,2);imshow(h2);title('sobel-MotionBlurredImage');
MotionBlur3=imfilter(h2,[55]);
subplot(2,3,3);imshow(MotionBlur3);title('sobel-领域平均');
MotionBlur4=imsubtract(MotionBlur2,h2);
subplot(2,3,4);imshow(MotionBlur4);title('相乘图象');
MotionBlur5=MotionBlur4+a;
subplot(2,3,5);imshow(MotionBlur5);title('与原始图叠加后图形');
MotionBlur6=imadjust(MotionBlur5,[],[],0.2);
subplot(2,3,6);imshow(MotionBlur6);title('幂指数为0.2的灰度变换');
a1=imread('cell.jpg');
a=im2double(a1);
f=double(a1);
[m,n]=size(f);
fori=1:
m
forj=1:
n
ifi==m
G(i,j)=G(i-1,j);
elseifj==n
G(i,j)=G(i,j-1);
else
G(i,j)=abs(f(i,j)-f(i+1,j+1))+abs(f(i+1,j)-f(i,j+1));
end
end
end
Z=f;
figure;
fori=4:
8
k=find(G>=i);Z(k)=255;
q=find(G
subplot(2,3,1);imshow(a);title('inputimage');
subplot(2,3,i-2);imshow(Z);title(['门限T为',num2str(i)]);
end;
处理前后图像:
结论:
Sobel对噪声的增强作用小,具有一定的平滑特性和方向特性,处理后的图象边界比较粗略,反映边界信息较少,但反映的边界比较清晰。
Laplacian算子对噪声的增强作用较大,处理后的图象边缘较sobel弱,反映的边界信息不是太清晰。
原图像经叠加,增强了噪声,但处理后的图像细节部分比原图像清晰。
.经线性滤波处理后,去除噪声的同时使图象的边缘变得模糊了。
实验小结:
通过对数字图像处理这门课的学习及matlab上机的实验操作,虽然学习不很深入,但我也算认识到了对图像基本的变换方式。
我们知道图像处理是对图像进行加工,从而满足人类的心理、视觉或应用需求的一种行为。
而很多图像由于生成时更方面的干扰,使得图像并不如人们所期望的那样清晰和便于分析,这就需要对图像进行后期的处理,如去噪,增加亮度或比照度,减小亮度或比照度,以到达更符合人们需求的图像。
而Matlab四个实验的学习则有效地实现了部分功能。
初学matlab,知道了它是一种基于矩阵数值计算的软件,实际操作中应该充分认识到这一点。
对图像进行处理的时候,还有多方面的因素要考虑,像图像用imread读取的时候,图像的保存路径是否正确,读取的图像是不是bmp格式的,处理后的像素值是不是在0~255之间等,期间犯了很多错误,也改了很多错误,虽然课时不长,但确实学到了很多。
从四个小实验及课堂的学习也可以想象得到图像数字处理的大应用。
在航空航天技术、生物医学工程、通信工程、军事、文化艺术和电子商务方面大有可为,初学的我们,所了解的只是九牛一毛。
希望今后能再进行深入的学习,通过学习到达更深入的目的。