图像处理电子科大作业.docx
- 文档编号:12705395
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:36
- 大小:1.75MB
图像处理电子科大作业.docx
《图像处理电子科大作业.docx》由会员分享,可在线阅读,更多相关《图像处理电子科大作业.docx(36页珍藏版)》请在冰豆网上搜索。
图像处理电子科大作业
第一次作业
3.5(a)如果将低阶比特面设为零值,该图像会丢失细节。
即不同灰度值的像素个数将减少,这会导致直方图的成分数减少。
由于像素个数不会改变,这将在总体上导致直方图峰值高度上升。
通常,较低的灰度值变化将减少对比度。
(b)如果将高阶比特面设为零值,该图像会丢失轮廓,即丢失视觉上的很多数据。
最明显的影响是使图像非常模糊,根据灰度变换函数,将0~127之间的所有灰度映射为0,下降的最高位将限制到127的8位图像中最亮的水平。
由于像素
数将保持不变,一些直方图峰值的高度会增加。
一般直方图的形状将更高更窄,过去127没有直方图组件。
3.18(a)如果这个象素块中的点都比背景亮,即对度大于背景,在n×n的中值滤波器中,和背景的象素一起排序时,因为它的面积小于一半,则可以肯定它们都比排在第(n×n+1)/2的象素要亮,所以没有机会被选中,都会被滤掉.对于暗的象素块,情况类似.
(b)如果两个象素块足够接近,而且又同时都大于或者都小于背景的灰度,那么在进行中值滤波的时候,这些象素块中的点将会有机会被选为中值.在这种情况下,这些象素块将无法被滤掉,也就是不再被认为是单独的.我们假设象素块是正方形的,大小为n×n一半.它们的边长为sqrt
(2)/2*n,离滤波器的最大边界距离[1-sqrt
(2)/2]*n,所以这些块单独存在的条件是它们之间的距离大于[1-sqrt
(2)/2]*n.
3.21滤波后的图像是否存在清晰的间隔取决于象素间是否有明显的灰度差异.如下图所示,分别代表了三个尺度的滤波器的情况.其中每个尺度滤波器的上下两个方框表示了计算相邻象素点的灰度时所用到的邻域.b中的滤波器所产生的图像之所以完全混在了一起,是因为它的滤波器的尺度恰好是原图像周期的整数倍.这意位着当所计算的象素向右边移动时,计算所涉及到的邻域把最左边的一列象素去掉了,而右边加入了一列新的象素.因为邻域的大小为周期的整数倍,所以左边所去掉的象素灰度值和右边所加入的灰度值是相等的,所以邻域内的灰度平均值没有变化,计算所得的灰度值也没有变化,整个部分混在了一起.而对于a和c来说,当所计算的象素向右移动时,邻域的最左边去掉了一行黑色的象素,右边加入了一行白色的象素,因此在这个时候,邻域内象素的平均值增大,计算所得的象素点变亮.从而产生了间隔的区域.
课后编程:
1绘制出一幅2M×2N的灰度图像直方图;对该图像进行均衡化处理,
绘制出均衡后图像的直方图;对该图像进行灰度变换,使变换后的图像
大致具有如下图所示的归一化直方图,并绘制出变换后实际的直方图:
代码:
%直方图均衡化
I=imread('C:
\girl.jpg');
[height,width]=size(I);
figure
subplot(221)
imshow(I)%显示原始图像
subplot(222)
imhist(I)%显示原始图像直方图
%进行像素灰度统计;
NumPixel=zeros(1,256);%统计各灰度数目,共256个灰度级
fori=1:
height
forj=1:
width
NumPixel(I(i,j)+1)=NumPixel(I(i,j)+1)+1;%对应灰度值像素点数量增加一
end
end
%计算灰度分布密度
ProbPixel=zeros(1,256);
fori=1:
256
ProbPixel(i)=NumPixel(i)/(height*width*1.0);
end
%计算累计直方图分布
CumuPixel=zeros(1,256);
fori=1:
256
ifi==1
CumuPixel(i)=ProbPixel(i);
else
CumuPixel(i)=CumuPixel(i-1)+ProbPixel(i);
end
end
%累计分布取整
CumuPixel=uint8(255.*CumuPixel+0.5);
%对灰度值进行映射(均衡化)
fori=1:
height
forj=1:
width
I(i,j)=CumuPixel(I(i,j));
end
end
subplot(223)
imshow(I)%显示原始图像
subplot(224)
imhist(I)%显示原始图像直方图
截图:
2分别在2幅灰度图像中加入一定量的高斯噪声和椒盐噪声,噪声强
度自定。
然后采用3×3的均值滤波器和3×3中值滤波器分别对噪声图像
进行处理,给出两种处理方法的峰值信噪比(PSNR)。
代码:
functionz=PSNR(x,y)%calculatePSNRofimage
[M,N]=size(x);
dx=im2double(x);
dy=im2double(y);
err=dx-dy;
MSE=sum(sum(err.^2))/(M*N);%meansquareerror
z=10*log10(255^2/MSE);
end
clc,clf,clearall;
pic=imread('C:
\image5.jpg');
data=rgb2gray(pic);
P1=imnoise(data,'gaussian',0.02);
P2=imnoise(data,'salt&pepper',0.02);
figure;
subplot(3,1,1);imshow(data);title('原图');
subplot(3,1,2);imshow(P1);title('高斯加噪');
subplot(3,1,3);imshow(P2);title('椒盐加噪');
figure;
k1=medfilt2(data,[33]);
k2=medfilt2(P1,[33]);
k3=medfilt2(P2,[33]);
r1=PSNR(data,k1);
r2=PSNR(data,k2);
r3=PSNR(data,k3);
subplot(3,1,1);imshow(k1);title(['原图中值滤波''psnr:
'num2str(r1)]);
subplot(3,1,2);imshow(k2);title(['高斯加噪中值滤波''psnr:
'num2str(r2)]);
subplot(3,1,3);imshow(k3);title(['椒盐加噪中值滤波''psnr:
'num2str(r3)]);
figure;
d1=filter2(fspecial('average',3),data)/255;
d2=filter2(fspecial('average',3),P1)/255;
d3=filter2(fspecial('average',3),P2)/255;
r1=PSNR(data,d1);
r2=PSNR(data,d2);
r3=PSNR(data,d3);
subplot(3,1,1);imshow(d1);title(['原图均值滤波''psnr:
'num2str(r1)]);
subplot(3,1,2);imshow(d2);title(['高斯加噪均值滤波''psnr:
'num2str(r2)]);
subplot(3,1,3);imshow(d3);title(['椒盐加噪均值滤波''psnr:
'num2str(r3)]);
截图:
clear;
clc;
Data=imread('C:
\Users\Administrator\Desktop\ex.JPG');
DataGray=rgb2gray(Data);
figure
(1),imshow(Data);
title('
原始图像
');
%**************
计算并画出此图像的中心化频率谱
*************
Data1=double(DataGray);
FFT2=fft2(Data1);
FFTcenter=fftshift(FFT2);%
频谱中心化
FFT2abs=abs(FFT2);
FFTresult=256*log2(FFT2abs/max(max(FFT2abs))+1);
figure
(2),subplot(1,2,1);
imshow(FFTresult),title('
原图频谱
');
FFTc_abs=abs(FFTcenter);
FFTc_result=256*log2(FFTc_abs/max(max(FFTc_abs))+1);
subplot(1,2,2);
imshow(FFTc_result),title('
中心化频谱
');
%*******
分别用低通滤波和高通滤波对此图像进行频域处理
****
[m,n]=size(FFTcenter);
x_center=round(m/2);
y_center=round(n/2);
d=10;%
半径取
10
LF=FFTcenter;
HF=FFTcenter;
%**************
低通滤波器
*************
fori=1:
m;
for j=1:
n
distance=sqrt((i-x_center)^2+(j-y_center)^2);
if distance<=d
flag=1;
else
flag=0;
end
LF(i,j)=flag*FFTcenter(i,j);
end
end
%
逆变换转换成对应图像
LF=uint8(real(ifft2(ifftshift(LF))));
figure(3),subplot(1,2,1);imshow(LF);
title('
低通滤波后图像
');
%**************
高通滤波器
*************
fori=1:
m;
for j=1:
n
distance=sqrt((i-x_center)^2+(j-y_center)^2);
if distance>d
flag=1;
else
flag=0;
end
HF(i,j)=flag*FFTcenter(i,j);
end
end
HF=uint8(real(ifft2(ifftshift(HF))));
subplot(1,2,2),imshow(HF);title('
高通滤波后图像
');
%*****************
用拉普拉斯算子对此图像锐化
*************
Laplace=[0
-1
0;-1
4
-1; 0
-1
0 ];
LaplaceImage=conv2(Data1,Laplace,'same');
figure(4),subplot(1,2,1);
imshow(uint8(LaplaceImage));
title('Laplace
图像
');
DataLap=imadd(Data1,immultiply(LaplaceImage,1));%
原图像与拉普拉斯图像叠加
subplot(1,2,2),imshow(uint8(DataLap));
title('
锐化增强后的图像
');
第二次作业
课后编程:
对一幅灰度图像:
(1)计算并画出此图像的中心化频率谱。
(2)分别用高斯低通和高斯高通滤波器对图像进行频域处理。
(3)用频域拉普拉斯算子对此图像进行锐化处理。
代码:
clear;
clc;
Data=imread('C:
\Pdog.JPG');
DataGray=rgb2gray(Data);
figure
(1),imshow(Data);
title('原始图像');
%**************计算并画出此图像的中心化频率谱*************
Data1=double(DataGray);
FFT2=fft2(Data1);
FFTcenter=fftshift(FFT2);%频谱中心化
FFT2abs=abs(FFT2);
FFTresult=256*log2(FFT2abs/max(max(FFT2abs))+1);
figure
(2),subplot(1,2,1);
imshow(FFTresult),title('原图频谱');
FFTc_abs=abs(FFTcenter);
FFTc_result=256*log2(FFTc_abs/max(max(FFTc_abs))+1);
subplot(1,2,2);
imshow(FFTc_result),title('中心化频谱');
%*******分别用低通滤波和高通滤波对此图像进行频域处理****
[m,n]=size(FFTcenter);
x_center=round(m/2);
y_center=round(n/2);
d=10;%半径取
10
LF=FFTcenter;
HF=FFTcenter;
%**************低通滤波器*************
fori=1:
m;
forj=1:
n
distance=sqrt((i-x_center)^2+(j-y_center)^2);
ifdistance<=d
flag=1;
else
flag=0;
end
LF(i,j)=flag*FFTcenter(i,j);
end
end
%逆变换转换成对应图像
LF=uint8(real(ifft2(ifftshift(LF))));
figure(3),subplot(1,2,1);imshow(LF);
title('低通滤波后图像');
%**************高通滤波器*************
fori=1:
m;
forj=1:
n
distance=sqrt((i-x_center)^2+(j-y_center)^2);
ifdistance>d
flag=1;
else
flag=0;
end
HF(i,j)=flag*FFTcenter(i,j);
end
end
HF=uint8(real(ifft2(ifftshift(HF))));
subplot(1,2,2),imshow(HF);title('高通滤波后图像');
%*****************用拉普拉斯算子对此图像锐化*************
Laplace=[0-10;-14-1;0-10];
LaplaceImage=conv2(Data1,Laplace,'same');
figure(4),subplot(1,2,1);
imshow(uint8(LaplaceImage));
title('Laplace图像');
DataLap=imadd(Data1,immultiply(LaplaceImage,1));%原图像与拉普拉斯图像叠加
subplot(1,2,2),imshow(uint8(DataLap));
title('锐化增强后的图像');
截图:
第三次作业
课后MATLAB编程练习
对一幅灰度图像f(x,y):
(1)对f(x,y)加高斯白噪声和椒盐噪声;
(2)分别画出原图和加噪后的图像及其各自对应的直方图;
(3)用几何均值滤波分别对加高斯噪声和椒盐噪声图进行滤波处
理,并进行比较;
(4)用自适应中值滤波分别对加高斯噪声和椒盐噪声图进行滤波
处理;并进行比较。
注:
滤波窗口可根据需要自行设定。
代码:
1.gmean函数(几何均值滤波):
functionf=gmean(g,m,n)
%Implementsageometricmeanfilter.
inclass=class(g);
g=im2double(g);
%Disablelog(0)warning
warningoff;
f=exp(imfilter(log(g),ones(m,n),'replicate')).^(1/m/n);
warningon;
f=changeclass(inclass,f);
2.RAMF函数(自适应中值滤波函数):
functionf=RAMF(img)
[Im,In]=size(img);
nmin=3;
nmax=9;
Imf=img;
I_ex=[zeros((nmax-1)/2,In+(nmax-1));zeros(Im,(nmax-1)/2),img,zeros(Im,(nmax-1)/2);zeros((nmax-1)/2,In+(nmax-1))];
forx=1:
Im
fory=1:
In
forn=nmin:
2:
nmax
%图像Inoise中的某点(x,y)的领域Sxy,对应在I_ex中为(x+[(nmax-1)/2-(n-1)/2]:
x+[(nmax-1)/2-(n-1)/2]+(n-1),y+(nmax-1)/2-(n-1)/2:
y+[(nmax-1)/2-(n-1)/2]+(n-1))
Sxy=I_ex(x+(nmax-1)/2-(n-1)/2:
x+(nmax-1)/2+(n-1)/2,y+(nmax-1)/2-(n-1)/2:
y+(nmax-1)/2+(n-1)/2);
Smax=max(max(Sxy));%求出窗口内像素的最大值
Smin=min(min(Sxy));%求出窗口内像素的最小值
Smed=median(median(Sxy));%求出窗口内像素的中值
%判断中值是否是噪声点
ifSmed>Smin&&Smed %若中值既大于最小值又小于最大值,则不是 %是,则退出该if语句,增大窗口尺寸,再次判断 %不是,则判断该点的原值是不是噪声点 ifImf(x,y)<=Smin||Imf(x,y)>=Smax %若该点的原值既大于最小值又小于最大值,则不是 %不是,则输出原值,即不作处理 %是,则输出中值 Imf(x,y)=Smed; end break %有输出则不再进行循环判断 end end %当n=max时,输出中值 Imf(x,y)=Smed; end end f=Imf 3.其他代码: I=imread('C: \lena.jpg'); figure; subplot(2,3,1); imshow(I),title('原图'); subplot(2,3,4) imhist(I),title('原图直方图')%显示原始图像直方图 %椒盐噪声 J=imnoise(I,'salt&pepper',0.02); subplot(2,3,2); imshow(J),title('椒盐噪声'); subplot(2,3,5) imhist(J),title('椒盐直方图')%显示椒盐图像直方图 %高斯噪声 G=imnoise(I,'gaussian',0.02,0.02); subplot(2,3,3); imshow(G);title('高斯噪声'); subplot(2,3,6) imhist(G),title('高斯直方图')%显示高斯图像直方图 figure I_1=gmean(I,3,3); subplot(3,1,1) imshow(I_1);title('原图几何滤波'); J_1=gmean(J,3,3); subplot(3,1,2) imshow(J_1);title('椒盐几何滤波'); G_1=gmean(G,3,3); subplot(3,1,3) imshow(G_1);title('高斯几何滤波'); figure I_2=RAMF(I); subplot(3,1,1) imshow(I_2);title('原图自适应中值滤波'); J_2=RAMF(J); subplot(3,1,2) imshow(J_2);title('椒盐自适应中值滤波'); G_2=RAMF(G); subplot(3,1,3) imshow(G_2);title('高斯自适应中值滤波'); 截图: 第六章作业 课后MATLAB编程练习 (1)任意选择一幅RGB彩色图像,分别提取R、G、B分量, 并分别显示各分量的灰度图像。 (2)将上述图像转化为HSI模型,分别显示H、S、I分量的 灰度图像。 (3)任意读取一幅8bit红外灰度图像,对其进行伪彩色处 理,结果应突出感兴趣区域。 (1) (2)代码: I=imread('C: \Mountain.jpg'); I=im2double(I); r=I(: : 1); g=I(: : 2); b=I(: : 3); figure (1); subplot(221); imshow(I);title('原始图像'); subplot(222); imshow(r);title('红色分量图像'); subplot(223); imshow(g);title('绿色分量图像'); subplot(224); imshow(b);title('蓝色分量图像'); num=0.5*((r-g)+(r-b)); den=sqrt((r-g).^2+(r-b).*(g-b)); theta=acos(num./(den+eps)); H=theta; H(b>g)=2*pi-H(b>g); H=H/(2*pi); num=min(min(r,g),b); den=r+g+b; den(den==0)=eps; S=1-3.*num./den; H(S==0)=0; I=(r+g+b)/3; %Combineallthreeresultsintoanhsiimage. hsi=cat(3,H,S,I); figure subplot(221); imshow(hsi);title('HSI图像'); subplot(222); imshow(H);title('H分量图像'); subplot(223); imshow(S);title('S分量图像'); subplot(224); im
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 处理 电子科 作业