资源描述
2015年在职研究生 专业期末考试试题(开卷)
姓名: 学号:
一、 自己拍摄的图像完成以下作业(用Matlab语言完成)
1、 打开一个BMP文件
2、 将其局部区域的灰度值进行改变
3、 另存为一个新的BMP文件
原图像:
zuoye1=imread('Hist1.bmp');
[m,n]=size(zuoye1);
f=zuoye1(50:200,500:1000);
zuoye2=imadjust(f,[0.5 0.75],[0 1],5);
zuoye=zuoye1;
zuoye(50:200,500:1000)=zuoye2;
imshow(zuoye1);
figure,imshow(zuoye)
新图像:
4、 Matlab编程实现图像傅立叶高通、低通滤波,给出算法原理及实验结果。
高通滤波:
I= imread('Hist1.bmp');
F=rgb2gray(I);
figure,imshow(I);
title('原图像');
F=fftshift(fft2(I));
[f,h]=size(F);
f0=round(f/2);
h0=round(h/2);
d=10;
p=0.2;q=0.5;
for i=1:f
for j=1:h
distance=sqrt((i- f0)^2+(j- h0)^2);
if distance<=d H=0;
else H=1;
end;
F(i,j)=(p+q*H)*F(i,j);
end;
end;
F=uint8(real(ifft2(ifftshift(F))));
figure(2);
imshow(F);title('高通滤波所得图像');
低通滤波:
I=imread('Hist1.bmp');
F=rgb2gray(I);
figure,imshow(I);
title('原图像');
F=fftshift(fft2(I));
[f,h]=size(F);
f0=round(f/2);
h0=round(h/2);
d=10;
for i=1:f
for j=1:h
distance=sqrt((i- f0)^2+(j- h0)^2);
if distance<=d H=1;
else H=0;
end;
F(i,j)=H*F(i,j);
end;
end;
F=uint8(real(ifft2(ifftshift(F))));
figure(2);
imshow(F);
title('低通滤波所得图像');
5、 找一幅曝光不足的灰度或彩色图像,用Matlab按照直方图均衡化的方法进行处理。
HD=imread('DCL.BMP');
imshow(HD)
title('输入的彩色BMP图像')
imwrite(rgb2gray(HD),'HDTX.bmp');
HD=rgb2gray(HD);
figure,imshow(HD)
title('灰度化后的图像')
[m,n]=size(HD);
GP=zeros(1,256);
for k=0:255
GP(k+1)=length(find(HD==k))/(m*n);
end
figure,bar(0:255,GP,'g')
title('原图像直方图')
xlabel('灰度值')
ylabel('出现概率')
S1=zeros(1,256);
for i=1:256
for j=1:i
S1(i)=GP(j)+S1(i);
end
end
S2=round(S1*256);
for i=1:256
GPeq(i)=sum(GP(find(S2==i)));
end
figure,bar(0:255,GPeq,'b')
title('均衡化后的直方图')
xlabel('灰度值')
ylabel('出现概率')
figure,plot(0:255,S2,'r')
legend('灰度变化曲线')
xlabel('原图像灰度级')
ylabel('均衡化后灰度级')
PA=HD;
for i=0:255
PA(find(HD==i))=S2(i+1);
end
figure,imshow(PA)
title('均衡化后图像')
imwrite(PA,'JHCLTX.bmp');
6、 用Matlab打开一幅图像,添加椒盐、高斯噪声,然后使用邻域平均法、中值滤波法进行平滑。
原图像:
添加椒盐噪声:
①邻域平均法处理
I0=imread('Hist2.bmp');
I=rgb2gray(I0);
J=imnoise(I,'salt & pepper',0.02);
figure,imshow(J);
title('添加椒盐噪声后图像');
K1=filter2(fspecial('average',7),J);
K2=filter2(fspecial('average',9),J);
figure,imshow(uint8(K1));
title('邻域平均法处理后图像');
②中值滤波法处理
I0=imread('Hist2.bmp');
I=rgb2gray(I0)
J=imnoise(I,'salt & pepper',0.02);
figure,imshow(J);
title('添加椒盐噪声后图像');
K=medfilt2(J,[7 7]);
figure,imshow(K);
title('中值滤波法处理后图像');
添加高斯噪声:
①邻域平均法处理
I0=imread('Hist2.bmp');
I=rgb2gray(I0);
J=imnoise(I,'gaussian',0,0.02)
figure,imshow(J);
title('添加高斯噪声后图像');
K=filter2(fspecial('average',7),J);
figure,imshow(uint8(K));
title('邻域平均法处理后图像');
②中值滤波法处理
I0=imread('Hist2.bmp');
I=rgb2gray(I0)
J=imnoise(I,'gaussian',0.02);
figure,imshow(J);
title('添加高斯噪声后图像');
K=medfilt2(J,[7 7]);
figure,imshow(K);
title('中值滤波法处理后图像');
7、 用Matlab打开一幅图像,利用Roberts梯度法、Sobel算子和拉普拉斯算子进行锐化,并比较结果
①Roberts梯度法
I=imread('Hist2.bmp');
[H,W]=size(I) ;
M=double(I) ;
J=M;
for i=1:H-1
for j=1:W-1
J(i,j)=abs(M(i,j)-M(i+1,j+1))+abs(M(i+1,j)-M(i,j+1)) ;
end;
end;
figure;imshow(I) ;title('原图') ;
figure;imshow(uint8(J)) ;title('Roberts处理后') ;
②Sobel算子
I=imread('Hist2.bmp');
[H,W]=size(I);
M=double(I);
J=M;
for i=2:H-1
for j=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;
figure;imshow(I);title('原图');
figure;imshow(uint8(J));title('Sobel 处理后');
③拉普拉斯算子
I=imread('Hist2.bmp');
[H,W]=size(I);
M=double(I);
J=M;
for i=2:H-1
for j=2:W-1
J(i,j)=4*M(i,j)-[M(i+1,j)+M(i-1,j)+M(i,j+1)+M(i,j-1)];
end;
end;
figure;imshow(I);title('原图');
figure;imshow(uint8(J));title('锐化处理后的图');
由实验效果对比可以看出Sobel算子处理图像后使边缘有一定的模糊。拉普拉斯算子对图像中孤立点及线端的检测效果好,但边缘方向信息丢失,对噪声敏感,整体检测效果不如Roberts梯度算子。
二、 用正弦图像场产生待测试的干涉场图像加入各类模拟噪声,进行模糊处理再消除噪声,然后采用边缘检测、图像增强技术要求判读条纹的间距,请给出图像处理的方案并说明每一步的作用及其对其它处理步骤可能产生的影响。
待处理图像:
处理方案:
①进行模糊处理,消除噪声
②边缘检测,进行图像增强处理
③二值化图像,再进行边缘检测,能够得到很清晰的边界
④采用横向标号法,根据值为1像素在标号中的相邻位置可以确定间距
I=imread('GSTW.bmp');
I=rgb2gray(I);
figure,imshow(I);
title('灰度化图像');
I1=medfilt2(I);
figure,imshow(I1);
title('中值滤波后图像') ;
[m,n]=size(I1);
for i=1:m
for j=1:n
if(I1(i,j)<100)
I1(i,j)=255;
else
I1(i,j)=0;
end
end
end
figure,imshow(I1);
title('二值化后图像') ;
Y1=zeros(1,25);
Y2=Y1;
c=Y2;
i=100;
for j=1:272
if (I1(i,j)==255&&I1(i,j+1)==0)
Y1=j+1;
end
if (I1(i,j)==0&&I1(i,j+1)==255)
Y2=j;
end
end
for i=1:25
c=Y2(i)-Y1(i)
end
c
灰度化后图像: 中值滤波后图像:
二值化后图像:
处理结果:c=9
三、现有8个待编码的符号m0,……,m7,它们的概率分别为0.11,0.02,0.08,0.04,0.39,0.05,0.06,0.25,利用哈夫曼编码求出这一组符号的编码并画出哈夫曼树。
m0=0.11,m1=0.02,m2=0.08,m3=0.04,m4=0.39,m5=0.05,m6=0.06,m7=0.25;
1 m4 0.39 1 1
01 m7 0.25 1 0.61 0
0001 m0 0.11 1 0.22 0 0.36 0
0010 m2 0.08 0 0.14 1
00110 m3 0.04 0 0.06 1
00111 m1 0.02 1
00000 m6 0.06 0 0.11 0
00001 m5 0.05 1
四、(1)编写Matlab函数计算灰度图像的均方误差(MSE)、信噪比(SNR)、峰值信噪比(PSNR)、平均绝对误差(MAE);
(2)编写函数对灰度图像经行降采样,直接消除像素以及消除像素前进行简单平滑滤波;
(3)编写函数对图像进行放大,分别使用像素直接复制和双线性插值的方法:(4)编写函数用题目给出的量化步骤Q去量化灰度图像,并给出相应的MSE和直方图;
(5)编写函数对灰度图像执行直方图均衡化,显示均衡前后的直方图。
(1)计算灰度图像的均方误差、信噪比、峰值信噪比、平均绝对误差
I=imread('Hist2.bmp');
figure(1),imshow(I);
title('原图像') ;
A=rgb2gray(I);
[m n]=size(A);
B=imnoise(A,'gaussian',0,0.05);
figure(2),imshow(B);
title('高斯噪声污染后图像') ;
a=double(A);
b=double(B);
sum=0;
for i=1:m
for j=1:n
sum=sum+(a(i,j)-b(i,j))^2;
end
end
MSE=(sum/(m*n))
PSNR=10*log10((255^2)/MSE)
sum1=0;
for i=1:m
for j=1:n
sum1=sum1+a(i,j)^2;
end
end
SNR=10*log10(sum1/MSE)
sum2=0;
for i=1:m
for j=1:n
sum2=sum2+a(i,j)+b(i,j);
end
end
MAE=sum2/(m*n)
原图像:
该灰度图像的均方误差(MSE):MSE =2.5087e+003
信噪比(SNR): SNR =64.5054
峰值信噪比(PSNR): PSNR =14.1363
平均绝对误差(MAE): MAE =314.6968
(2)直接消除像素点
X=imread('Hist2.bmp');
I=rgb2gray(X);
subplot(3,2,1);
imshow(X);
title('原图');
subplot(3,2,2);
imshow(I); title('灰度图');
subplot(3,2,3); I1=I(1:2:end,1:2:end);
imshow(I1); title('2:1 图');
subplot(3,2,4); I2=I(1:4:end,1:4:end);
imshow(I2); title('4:1 图');
subplot(3,2,5); I3=I(1:8:end,1:8:end);
imshow(I3); title('8:1 图');
subplot(3,2,6); I4=I(1:16:end,1:16:end);
imshow(I4); title('16:1图');
先滤波再消除像素点
X=imread('Hist2.bmp');
I=rgb2gray(X);
subplot(3,2,1); imshow(I);title('灰度图');
w=[1 1 1;1 1 1;1 1 1]/9;
g=imfilter(I,w,'corr','replicate');
subplot(3,2,2); imshow(g); title('滤波后的图');
subplot(3,2,3); I1=g(1:2:end,1:2:end);
imshow(I1); title('2:1 图');
subplot(3,2,4); I2=g(1:4:end,1:4:end);
imshow(I2); title('4:1 图');
subplot(3,2,5); I3=g(1:8:end,1:8:end);
imshow(I3); title('8:1 图');
subplot(3,2,6); I4=g(1:16:end,1:16:end);
imshow(I4); title('16:1 图');
(3) 像素直接复制法
X=imread('Hist2.bmp');
I=rgb2gray(X);
S=I(1:2:end, 1:2:end);
subplot(1,3,1); imshow(I); title('灰度图像');
subplot(1,3,2); imshow(S); title('按2:1缩小的图像');
F=imresize(I,2,'nearest');
subplot(1,3,3); imshow(F); title('按1:2放大的图像');
双线性插值法
A= imread('Hist2.bmp');
I=rgb2gray(A);
S=I(1:2:end, 1:2:end);
subplot(1,3,1); imshow(I); title('原图像');
subplot(1,3,2); imshow(S); title('按2:1缩小的图像');
F=imresize(I,2,'bilinear');
subplot(1,3,3); imshow(F); title('按1:2放大的图像');
(4)设Q=2
A= imread('Hist2.bmp');
I=rgb2gray(A);
L=histeq(I,2);
subplot(2,2,1); imshow(I); title('灰度图像');
subplot(2,2,2); imhist(I); title('原始图像直方图');
subplot(2,2,3); imshow(L); title('量化后图像');
subplot(2,2,4); imhist(L); title('量化后图像直方图');
[m,n]=size(I);
a=double(I);
b=double(L);
sum=0;
for i=1:m
for j=1:n
sum=sum+(a(i,j)-b(i,j))^2;
end
end
MSE=sum/(m*n)
MSE =7.2045e+003
(5)直方图均衡化
A=imread('Hist2.bmp');
I=rgb2gray(A);
J=histeq(I);
subplot(2,2,1);imshow(I); title('灰度图像')
subplot(2,2,2);imshow(J); title('增强对比度后的图像')
subplot(2,2,3);imhist(I,64); title('原始直方图')
subplot(2,2,4);imhist(J,64) ;title('增强对比度后的直方图')
展开阅读全文