实验三 空域图像增强.docx

上传人:b****5 文档编号:5897517 上传时间:2023-01-02 格式:DOCX 页数:21 大小:510.90KB
下载 相关 举报
实验三 空域图像增强.docx_第1页
第1页 / 共21页
实验三 空域图像增强.docx_第2页
第2页 / 共21页
实验三 空域图像增强.docx_第3页
第3页 / 共21页
实验三 空域图像增强.docx_第4页
第4页 / 共21页
实验三 空域图像增强.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

实验三 空域图像增强.docx

《实验三 空域图像增强.docx》由会员分享,可在线阅读,更多相关《实验三 空域图像增强.docx(21页珍藏版)》请在冰豆网上搜索。

实验三 空域图像增强.docx

实验三空域图像增强

实验三空域图像增强(灰度变换、直方图处理)

一、实验目的

1.掌握灰度变换的基本原理。

2.掌握直方图处理的基本原理。

3.掌握Matlab中灰度变换和直方图处理的实现方法。

二、实验内容

1.灰度变换(直接正比变换)。

2.灰度变换(截取式正比变换)。

3.灰度变换(反比变换)。

4.灰度变换(对比拉伸)。

5.灰度变换(灰度切割)。

6.灰度变换(对数变换)。

7.灰度变换(幂次变换)。

8.直方图处理(直方图均衡化)。

三、实验仪器、设备及材料

1.电脑一台(2GCPU、2GBRAM、50GBDisk及以上)。

2.Windows2000/WindowsXP/Windows7。

3.MatlabR2006b及以上版本。

4.记录用的笔、纸。

四、实验原理

1.灰度变换

灰度变换是一种点操作,根据原始图像中每个像素的灰度值,按照某种映射规则将其转化为另一灰度值。

其原理是将原图像f(x,y)中的每个像素的灰度按EH操作直接变换以得到目标图像g(x,y)。

若以s表示f(x,y),以t表示g(x,y),则灰度变换原理如下图所示:

2.直方图处理

直方图变换可以清晰图像细节,突出目标物体,改善亮度比例关系,增强图像对比度。

直方图变换基于概率论。

直方图均衡化主要用于增强动态范围偏小的图像的反差。

其基本思想是把原图像的直方图转换为均匀分布的形式,增加像素灰度值的动态范围,增强图像整体对比度。

五、实验步骤

1.灰度变换(直接正比变换)

(1)程序源代码:

closeall

clear15

clc

disp('====E4_4_1.m====');

I=imread('rice.png');

subplot(3,3,1),imshow(I),ylabel('原图像');

subplot(3,3,2),imhist(I);

%方法1-系统函数

J=imadjust(I,[40/255204/255],[01]);%图像的最小灰度值为40,最大灰度值为204

subplot(3,3,4),imshow(J),ylabel('变换图像(方法1)');

subplot(3,3,5),imhist(J);

%方法2-编程实现

%把灰度值范围从[40,204]映射到[0,255]

f0=0;g0=0;%分段曲线的第1个点

f1=40;g1=0;%分段曲线的第2个点

f2=204;g2=255;%分段曲线的第3个点

f3=255;g3=255;%分段曲线的第4个点

subplot(3,3,9),plot([f0,f1,f2,f3],[g0,g1,g2,g3]),xlabel('f'),ylabel('g'),axis([02550255]);

%绘制变换曲线

r1=(g1-g0)/(f1-f0);%曲线1的斜率

b1=g0-r1*f0;%曲线1的截距

r2=(g2-g1)/(f2-f1);%曲线2的斜率

b2=g1-r2*f1;%曲线2的截距

r3=(g3-g2)/(f3-f2);%曲线3的斜率

b3=g2-r3*f2;%曲线3的截距

[m,n]=size(I);

K=double(I);

fori=1:

m

forj=1:

n

f=K(i,j);

g(i,j)=0;

if(f>=f0)&(f<=f1)

g(i,j)=r1*f+b1;%曲线1的方程y=r1*x+b1

else

