资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数字图像处理与模式识别作业姓名: 学号:专业:控制科学与工程学院:自动化学院作业一用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灰度直方图统计:总结:为了达到大的压缩率,提出了一种方法就是将
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号