编程处理图像.doc_第1页
编程处理图像.doc_第2页
编程处理图像.doc_第3页
编程处理图像.doc_第4页
编程处理图像.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字图像处理与模式识别作业练习题一在图像中生成一个矩形,然后用模板匹配法找出矩形位置。使用SSDA或改进的SSDA法。Matlab源程序:%模板匹配法算法函数%生成一个矩形,并用ssda算法找出矩形所在的位置,程序输出的是匹配处的第一个点的坐标。img = zeros(30);img(8:13,3:6) = 1;mask = 1 1 1 1;1 1 1 1;1 1 1 1;1 1 1 1;1 1 1 1;1 1 1 1;maskH, maskW = size(mask);imgH, imgW = size(img);energyMask = 0;for n=1:maskHfor m=1:maskW energyMask = energyMask + mask(n,m)*mask(n,m);endendif(energyMask = 0) energyMask = 1;endenergyMask= sqrt(energyMask);R = zeros(imgH, imgW); for y=1:(imgH-maskH) for x = 1:(imgW-maskW) % whether position (y,x) is OK? relateVal = 0; energySubImage = 0; for n=1:maskH for m=1:maskW % S - y+n-1 relateVal = relateVal+ img(y+n-1,x+m-1)*mask(n,m); energySubImage = energySubImage + img(y+n-1,x+m-1)*img(y+n-1,x+m-1); end end energySubImage= sqrt(energySubImage); if(energySubImage = 0) energySubImage = 1; end R(y,x) = relateVal/(energySubImage*energyMask); aaa = R(y,x); if(R(y,x)=1) %y,x为匹配点的起始坐标; y x end endend 程序运行结果:y =8;x =3总结:通过相关函数的计算来找到它及被搜索的图的坐标位置。由于模板要在 个参数位置上作相关计算,其中除一点以外都是在非匹配点上作“无用”工作,因此人们自然希望有一种快速有效算法,当一旦发现模板所在参数位置为非匹配点就丢弃不再算下去,立即换到一个新的参数点作计算,这样就能加快求匹配过程,就是序贯相似性检测算法。简称SSDA。练习题二用C语言或者VC,VB,Matlab或其他语言完成如下实验:1)打开一个BMP文件2)将其局部区域的灰度值进行改变3)另存为一个新的BMP文件要求显示出原BMP图像和新BMP图像。总结:读入一幅图像,首先如果是rgb图像,要转化为灰度图像。灰度图像有256个灰度等级。改变对应的数值,可以改变局部区域的灰度值。以下程序中实现了将一矩形区域全部变为白色。Matlab源程序:clear all;f=imread(image1.bmp);f1=rgb2gray(f); %转换为灰度图figure(1);imshow(f1);imwrite(f1,image1_gray.bmp);f1(100:150,100:120)=256; %局部改变灰度值figure(2);imshow(f1);imwrite(f1,image1_gray_1.bmp);size(f1)whos f1原始灰度图像: 局部改变灰度值的图像:练习题三1编程实现图像傅立叶高通、低通滤波。2尝试傅立叶压缩。1低通滤波MATLAB源程序:clear all;I=imread(image1_gray.bmp);figure(1);imshow(I);I=double(I);f=fft2(I); g=fftshift(f); M,N=size(g);n1=floor(M/2);n2=floor(N/2);d0=30;for i=1:M for j=1:N d=sqrt(i-n1)2+(j-n2)2); if d=d0 h1=1; else h1=0; endg1(i,j)=(h1+0.5)*g(i,j);endendg2=ifftshift(g1);g3=uint8(real(ifft2(g2); figure(2);imshow(g3);title(高通滤波结果)高通滤波结果:总结:图像低通滤波使图像变的模糊,平滑。高通滤波能突出图像的边缘,是图像清晰。练习题四1打开一幅图像,添加椒盐、高斯噪声,然后使用邻域平均法、中值滤波法、K邻近平均法进行平滑。1)首先加入椒盐噪声, 然后对其处理。源程序:clear all;f=imread(image1.bmp);I=rgb2gray(f); %转为灰度图像figure(1);imshow(I);title(原始图像)imwrite(I,image1_gray.bmp);P2=imnoise(I,salt & pepper,0.02) %加入椒盐躁声figure(2);imshow(P2);title(加入椒盐躁声)h1=medfilt2(P2) ; %对椒盐躁声中值滤波figure(3);imshow(h1);title(对椒盐躁声中值滤波后) %邻域平均法 w1=fspecial(average); %产生一个3x3大小的方形平均滤波模板w1h2=imfilter(P2,w1,replicate); % g1为处理后的图像。replicate指卷积填充边缘时用复制边界的值来扩展。 figure(4);imshow(h2);title(邻域平均法平滑)加入椒盐噪声后的图像:对椒盐噪声中值滤波后的图像:对椒盐噪声采用邻域法平滑后的图像:对椒盐噪声采用K邻域法平滑后的图像:2)加入高斯噪声后对图像滤波处理源程序:P2=imnoise(I,gaussian,0.02) %加入高斯躁声其他与加入椒盐噪声的处理程序相同。加入高斯噪声后的图像:对高斯噪声中值滤波平滑后的图像:对高斯噪声邻域均平均法平滑后的图像:对高斯噪声K邻近均平均法平滑后的图像:实验结果分析:对于椒盐噪声,采用中值滤波的方法对图像平滑效果较好,对于高斯噪声,采用邻域平均法对图像平滑的效果较好。2打开一幅图像,利用Roberts梯度法、Sobel算子和拉普拉斯算子进行锐化,并比较结果。源程序:clear all;%Roberts梯度法I,map=imread(image1_gray.bmp);imshow(I,map);title(原始图像)I=double(I);Gx,Gy=gradient(I); % 计算梯度G=sqrt(Gx.*Gx+Gy.*Gy); % 注意是矩阵点乘J1=G;figure(2),imshow(J1,map); title(Roberts梯度法进行锐化)%拉普拉斯算子进行锐化I=double(I);h=0 -1 0;-1 4 -1 ;0 -1 0;J=conv2(I,h,same);K=J;figure(3),imshow(K,); title(拉普拉斯算子进行锐化) %Sobel算子锐化I=double(I);h1=-1 0 1 ;-2 0 2;-1 0 1;J1=conv2(I,h1,same);K1=J1;figure(4),imshow(K1); title(Sobel算子锐化) 利用Roberts梯度法锐化后的图像:利用Sobel算子锐化后的图像:利用拉普拉斯算子锐化后的图像:练习题五编写一个程序,对输入的图像进行哈夫曼编码,显示原图像的熵、编码后的平均码字长度、并能够根据编码重建出图像。Matlab源程序:clear all;clc;I=imread(image1_gray_1.bmp);x=isrgb(I);if x=1 I=rgb2gray(I);elseendi=double(I);m,n=size(I);len=m*n;for p=1:256; j=find(i=p-1); u(p)=length(j);endstem(u);r=find(u0);k=length(r);F(1,:)=r-1;v=u(r);A=v/sum(v);F(2,:)=A;B=F;B=sortrows(B,2);B=B;B=fliplr(B);A=B(2,:);avlen,END,H,P,L=huffenco(A);B=sym(B);B(3,:)=END;q=double(1/(sum(L.*(sum(v)*B(2,:)/len/8);function avlen,END,H,P,L=huffenco(A)A=fliplr(sort(A);%按降序排列T=A;m,n=size(A);B=zeros(n,n-1);%空的编码表(矩阵)for i=1:n B(i,1)=T(i);%生成编码表的第一列endr=B(i,1)+B(i-1,1);%最后两个元素相加T(n-1)=r;T(n)=0;T=fliplr(sort(T);t=n-1;for j=2:n-1%生成编码表的其他各列 for i=1:t B(i,j)=T(i); end K=find(T=r); B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在%该列的位置 r=(B(t-1,j)+B(t,j);%最后两个元素相加 T(t-1)=r; T(t)=0; T=fliplr(sort(T); t=t-1;endB;%输出编码表END=sym(0,1);%给最后一列的元素编码t=2;for j=n-2:-1:1%从倒数第二列开始依次对各列元素编码 y=B(n,j+1); if y=n-j temp=END(y); for i=y:(n-j)-1 END(i)=END(i+1); end END(i+1)=temp; end temp1=END(t); END(t)=char(temp1),0; END(t+1)=char(temp1),1; t=t+1;endENDfor i=1:n a,b=size(char(END(i); L(i)=b;endLavlen=sum(L.*A)%平均码长 H1=log2(A);H=-A*(H1)%熵P=H/avlen%编码效率程序运行结果:平均码字长度:avlen =6.1022熵:H =7.3328编码效率:P =1.2017灰度直方图统计:总结:为了达到大的压缩率,提出了一种方法就是将在图像中出现频度大的像素值,给一个比较短的编码,将出现频度小的像数值,给一个比较长的编码。先将输入灰度

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论