实验一 图像增强和图像分割实验.docx
《实验一 图像增强和图像分割实验.docx》由会员分享,可在线阅读,更多相关《实验一 图像增强和图像分割实验.docx(18页珍藏版)》请在冰点文库上搜索。
实验一图像增强和图像分割实验
实验一图像增强和图像分割实验
(1)分别用图中给出的直线和曲线作为增强函数进行增强,比较它们的效果并讨论其特点。
线性变换对指数变换
图片1图片2
实验步骤:
1.在MATLAB中编写灰度图像的线性变换点运算程序
图片1处理程序
I=imread('图片1.png');
%读入原图像
I=im2double(I);
%转换数据类型为double
[M,N]=size(I);
figure
(1);
imshow(I);%显示原图像
title('原图像');
figure
(2);
I=rgb2gray(I);
%转化为灰度图像
[H,x]=imhist(I,64);
stem(x,(H/M/N),'.');
title('原图像');
%tan=30`
a=sqrt(3)/3;b=0;
y=a.*I+b;
figure(3);
imshow(y);
title('tan=30');
figure(4);
[H,x]=imhist(y,64);
stem(x,(H/M/N),'.');
title('tan=30');
%tan=45`
a=1;b=0;
y=a.*I+b;
figure(5);
imshow(y);
title('tan=45');
figure(6);
[H,x]=imhist(y,64);
stem(x,(H/M/N),'.');
title('tan=45');
%tan=60`
a=sqrt(3);b=0;
y=a.*I+b;
figure(7);
imshow(y);
title('tan=60');
figure(8);
[H,x]=imhist(y,64);
stem(x,(H/M/N),'.');
title('tan=60');
实验结果如下图所示:
图片1的原图像
图片1的30度线性变换图像
图片1的45度线性变换图像
图片1的60度线性变换图像
原图像的直方图30度变换后直方图
45度变换后的直方图60度变换后直方图
图片2处理程序参考图片1处理程序。
图片2实验结果如图所示:
图片2原图像
30度变换后图像
45度变换后图像
60度变换后图像
2.实验结果分析
由实验结果可以看出,当按照30度线性变换后图像变暗,按照45度变换后图像没有任何改变,按照60度变换后图像变亮,由变换后的直方图可以确认像素点的变化。
由以上分析可以得出,当线性变换函数的斜率大于1时,图像的对比度将增大;当线性变换的斜率小于时,图像的对比度将减小;当线性变换函数的斜率等于1时,图像的对比度不变,只是像素点整体的移动。
虽然线性变换可以改变对比度,但是对图像的细节部分增强有限。
1.在MATLAB中编写灰度图像的对指数点运算程序
图片1对数处理程序:
I=imread('图片1.png');
%读入原图像
I=im2double(I);
%转换数据类型为double
I=rgb2gray(I);
figure
(1);
imshow(I);
%显示原图像
title('原图像');
figure(3);
[H,x]=imhist(I,64);
stem(x,(H/M/N),'.');
title('原图像');
figure
(2);
y=log(I+1);
imshow(I);
title('对数变换');
figure(4);
[H,x]=imhist(y,64);
stem(x,(H/M/N),'.');
title('对数变换');
实验结果如下图所示:
图片1直方图图片1对数变换直方图
对数变换后图像
图片1指数处理程序:
I=imread('图片1.png');
%读入原图像
I=im2double(I);
%转换数据类型为double
I=rgb2gray(I);
[M,N]=size(I);
figure
(1);
imshow(I);
%显示原图像
title('原图像');
figure(3);
[H,x]=imhist(I,64);
stem(x,(H/M/N),'.');
title('原图像');
figure
(2);
imshow(imadjust(I,[],[],3));
figure(4);
[H,x]=imhist(imadjust(I,[],[],4),64);
stem(x,(H/M/N),'.');
title('指数变换');
实验结果如下图所示:
图片1直方图指数变换后直方图
图片1指数变换后图像
图片2对指数处理程序参考图片1处理程序。
对指数处理结果如图所示:
图片2指数变换后图像
图片2直方图指数变换后直方图
对数变换后直方图
图片2对数变换后图像
2.实验结果分析
A、对数变换
采用对数变换,当函数自变量为低值时,曲线斜率很高;自变量为高值时,曲线斜率变小。
由变换后图像和直方图可以得出,对数变换是增强图像中较暗的细节,从而可用来扩展被压缩的高值图像中较暗的像素。
B、指数变换
对数变换采用的是伽玛变换(γ>1),同理图像的高灰度区域对比度得到增加。
因为伽玛变换变换不是线性变换,不仅可以改变图像的对比度,还能够增强细节,从而带来整体图像效果的增强和改善。
(2)分别用Roberts算子、Sobel算子、LoG算子和Canny算子进行边缘检测,比较它们的效果并讨论其特点;
图片3图片4
实验步骤:
在MATLAB中编写检测程序
I=imread('图片3.png');
bw1=edge(I,'roberts');
bw2=edge(I,'sobel');
bw3=edge(I,'log');
bw4=edge(I,'canny');
figure
(1);imshow(I);title('原图像');
figure
(2);imshow(bw1);title('roberts');
figure(3);imshow(bw2);title('sobel');
figure(4);imshow(bw3);title('log');
figure(5);imshow(bw4);title('canny');
实验结果如图所示:
图片3经过roberts算子检测的图像
图片3经过sobel算子检测的图像
图片3经过LoG算子检测的图像
图片3经过canny算子检测的图像
图片4处理程序参考图片3处理程序。
实验结果如下图所示:
roberts处理后图像sobel处理后图像
LoG处理后图像canny处理后图像
1.实验结果分析
由实验结果可以看出:
Roberts利用局部差分算子寻找边缘,边缘定位精度较高,但是容易丢失一部分边缘,同时由于图像没经过平滑处理,因此不具备抑制噪声的能力,所以对含噪声少的图像的处理效果较好;
Sobel算子考虑了邻域信息,相当于对图像先做加权平滑处理,然后再做微分运算,虽然能够对噪声有抑制效果,但不能完全排除检测结果中出现的虚假边缘。
对边缘定位准确,但检测出的边缘容易出现多像素宽度;
LoG算子即高斯-拉普拉斯算子,克服了拉普拉斯抗噪声比较差的缺点,但在抑制噪声的同时也可能将原有的比较尖锐的边缘也平滑掉,造成这些尖锐的边缘无法被检测到,但是相对于Roberts算子和Sobel算子处理结果稍好;
Canny算子:
在图像边缘检测中,抑制噪声和边缘精确定位是无法同时瞒足的,Canny算子在力图在抗干扰和精确定位之间寻求最佳的折中方案。
由图像处理结果可以看出,效果较前三者边缘更细腻、清楚。
从边缘定位的精度看:
Roberts算子和LoG算子定位精度更高。
从对不同方向边缘的敏感性而言:
Sobel算子检测斜向阶跃边缘效果较好;Roberts算子检测水平和垂直边缘效果较好;LoG算子不具备边缘方向检测能力;Soberl算子可以提供最精确的边缘方向估计。
从去噪能力看:
Roberts算子和LoG算子虽然定位精度较高,但受噪声影响大。
从总体效果来衡量,Canny算子给出了一种边缘定位精确性和抗噪声干扰性的较好折中。
(3)采用不同阈值化方法(固定阈值、迭代阈值、Otsu阈值等)对图像进行分割,比较它们的效果并讨论其特点;
图片5图片6
实验步骤:
固定阈值:
I=imread('图片5.png');
figure
(1);imshow(I);title('原图像');
figure
(2);imhist(I);title('直方图');
i=1;j=1;
fori=1:
1:
256
forj=1:
1:
256
if(I(i,j)<=129)
I(i,j)=0;
elseI(i,j)=255;
end
end
end
figure(3);imshow(I);title('129阈值');
图片5直方图取129阈值分割
图片6处理过程参考图片5。
实验结果如图所示:
图片6直方图取83阈值分割
迭代阈值:
I=imread('图片5.png');
ZMAX=max(max(I));%取出最大灰度值
ZMIN=min(min(I));%取出最小灰度值
TK=(ZMAX+ZMIN)/2;
bcal=1;
ISIZE=size(I);%读出图像大小
while(bcal)
iForeground=0;%定义前景和背景数
iBackground=0;
ForegroundSum=0;
%定义前景和背景灰度总和
BackgroundSum=0;
fori=1:
ISIZE
(1)
forj=1:
ISIZE
(2)
tmp=I(i,j);
if(tmp>=TK)
iForeground=iForeground+1;
ForegroundSum=ForegroundSum+double(tmp);
%前景灰度值
else
iBackground=iBackground+1;
BackgroundSum=BackgroundSum+double(tmp);
end
end
end
ZO=ForegroundSum/iForeground;
%计算前景和背景的平均值
ZB=BackgroundSum/iBackground;
TKTmp=uint8(ZO+ZB)/2;
if(TKTmp==TK)
bcal=0;
else
TK=TKTmp;
end
%当阈值不再变化的时候,说明迭代结束
end
disp(strcat('迭代后的阀值:
',num2str(double(TK))));
%显示最终阈值
newI=im2bw(I,double(TK)/255);
figure
(1);imshow(I);title('原始图像');
figure
(2);imshow(newI);title('迭代法分割')
实验结果:
迭代后的阀值:
128
图片5迭代分割
图片6处理过程同上,实验结果如图所示:
迭代后的阀值:
104
图片6迭代分割
Otsu阈值:
I=imread('图片5.png');
level=graythresh(I);
BW=im2bw(I,level);
figure
(1);imshow(I);title('原图像');
figure
(2);imshow(BW);title('otsu');
实验结果:
Level=0.5137
Otsu阈值分割
图片6处理过程同上,实验结果如下:
Level=0.4039;
Otsu阈值分割
1.实验结果分析
固定阈值:
由图片5和图片6的处理结果看出,固定阈值适合具有明显双峰的图像,但是当两个峰值相差很远时不适用,而且容易受到噪声的干扰,进而导致阈值的选取误差。
又因为直方图是各灰度的像素统计,其峰值和谷底并不一定代表目标和背景,所以没有图像其他方面的知识,只靠直方图进行图像分割是不一定准确的。
迭代阈值:
基本思想是:
开始选择一个阈值作为初始值,然后按照某种方法不断更新这个阈值,直到满足给定的条件为止。
由处理结果可以看出,迭代阈值法不需要再依靠直方图或其他方法给出分割阈值,就能够很好的分割图像。
对于图片6效果不是很好。
Otsu阈值:
Otsu阈值又称最大类间方差法,函数Graythresh可以自适应地确定变换所用的最优阈值。
由图像处理结果可以看出,对于简单图像处理效果稍好,但是对于复杂图像的处理效果不好,常常给物体的边缘带来误差。
(4)对于2幅不同的纹理图像,计算其灰度共生矩阵及相关的二次统计量(能量、惯性、相关性、熵等),并比较有何不同?
从这些统计量中可以看出纹理图像有何特点?
图片7图片8
实验步骤:
实验程序
%基于共生矩阵纹理特征提取,d=1,θ=0°,45°,90°,135°共四个矩阵
%所用图像灰度级均为256
Gray=imread('图片7.png');
[M,N]=size(Gray);
I=zeros(M,N);
I=(Gray-rem(Gray,8))/8;
figure
(1);imshow(Gray,[]);
title('256*256');figure(3);imhist(Gray);
figure
(2);imshow(I,[]);
title('8*8');figure(4);imhist(I);
%--------------------------------------------
%计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135
%--------------------------------------------
P=zeros(8,8,4);
form=1:
8
forn=1:
8
fori=1:
M
forj=1:
N
ifjP(m,n,1)=P(m,n,1)+1;
P(n,m,1)=P(m,n,1);
end
ifi>1&jP(m,n,2)=P(m,n,2)+1;
P(n,m,2)=P(m,n,2);
end
ifiP(m,n,3)=P(m,n,3)+1;
P(n,m,3)=P(m,n,3);
end
ifiP(m,n,4)=P(m,n,4)+1;
P(n,m,4)=P(m,n,4);
end
end
end
ifm==n
P(m,n,:
)=P(m,n,:
)*2;
end
end
end
%%-------------------------------------------
%对共生矩阵归一化
%%-------------------------------------------
forn=1:
4
P(:
:
n)=P(:
:
n)/sum(sum(P(:
:
n)));
end%----------------------------------------
%4.对共生矩阵计算能量、熵、惯性矩、相关4个纹理参数
%--------------------------------------------
H=zeros(1,4);
I=H;
Ux=H;Uy=H;
deltaX=H;deltaY=H;
C=H;
forn=1:
4
E(n)=sum(sum(P(:
:
n).^2));%%能量
fori=1:
8
forj=1:
8
ifP(i,j,n)~=0
H(n)=-P(i,j,n)*log(P(i,j,n))+H(n);%%熵
end
I(n)=(i-j)^2*P(i,j,n)+I(n);
%%惯性矩
Ux(n)=i*P(i,j,n)+Ux(n);
%相关性中μx
Uy(n)=j*P(i,j,n)+Uy(n);
%相关性中μy
end
end
end
forn=1:
4
fori=1:
8
forj=1:
8
deltaX(n)=(i-Ux(n))^2*P(i,j,n)+deltaX(n);%相关性中σx
deltaY(n)=(j-Uy(n))^2*P(i,j,n)+deltaY(n);%相关性中σy
C(n)=i*j*P(i,j,n)+C(n);
end
end
C(n)=(C(n)-Ux(n)*Uy(n))/deltaX(n)/deltaY(n);%相关性
end
%--------------------------------------------
%求能量、熵、惯性矩、相关的均值和标准差作为最终8维纹理特征
%--------------------------------------------
b1=sqrt(cov(E));a1=mean(E);
b2=sqrt(cov(H));a2=mean(H);
b3=sqrt(cov(I));a3=mean(I);
b4=sqrt(cov(C));a4=mean(C);
sprintf('0,45,90,135方向上的能量依次为:
%f,%f,%f,%f',E
(1),E
(2),E(3),E(4))%输出数据;
sprintf('0,45,90,135方向上的熵依次为:
%f,%f,%f,%f',H
(1),H
(2),H(3),H(4))%输出数据;
sprintf('0,45,90,135方向上的惯性矩依次为:
%f,%f,%f,%f',I
(1),I
(2),I(3),I(4))%输出数据;
sprintf('0,45,90,135方向上的相关性依次为:
%f,%f,%f,%f',C
(1),C
(2),C(3),C(4))%输出数据;
1.实验结果如下所示:
图片7的结果:
ans=
0,45,90,135方向上的能量依次为:
0.170495,0.143078,0.164191,0.141377
ans=
0,45,90,135方向上的熵依次为:
2.223837,2.366822,2.239749,2.389057
ans=
0,45,90,135方向上的惯性矩依次为:
0.671650,0.907801,0.640556,0.982820
ans=
0,45,90,135方向上的相关性依次为:
0.672787,0.543289,0.677332,0.507081
共生矩阵:
P(:
:
1)=
00000000
00000000
00000000
0000.00170.00360.00170.00030.0006
0000.00360.02210.02930.01020.0019
0000.00170.02930.07810.05370.0197
0000.00030.01020.05370.11520.0941
0000.00060.00190.01970.09410.3527
P(:
:
2)=
00000000
00000000
00000000
00000.00350.00390.00070.0007
0000.00350.01840.03260.01600.0064
0000.00390.03260.08010.05640.0262
0000.00070.01600.05640.09500.1018
0000.00070.00640.02620.10180.3099
P(:
:
3)=
00000000
00000000
00000000
0000.00190.00440.00190.00060.0003
0000.00440.02460.03250.00790.0022
0000.00190.03250.08400.05810.0148
0000.00060.00790.05810.11050.0960
0000.00030.00220.01480.09600.3411
P(:
:
4)=
00000000
00000000
00000000
00000.00290.00390.00210.0007
0000.00290.01500.03580.01720.0057
0000.00390.03580.07440.05760.0326
0000.00210.01720.05760.08590.0981
0000.00070.00570.03260.09810.3114
图片8的结果:
ans=
0,45,90,135方向上的能量依次为:
0.375000,1.000000,0.375000,NaN
ans=
0,45,90,135方向上的熵依次为:
1.039721,0.000000,1.039721,NaN
ans=
0,45,90,135方向上的惯性矩依次为:
0.500000,0.000000,4.500000,NaN
ans=
0,45,90,135方向上的相关性依次为:
-1.777778,NaN,-0.197531,NaN
共生矩阵:
P(:
:
1)=
00000000
00000000
00000000
00000000
00000000
00000000
00000000.2500
0000000.25000.5000
P(:
:
2)=
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000001
P(:
:
3)=
00000000
00000000
00000000
00000000
00