北航数字图象处理实验报告文档格式.docx
《北航数字图象处理实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《北航数字图象处理实验报告文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
end
Q=sort(G);
fori=1:
size(Q,2)
if(i<
size(Q,2)*&
&
i+1>
=size(Q,2)*
t=Q(i);
G(abs(G)<
t)=0;
forn=0:
form=1:
W(n+1,m)=G(n*size(P,2)+m);
f2=ifft2(W);
f3=uint8(f2);
axes;
imshow(f3)
imshow(J)
psnr1=psnr(J,f3);
set,'
string'
psnr1);
2.DCT的源程序及结果
P=dct2(J);
f2=idct2(W);
3.哈达玛变换的源程序及结果
'
J=rgb2gray(J);
P=hadamard(512)*(im2double(J))*hadamard(512);
f2=inv(hadamard(512))*W*inv(hadamard(512));
mm1=max(max(f2));
mn1=min(min(f2));
f2=255+255/(mm1-mn1)*(f2-mm1);
3
实验三图像复原实验
利用反向滤波和维纳滤波进行降质图像复原,比较不同参数选择对复原结果的影响。
(1)利用反向滤波方法进行图像复原;
(2)利用维纳滤波方法进行图像复原。
(1)输入图像采用实验1所获取的图像,对输入图像采用运动降质模型,如下式所示
与降值图像相关的参数是:
;
(2)对每一种方法通过计算复原出来的图像的峰值信噪比,进行最优参数的选择,包括反向滤波方法中进行复原的区域半径、维纳方法中的噪声对信号的频谱密度比值K;
(3)将降质图像和利用最优参数恢复后的图像同时显示出来,以便比较。
1.运动降质的源代码及结果
I=imread('
%I=rgb2gray(I);
F=fft2(I);
F=fftshift(F);
form=-((size(F,1)+1)/2):
(size(F,1)+1)/2
forn=-size(F,2)/2:
size(F,2)/2
H(m+((size(F,1)+1)/2)+1,n+size(F,2)/2+1)=5*sin(pi*(m+n))*exp(-sqrt(-1)*pi*(m+n))/(pi*(m+n));
form=1:
size(F,1)
forn=1:
size(F,2)
if(isnan(real(H(m,n))))
G(m,n)=F(m,n);
H(m,n)=1;
else
G(m,n)=F(m,n)*H(m,n);
g=ifft2(G);
t1=abs(g);
mm=max(max(t1));
mn=min(min(t1));
t1=255+255/(mm-mn)*(t1-mm);
t=uint8(t1);
imshow(t)
2.逆滤波的源代码及结果
H(m+((size(F,1)+1)/2)+1,n+size(F,2)/2+1)=5*sin(pi*(m+n))*exp(-sqrt(-1)*pi*(m+n))/(pi*(m+n));
if(m^2+n^2<
200000)
F1(m,n)=G(m,n)/H(m,n);
else
F1(m,n)=G(m,n);
f1=ifft2(F1);
f2=abs(f1);
mm=max(max(f2));
mn=min(min(f2));
f2=255+255/(mm-mn)*(f2-mm);
f2=uint8(f2);
psnr1=psnr(f2,I);
imshow(f2)
3.维纳滤波的源代码及结果
ff2(i,j)=G(i,j)/H(i,j)*(abs(H(i,j))^2)/(abs(H(i,j))^2+10^-38);
f3=ifft2(ff2);
f4=abs(f3);
mm1=max(max(f4));
mn1=min(min(f4));
f4=255+255/(mm1-mn1)*(f4-mm1);
f4=uint8(f4);
psnr2=psnr(f4,I);
psnr2);
imshow(f4)
实验四图像分割处理实验
(1)了解图像分割的基本原理,并利用图像分割算法进行图像分割处理;
(2)掌握数学形态学的基本运算。
(1)利用类间方差阈值算法实现图像的分割处理;
(2)利用形态学处理进行处理结果修正。
(1)实验用图如图所示;
图原始图像
(2)对输入图像进行平滑处理,以减小噪声对分割处理的影响;
(3)利用类间方差阈值算法对滤波处理后图像进行分割处理,获取分割图像;
(4)利用数学形态学中的腐蚀和膨胀运算处理,剔除分割处理结果中的一些细小的残余误分割点,在进行腐蚀和膨胀运算时可采用半径为r的圆形结构元素,注意比较选取不同r值时的处理结果。
实验源代码及结果
tu2=imread('
图像'
tu2=rgb2gray(tu2);
max2=0;
min2=255;
[m,n]=size(tu2);
axes;
imshow(tu2);
tu3=zeros(m,n);
%-----------平滑处理---------------
fork=2:
m-1
fors=2:
n-1
max4=max(tu2(k-1,s),tu2(k,s-1));
max5=max(tu2(k+1,s),tu2(k,s+1));
min4=min(tu2(k-1,s),tu2(k,s-1));
min5=min(tu2(k+1,s),tu2(k,s+1));
tu2(k,s)=(max(max4,max5)+min(min4,min5))/2;
imshow(tu2);
%-----------平滑处理中点滤波---------------
fork=1:
m
max1=max(tu2(k,:
));
if(max1==255)max2=max1;
break;
if(max2<
max1)max2=max1;
end%找出最大灰度值max2
n
min1=min(tu2(k,:
if(min1==0)min2=min1;
elseif(min2>
min1)min2=min1;
end%找出最小灰度值min2
max2=double(max2);
min2=double(min2);
%数据类型转换!
!
ni=zeros(1,max2-min2+1);
fors=1:
temp=double(tu2(k,s))-min2+1;
ni(1,temp)=ni(1,temp)+1;
end%统计各灰度值出现次数
%---------------------------找阈值----------------------
w0=0;
ut=0;
u0=0;
max3=0;
sum=m*n;
fort=0:
size(ni,2)-1
ut=ut+t*ni(t+1)/sum;
size(ni,2)-1
w0=w0+ni(t+1)/sum;
w1=1-w0;
u0=u0+t*ni(t+1)/sum;
u1=(ut-w0*u0)/w1;
temp=w0*w1*(u1-u0)*(u1-u0);
if(max3<
temp)
max3=temp;
tmax=t;
if(tu2(k,s)>
=tmax)
tu3(k,s)=255;
imshow(tu3);
%-----------------------类间方差阈值分割--------------
%-----------------------腐蚀和膨胀-------------------
se=strel('
disk'
2);
tu4=imerode(tu3,se);
imshow(tu4);
tu4=imdilate(tu4,se);
实验五用Hough变换进行曲线的参数提取
(1)了解边缘检测算子的原理,并利用边缘算子对图像进行检测;
(2)掌握Hough变换的基本原理。
(1)分别将原始图像及加高斯噪声、椒盐噪声后的图像中圆形边缘检测出来;
(2)用Hough变换对边缘进行参数提取。
(1)实验用图像文件:
原始图像()、加高斯噪声后图像()和加椒盐噪声后图像();
图原始图像
(2)在含有噪声的背景下,先对图像中值滤波,再进行边缘检测;
(3)将目标的边界提取出来。
边缘检测算子可利用matlab自带函数实现,使用Robert、Sobel和Laplacian算子;
(4)利用Hough变换提取的参数绘制曲线,并叠加在噪声图像上。
4.实验要点
(1)利用算子进行边缘检测:
可先将加噪以后的图像进行平滑滤波,如采用9*9的掩膜模板进行中值滤波;
为了对图像中图形边缘进行线性提取,可通过设置阈值将图像变为二值图像,再利用三种不同的算子(Robert、Sobel和Laplacian)来完成边缘的检测;
(2)Hough变换进行曲线参数提取:
在使用三种算子对加噪后图像进行边缘检测以后,使用Hough变换对检测后图像进行参数提取,并在提取成功以后,使用提取获得的参数进行图像的重建,最后将重建图像叠加到加噪图像中。
注意在进行Hough变换时,对比观察获得图像与使用算子进行边缘检测获得图像之间的区别。
5.实验结果
1.原图
利用Robert算子进行边缘检测
I=rgb2gray(I);
BW=edge(I,'
roberts'
imshow(BW)
利用Sobel算子进行边缘检测
sobel'
利用Laplacian算子进行边缘检测
log'
Hough变换
r_max=100;
r_min=40;
step_r=1;
step_angle=pi/20;
p=;
[m,n]=size(BW);
size_r=round((r_max-r_min)/step_r)+1;
size_angle=round(2*pi/step_angle);
hough_space=zeros(m,n,size_r);
[rows,cols]=find(BW);
ecount=size(rows);
%Hough变换
%将图像空间(x,y)对应到参数空间(a,b,r)
%a=x-r*cos(angle)
%b=y-r*sin(angle)
ecount
forr=1:
size_r
size_angle
a=round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));
b=round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));
if(a>
0&
a<
=m&
b>
b<
=n)
hough_space(a,b,r)=hough_space(a,b,r)+1;
%搜索超过阈值的聚集点
max_para=max(max(max(hough_space)));
index=find(hough_space>
=max_para*p);
length=size(index);
hough_circle=false(m,n);
length
par3=floor(index(k)/(m*n))+1;
par2=floor((index(k)-(par3-1)*(m*n))/m)+1;
par1=index(k)-(par3-1)*(m*n)-(par2-1)*m;
if((rows(i)-par1)^2+(cols(i)-par2)^2<
(r_min+(par3-1)*step_r)^2+5&
...
(rows(i)-par1)^2+(cols(i)-par2)^2>
(r_min+(par3-1)*step_r)^2-5)
hough_circle(rows(i),cols(i))=true;
%打印检测结果
fork=1:
par3=r_min+(par3-1)*step_r;
fprintf(1,'
Center%d%dradius%d\n'
par1,par2,par3);
para(:
k)=[par1,par2,par3];
imshow(I),holdon
viscircles([par2par1],par3);
2.加高斯噪声源代码及结果
I=imnoise(I,'
gaussian'
imshow(I)
imwrite(I,'
3.加椒盐噪声源代码及结果
salt&
pepper'
)