if(f>=f1)&(f<=f2)

g(i,j)=r2*f+b2;%曲线2的方程y=r2*x+b2

else

if(f>=f2)&(f<=f3)

g(i,j)=r3*f+b3;%曲线3的方程y=r3*x+b3

end

end

end

end

end16

subplot(3,3,7),imshow(uint8(g)),ylabel('变换图像(方法2)');

subplot(3,3,8),imhist(uint8(g));

(2)观察并记录实验结果:

作为实验报告的内容

(3)将“分段曲线的第2个点”更改为“f1=150;g1=0;”,观察并记录实验结果,分析产生该结果的原因:

作为实验报告的内容。

2.灰度变换(截取式正比变换)

(1)程序源代码:

closeall

clear

clc

disp('====E4_4_2.m====');

I=imread('rice.png');

subplot(3,3,1),imshow(I),ylabel('原图像');

subplot(3,3,2),imhist(I);

%方法1-系统函数

%把灰度值范围[80,160]映射到[20,220],灰度值小于80的映射为20,灰度值大于160的映射为220

J=imadjust(I,[80/255160/255],[20/255220/255]);

subplot(3,3,4),imshow(J),ylabel('变换图像(方法1)');

subplot(3,3,5),imhist(J);

%方法2-编程实现

%把灰度值范围[80,160]映射到[20,220],灰度值小于80的映射为20,灰度值大于160的映射为220

f0=0;g0=20;%分段曲线的第1个点

f1=80;g1=20;%分段曲线的第2个点

f2=160;g2=220;%分段曲线的第3个点

f3=255;g3=220;%分段曲线的第4个点

subplot(3,3,9),plot([f0,f1,f2,f3],[g0,g1,g2,g3]),xlabel('f'),ylabel('g'),axis([02550255]);

%绘制变换曲线

r1=(g1-g0)/(f1-f0);%曲线1的斜率

b1=g0-r1*f0;%曲线1的截距

r2=(g2-g1)/(f2-f1);%曲线2的斜率

b2=g1-r2*f1;%曲线2的截距

r3=(g3-g2)/(f3-f2);%曲线3的斜率

b3=g2-r3*f2;%曲线3的截距

[m,n]=size(I);

K=double(I);

fori=1:

m

forj=1:

n

f=K(i,j);

g(i,j)=0;17

if(f>=f0)&(f<=f1)

g(i,j)=r1*f+b1;%曲线1的方程y=r1*x+b1

else

if(f>=f1)&(f<=f2)

g(i,j)=r2*f+b2;%曲线2的方程y=r2*x+b2

else

if(f>=f2)&(f<=f3)

g(i,j)=r3*f+b3;%曲线3的方程y=r3*x+b3

end

end

end

end

end

subplot(3,3,7),imshow(uint8(g)),ylabel('变换图像(方法2)');

subplot(3,3,8),imhist(uint8(g));

(2)观察并记录实验结果:

作为实验报告的内容。

(3)将“分段曲线的第1个点”更改为“f1=0;g1=150;”,“分段曲线的第2个点”更改为“f1=80;g1=150;”,观察并记录实验结果,分析产生该结果的原因:

作为实验报告的内容。

3.灰度变换(反比变换)

(1)程序源代码:

closeall

clear

clc

disp('====E4_4_3.m====');

I=imread('rice.png');

subplot(3,3,1),imshow(I),ylabel('原图像');

subplot(3,3,2),imhist(I);

%方法1-系统函数

%把灰度值范围[0,255]映射到[255,0]

J=imadjust(I,[0/255255/255],[255/2550/255]);

subplot(3,3,4),imshow(J),ylabel('变换图像(方法1)');

subplot(3,3,5),imhist(J);

%方法2-编程实现

%把灰度值范围[0,255]映射到[255,0]

f0=0;g0=255;%分段曲线的第1个点

f1=100;g1=155;%分段曲线的第2个点

f2=200;g2=55;%分段曲线的第3个点

f3=255;g3=0;%分段曲线的第4个点

