数字图像处理上机实习报告
本次实习共有四道题目:(1)对图象p02计算其灰度的熵;
(2)对图象p04实施灰度平方变换;
(3)对图象p04施加高斯噪声和椒盐噪声并实施最大均匀性平 滑法(4.2.5节);
(4)根据Sobel算子,按照公式4.3.10和公式4.3.11对图象 p04实施空间锐化;
以下是此次实习的过程:
(1)首先是第一道题,要求计算p02灰度的熵。以下是我编的程序,参考了一下网上的资料 clear;
close all;
I=imread(p02.tif); %读入图像
%I=double(I); %将图像的计算数值转换为double型
[m,n]=size(I); %求图像的规格
Img_size=m*n; %求图像的总像素个数
L=256;
H=0;
nk=zeros(L,1); %创建一个256行一列的0数组用来存放对应的灰度个数
for i=1:m
for Img_level=1:L
for j=1:n
if Img_level==I(i,j)+1; %灰度范围是0~255,所以每次灰度加一
nk(Img_level)=nk(Img_level)+1; %若所读灰度符合则在nk数组对应位置上加一 end
end
end
end
for k=1:L
Ps(k)=nk(k)/Img_size; %求取对应灰度概率
if Ps(k)~=0;
H=-Ps(k)*Ps(k)+H; %概率不为0则按熵的计算公式计算
end
end
H
%entropy(I)
H =
6.3159 %运行后结果
(2)下面是第二道题,对图象p04实施灰度平方变换。此题较简单,关于平方变换公式的问题问过老师后就轻松解决了。
clear;
close all;
I=imread(p04.tif); %读入图像
imshow(I); %显示图像
figure,imhist(I); %另打开一个窗口,并显示灰度直方图
%I=double(I);
[m,n]=size(I);
I2=zeros([m,n]); %创建一个I和一样大的0数组
for i=1:m
for j=1:n
I2(i,j)=I(i,j)*I(i,j)/255; %灰度平方变换公式
end
end
figure,imshow(I2); %另打开一个窗口,显示变换后图像
figure,imhist(I2); %另打开一个窗口,并显示变换后灰度直方图
(3)下面是第三道题,对图象p04施加高斯噪声和椒盐噪声并实施最大均匀性平 滑法(4.2.5节)。该题理论简单,但过程较复杂,同样参考了网上的资料。 clear;
close all;
G=imread(p04.tif);
imshow(G),title(原图);
J= IMNOISE(G, gaussian ,0.01); %施加高斯噪声
figure,imshow(J),title(施加高斯噪声后的图); %显示施加高斯噪声后的图
I= IMNOISE(G, salt & pepper,0.06); %施加椒盐噪声
figure,imshow(I),title(施加椒盐噪声后的图); %显示施加椒盐噪声后的图
m=688;
n=688;
%I=double(I);
for i=1:m
X(i,1)=I(i,1);
X(i,2)=I(i,2);
X(i,3)=I(i,3);
X(i,688)=I(i,688);
X(i,687)=I(i,687);
X(i,686)=I(i,686);
end
%将第一,二,三列和倒数第一,二,三列的灰度值保持不变
for j=1:n
X(1,j)=I(1,j);
X(2,j)=I(2,j);
X(3,j)=I(3,j);
X(688,j)=I(688,j);
X(687,j)=I(687,j);
X(686,j)=I(686,j);
end
%将第一,二,三行和倒数第一,二,三行的灰度值保持不变
for i=3:m-2
for j=3:n-2
F1=[I(i-2,j-2),I(i-2,j-1),I(i-2,j),I(i-1,j-2),I(i-1,j-1),I(i-1,j),I(i,j-2),I(i,j-1),I(i,j)]; F2=[I(i-2,j+1),I(i-2,j+2),I(i-2,j),I(i-1,j+1),I(i-1,j+2),I(i-1,j),I(i,j+1),I(i,j+2),I(i,j)]; F3=[I(i+1,j+1),I(i+1,j-1),I(i+1,j),I(i-1,j+1),I(i-1,j-1),I(i-1,j),I(i,j+1),I(i,j-1),I(i,j)]; F4=[I(i+1,j-2),I(i+1,j-1),I(i+1,j),I(i+2,j-2),I(i+2,j-1),I(i+2,j),I(i,j-2),I(i,j-1),I(i,j)];
F5=[I(i+1,j+1),I(i+1,j+2),I(i+1,j),I(i+2,j+1),I(i+2,j+2),I(i+2,j),I(i,j+1),I(i,j+2),I(i,j)]; %对每个读到的灰度所对应的五块实施最大均匀性平滑所需的方形区域列出 I1=var(F1);
I2=var(F2);
I3=var(F3);
I4=var(F4);
I5=var(F5);
%对五块方形区域求方差
shuzu=[I1,I2,I3,I4,I5];
sort (shuzu); %求方差最小值
switch shuzu( 1)
case I1
T=(I(i-2,j-2)+I(i-2,j-1)+I(i-2,j)+I(i-1,j-2)+I(i-1,j-1)+I(i-1,j)+I(i,j-2)+I(i,j-1)+I(i,j))/9;
case I2
T=(I(i-2,j+1)+I(i-2,j+2)+I(i-2,j)+I(i-1,j+1)+I(i-1,j+2)+I(i-1,j)+I(i,j+1)+I(i,j+2)+I(i,j))/9; case I3
T=(I(i+1,j+1)+I(i+1,j-1)+I(i+1,j)+I(i-1,j+1)+I(i-1,j-1)+I(i-1,j)+I(i,j+1)+I(i,j-1)+I(i,j))/9; case I4
T=(I(i+1,j-2)+I(i+1,j-1)+I(i+1,j)+I(i+2,j-2)+I(i+2,j-1)+I(i+2,j)+I(i,j-2)+I(i,j-1)+I(i,j))/9; case I5
T=(I(i+1,j+1)+I(i+1,j+2)+I(i+1,j)+I(i+2,j+1)+I(i+2,j+2)+I(i+2,j)+I(i,j+1)+I(i,j+2)+I(i,j))/9; end
户籍查询网 X(i,j)=T; %将方差最小值所对应的方形区域的均值赋给当前读到的像素
end
end
Q=im2uint8(X);
figure,imshow(Q),title(最大均匀平滑后的图); %另打开一个窗口,显示变换后图像
(4)下面是第四道题,根据Sobel算子,按照公式4.3.10和公式4.3.11对图象 p04实施空间锐化。此题也很复杂,过程较繁琐。
clear;
close all;
I=imread(p04.tif);
imshow(I);
m=688;
n=688;
A=zeros([m,n]); %创建一个I和一样大的0数组A
B=zeros([m,n]); %创建一个I和一样大的0数组B
T=25;
L1=134;
L2=3;
Y=0;
X=0;
%I=double(I);
for i=1:m
A(i,1)=I(i,1);
A(i,688)=I(i,688);
B(i,1)=I(i,1);
B(i,688)=I(i,688);
end %将A,B第一列和倒数第一列的灰度值保持不变
for j=1:n
A(1,j)=I(1,j);
A(688,j)=I(688,j);
B(1,j)=I(1,j);
B(688,j)=I(688,j);
end %将A,B第一行和倒数第一行的灰度值保持不变
for i=2:m-1
for j=2:n-1
Y=I(i-1,j+1)+I(i+1,j+1)+2*I(i,j+1)-I(i-1,j-1)-2*I(i,j-1)-I(i+1,j-1);
X=I(i+1,j-1)+2*I(i+1,j)+I(i+1,j+1)-I(i-1,j-1)-2*I(i-1,j)-I(i-1,j+1);
grad(i,j)=abs(X)+abs(Y); %根据Sobel算子计算梯度值
if grad(i,j)>=T;
A(i,j)=grad(i,j);
B(i,j)=L1;
else A(i,j)=L2;
B(i,j)=L2; % A,B分别按照公式4.3.10和公式4.3.11来实施空间锐化 end
end
end
M=im2uint8(A);
figure,imshow(M);
N=im2uint8(B);
figure,imshow(N); % 显示变换后图像M,N
以上就是此次实习的过程,先期认为几乎无法完成,但通过参考网上的资料,询问老师,最终完成,过程还是比较复杂,但是却对所学知识映像深刻,如熵的求解,灰度的平方变换, Sobel算子如何计算梯度值,如何实施最大均匀性平滑等。总之觉得还不错,特别是每编完一个程序都很有成就感。