subplot(3,3,9),plot([f0,f1,f2,f3],[g0,g1,g2,g3]),xlabel('f'),ylabel('g'),axis([02550255]);

%绘制变换曲线

r1=(g1-g0)/(f1-f0);%曲线1的斜率18

b1=g0-r1*f0;%曲线1的截距

r2=(g2-g1)/(f2-f1);%曲线2的斜率

b2=g1-r2*f1;%曲线2的截距

r3=(g3-g2)/(f3-f2);%曲线3的斜率

b3=g2-r3*f2;%曲线3的截距

[m,n]=size(I);

K=double(I);

fori=1:

m

forj=1:

n

f=K(i,j);

g(i,j)=0;

if(f>=f0)&(f<=f1)

g(i,j)=r1*f+b1;%曲线1的方程y=r1*x+b1

else

if(f>=f1)&(f<=f2)

g(i,j)=r2*f+b2;%曲线2的方程y=r2*x+b2

else

if(f>=f2)&(f<=f3)

g(i,j)=r3*f+b3;%曲线3的方程y=r3*x+b3

end

end

end

end

end

subplot(3,3,7),imshow(uint8(g)),ylabel('变换图像(方法2)');

subplot(3,3,8),imhist(uint8(g));

(2)观察并记录实验结果:

作为实验报告的内容。

(3)将“分段曲线的第3个点”更改为“f1=200;g1=155;”,观察并记录实验结果,分析产生该结果的原因:

作为实验报告的内容。

4.灰度变换(对比拉伸)

(1)程序源代码:

closeall

clear

clc

disp('====E4_4_4.m====');

I=imread('rice.png');

subplot(2,3,1),imshow(I),ylabel('原图像');

subplot(2,3,2),imhist(I);

%图像的最小灰度值为40,最大灰度值为204

f0=0;g0=0;%分段曲线的第1个点

f1=90;g1=30;%分段曲线的第2个点

f2=150;g2=225;%分段曲线的第3个点

f3=255;g3=255;%分段曲线的第4个点19

subplot(2,3,6),plot([f0,f1,f2,f3],[g0,g1,g2,g3]),xlabel('f'),ylabel('g'),axis([02550255]);

%绘制变换曲线

r1=(g1-g0)/(f1-f0);%曲线1的斜率

b1=g0-r1*f0;%曲线1的截距

r2=(g2-g1)/(f2-f1);%曲线2的斜率

b2=g1-r2*f1;%曲线2的截距

r3=(g3-g2)/(f3-f2);%曲线3的斜率

b3=g2-r3*f2;%曲线3的截距

[m,n]=size(I);

K=double(I);

fori=1:

m

forj=1:

n

f=K(i,j);

g(i,j)=0;

if(f>=f0)&(f<=f1)

g(i,j)=r1*f+b1;%曲线1的方程y=r1*x+b1

else

if(f>=f1)&(f<=f2)

g(i,j)=r2*f+b2;%曲线2的方程y=r2*x+b2

else

if(f>=f2)&(f<=f3)

g(i,j)=r3*f+b3;%曲线3的方程y=r3*x+b3

end

end

end

end

end

subplot(2,3,4),imshow(uint8(g)),ylabel('对比拉伸变换图像');

subplot(2,3,5),imhist(uint8(g));

(2)观察并记录实验结果:

作为实验报告的内容。

(3)将“分段曲线的第3个点”更改为“f1=90;g1=225;”,观察并记录实验结果,分析产生该结果的原因:

作为实验报告的内容。

5.灰度变换(灰度切割)

(1)程序源代码:

closeall

clear

clc

disp('====E4_4_5.m====');

I=imread('rice.png');

subplot(3,3,1),imshow(I),ylabel('原图像');

subplot(3,3,2),imhist(I);

%######第1种方法######

%图像的最小灰度值为40,最大灰度值为204

f0=0;g0=100;%分段曲线的第1个点

f1=100;g1=100;%分段曲线的第2个点

f2=100;g2=240;%分段曲线的第3个点

f3=140;g3=240;%分段曲线的第4个点

f4=140;g4=100;%分段曲线的第5个点

f5=255;g5=100;%分段曲线的第6个点

subplot(3,3,6),plot([f0,f1,f2,f3,f4,f5],[g0,g1,g2,g3,g4,g5]),xlabel('f'),ylabel('g'),axis([02550255]);

%绘制变换曲线

r1=(g1-g0)/(f1-f0);%曲线1的斜率

b1=g0-r1*f0;%曲线1的截距

r2=(g2-g1)/(f2-f1);%曲线2的斜率

b2=g1-r2*f1;%曲线2的截距

r3=(g3-g2)/(f3-f2);%曲线3的斜率

b3=g2-r3*f2;%曲线3的截距

r4=(g4-g3)/(f4-f3);%曲线4的斜率

b4=g3-r4*f3;%曲线4的截距

r5=(g5-g4)/(f5-f4);%曲线5的斜率

b5=g4-r5*f4;%曲线5的截距

[m,n]=size(I);

K=double(I);

fori=1:

m

forj=1:

n

f=K(i,j);

g(i,j)=0;

if(f>=f0)&(f

g(i,j)=r1*f+b1;%曲线1的方程y=r1*x+b1

else

if(f>=f1)&(f

g(i,j)=r2*f+b2;%曲线2的方程y=r2*x+b2

else

if(f>=f2)&(f

g(i,j)=r3*f+b3;%曲线3的方程y=r3*x+b3

else

if(f>=f3)&(f

g(i,j)=r4*f+b4;%曲线4的方程y=r4*x+b4

else

if(f>=f4)&(f<=f5)

g(i,j)=r5*f+b5;%曲线5的方程y=r5*x+b4

end

end

end

end

end

end

end

subplot(3,3,4),imshow(uint8(g)),ylabel('第1种方法');

subplot(3,3,5),imhist(uint8(g));

%######第2种方法######

%图像的最小灰度值为40,最大灰度值为204

f0=0;g0=0;%分段曲线的第1个点

f1=100;g1=100;%分段曲线的第2个点

f2=100;g2=240;%分段曲线的第3个点

f3=140;g3=240;%分段曲线的第4个点

f4=140;g4=140;%分段曲线的第5个点

f5=255;g5=255;%分段曲线的第6个点

subplot(3,3,9),plot([f0,f1,f2,f3,f4,f5],[g0,g1,g2,g3,g4,g5]),xlabel('f'),ylabel('g'),axis([02550255]);

%绘制变换曲线

r1=(g1-g0)/(f1-f0);%曲线1的斜率

b1=g0-r1*f0;%曲线1的截距

r2=(g2-g1)/(f2-f1);%曲线2的斜率

b2=g1-r2*f1;%曲线2的截距

r3=(g3-g2)/(f3-f2);%曲线3的斜率

b3=g2-r3*f2;%曲线3的截距

r4=(g4-g3)/(f4-f3);%曲线4的斜率

b4=g3-r4*f3;%曲线4的截距

r5=(g5-g4)/(f5-f4);%曲线5的斜率

b5=g4-r5*f4;%曲线5的截距

[m,n]=size(I);

K=double(I);

fori=1:

m

forj=1:

n

f=K(i,j);

g(i,j)=0;

if(f>=f0)&(f<=f1)

g(i,j)=r1*f+b1;%曲线1的方程y=r1*x+b1

else

if(f>=f1)&(f<=f2)

g(i,j)=r2*f+b2;%曲线2的方程y=r2*x+b2

else

if(f>=f2)&(f<=f3)

g(i,j)=r3*f+b3;%曲线3的方程y=r3*x+b3

else

if(f>=f3)&(f<=f4)

g(i,j)=r4*f+b4;%曲线4的方程y=r4*x+b4

else

if(f>=f4)&(f<=f5)

g(i,j)=r5*f+b5;%曲线5的方程y=r5*x+b4

end

end

end

end

end

end

end

subplot(3,3,7),imshow(uint8(g)),ylabel('第2种方法');

subplot(3,3,8),imhist(uint8(g));

(2)观察并记录实验结果:

作为实验报告的内容。

(3)在“第1种方法”中将“分段曲线的第1个点”更改为“f0=0;g0=0;”,观察并记录实验结果,分析产生该结果的原因:

作为实验报告的内容。

(4)在“第2种方法”中将“分段曲线的第1个点”更改为“f0=0;g0=100;”,观察并记录实验结果,分析产生该结果的原因:

作为实验报告的内容。

6.灰度变换(对数变换)

(1)程序源代码:

closeall

clear

clc

disp('====E4_4_6.m====');

I=imread('rice.png');

subplot(3,3,1),imshow(I),ylabel('原图像');

subplot(3,3,2),imhist(I);

%对数变换

c=255/log(1+255);%语句1

x=0:

1:

255;

y=c*log(1+x);

subplot(3,3,6),plot(x,y),axistight,xlabel('f'),ylabel('g');

%绘制变换曲线

[m,n]=size(I);

K=double(I);

g=c*log(K+1);

%{

%等价的循环语句实现

fori=1:

m

forj=1:

n

g(i,j)=0;

g(i,j)=c*log(K(i,j)+1);

end

end

%}

subplot(3,3,4),imshow(uint8(g)),ylabel('对数变换');

subplot(3,3,5),imhist(uint8(g));

%###系统函数调用###

J=imadjust(I,[],[],0.216);

subplot(3,3,7),imshow(J),ylabel('对数变换(系统调用)');

subplot(3,3,8),imhist(J);

(2)观察并记录实验结果:

作为实验报告的内容。

(3)指出“语句1”把变量c定义为“c=255/log(1+255);”的原因。

(4)将“语句1”更改为“c=1”,观察并记录实验结果,分析产生该结果的原因:

作为实验报告的内容。

7.灰度变换(幂次变换)

(1)程序源代码:

closeall

clear

clc

disp('====E4_4_7.m====');

I=imread('rice.png');

subplot(3,3,1),imshow(I),ylabel('原图像');

subplot(3,3,2),imhist(I);

%幂次变换

C=1/(255^3);%语句1

x=0:

1:

255;

y=C*(x.^4);

subplot(3,3,6),plot(x,y),axistight,xlabel('f'),ylabel('g');

%绘制变换曲线

[m,n]=size(I);

K=double(I);

g=C*(K.^4);

%{

%等价的循环语句实现

fori=1:

m

forj=1:

n

g(i,j)=0;

g(i,j)=C*(K(i,j)^4);

end

end

%}

subplot(3,3,4),imshow(uint8(g)),ylabel('幂次变换');

subplot(3,3,5),imhist(uint8(g));

%###系统函数调用###

J=imadjust(I,[],[],4);

subplot(3,3,7),imshow(J),ylabel('幂次变换(系统调用)');

subplot(3,3,8),imhist(J);

(2)观察并记录实验结果:

作为实验报告的内容。

(3)指出“语句1”把变量c定义为“C=1/(255^3);”的原因。

(4)将“语句1”更改为“c=1”,观察并记录实验结果,分析产生该结果的原因:

作为实验报告的内容。

8.直方图处理(直方图均衡化)

(1)程序源代码:

closeall

clear

clc

disp('====E4_5_2.m====');

I=imread('tire.tif');

J=histeq(I);

subplot(2,2,1),imshow(I),ylabel('原图像');

subplot(2,2,2),imhist(I);

subplot(2,2,3),imshow(J),ylabel('直方图均衡图像');

subplot(2,2,4),imhist(J);

(2)观察并记录实验结果:

作为实验报告的内容。

(3)将图片“tire.tif”更改为另外一张新的图片,观察并记录实验结果:

作为实验报告的内容。

六、实验报告要求

1.实验名称、实验日期、学生姓名、班级、教学班号、学号。

2.实验目的和要求。

3.实验仪器、设备及材料

4.实验原理。

5.实验步骤。

6.实

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1