数字图像基于分断线性变换的图像增强.docx

上传人:b****1 文档编号:23267641 上传时间:2023-05-15 格式:DOCX 页数:19 大小:1.21MB
下载 相关 举报
数字图像基于分断线性变换的图像增强.docx_第1页
第1页 / 共19页
数字图像基于分断线性变换的图像增强.docx_第2页
第2页 / 共19页
数字图像基于分断线性变换的图像增强.docx_第3页
第3页 / 共19页
数字图像基于分断线性变换的图像增强.docx_第4页
第4页 / 共19页
数字图像基于分断线性变换的图像增强.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数字图像基于分断线性变换的图像增强.docx

《数字图像基于分断线性变换的图像增强.docx》由会员分享,可在线阅读,更多相关《数字图像基于分断线性变换的图像增强.docx(19页珍藏版)》请在冰豆网上搜索。

数字图像基于分断线性变换的图像增强.docx

数字图像基于分断线性变换的图像增强

华南师范大学物电学院

 

课程设计实验报告

 

题目图像处理与编码

姓名

学号

专业电路与系统

 

基于分断线性变换的图像增强

(华南师范大学物理与电信工程学院,广东广州510006)

_______________________________________________________________________________________________________________________________摘要:

本文提出了一种基于区域分割的分段线性变换方法,将整幅图像分为不同的灰度段,并进行了不同的灰度处理,结合灰度直方图提供的有关灰度分布的统计信息和图像提供的空间位置信息,利用各灰度区间把图像分割成不同的区域,检验要增强的目标是否落在某灰度区间对应的图像区域内,从而加快了调整灰度区间的过程,提高了算法的执行效率,实验结果表明,在改善图像视觉效果方面,分段线性灰度变换的效果更加明显。

关键词:

线性变换灰度直方图图像增强

ABSTRACT:

Thispaperproposesapiecewiselineartransformationmethodbasedonregionsegmentation,graylevelofthewholeimageisdividedintodifferent,anddifferentgrayscaleprocessing,combinedwiththegrayhistogramofthegrayleveldistributionofstatisticalinformationandimagespatiallocationinformation,useeachgrayscaleintervaldividingtheimageintodifferentareas,whethertesttoenhancetargetinagrayintervalcorrespondingtotheimagearea,soastospeeduptheprocessofadjustinggrayscalerange,improvetheexecutionefficiencyofthealgorithm,theexperimentalresultsshowthatintheaspectofimproveimagevisualeffect,piecewiselineargrayleveltransformationeffectismoreobvious.

KEYWORDS:

LinearTransformationGrayhistogramImageenhancement

1引言

数字图像增强的首要目标是处理图像,以得到对具体应用来说视觉效果更好或更有用的图像。

图像增强效果的好坏直接影响图像分割、特征提取、目标跟踪等后续处理,而且多数图像是以对比度增强为主要需求。

对比度增强的算法很多,比较常用的是直方图均衡法和灰度变换法。

直方图均衡法的优点是能自动地增强整个图像的对比度,但它实际增强效果不易控制,往往在增强目标的同时,也增强了背景和噪声。

而灰度变换特别是分段线性变换因为算法简单,且变换函数可以任意合成而得到广泛的应用。

本文在对基本的分断线性灰度变换方法的分析研究基础上,应用了一种基于区域分割的分段线性变换方法,将整幅图像分为不同的灰度段,对不同的灰度段进行了不同的灰度处理,以实际图像为例,对图像进行了图像增强。

2基本算法

2.1分段线性变换对比度拉伸

为了改变图像的对比度,必须改变图像像元的灰度值,这种改变的本质是构建变换函数。

当函数是线性或分段线性时,就称为线性变换。

线性变换也叫“线性拉伸”,目的是将像元值的变动范围按线性关系扩展到指定范围。

函数符合以下线性关系:

直线与横轴的夹角大于45°时,图像被拉伸,灰度动态范围扩大;反之,图像被压缩,灰度范围缩小。

有时为了更好地调节图像对比度,需要在一些灰度段拉伸,而在另一些灰度段压缩,这种变换称为分段线性变换。

分段线性变换时,变换函数不同,在变换坐标系中成为折线,间断点的位置根据需要决定。

2.2线性变换的基本思想

进行图像增强处理时,为了突出感兴趣的目标或灰度区间,可采用分段线性变换。

它把整个灰度区间划分成几个灰度区间,拉伸要增强的目标对应的灰度区间,相对抑制不感兴趣的灰度级,从而达到增强的目的。

如何划分灰度区间是进行变换的关键问题,实际应用时灰度区间端点经常根据经验设定,不具备普遍性。

本文提出的基于区域分割的分段线性变换方法,可以快速确定图像中增强目标对应的灰度区间,很好的解决了划分灰度区间这一问题,提高了算法的执行效率和有效性。

图像灰度化处理后对应有灰度直方图,将图像的灰度直方图表示的灰度去见分成多段,然后进行处理以达到更加鲜明的对比,同时不失图像原有的信息,这就是分段线性变换的基本思想。

分段线性变换的优点是可以根据实际需要,拉伸特征目标的灰度细节,抑制不需要的部分,突出感兴趣的部分。

分段点的选择通常可以通过人机交互的方式获得。

分段线性变换可以根据需要确定划分分段区间的个数,常用的是三段线性变换,如下图所示。

式中最重要的参数是[x

x

][y

y

]。

根据算法函数描述发现,x

和x

是给出需要转换的灰度范围,y

和y

参数决定先行变换的斜率,即分别为原图像和变换后的图像的灰度级。

三段线性变换图

灰度区间[x1,x2]为要增强的目标对应的灰度范围,变换后扩展[y1,y2]。

图中对[x1,x2]进行了线性拉伸,而[0,x1]和[x2,255]则被压缩。

通过调整节点的位置,可以对任意灰度区间进行拉伸或压缩。

如果图像中含有多个要增强的目标,就划分成多个灰度区间,此时更增加了调整节点的次数。

当[x1,x2],[y1,y2]分别取不同值时,可得到不同的变换效果。

例如:

(1)如果x1=y1,x2=y2,则f(x)为一条斜率为1的直线,增强图像将和原图像相同,如下图2.1,变换前后灰度直方图分别为图2.2、图2.3。

图2.1

图2.2

图2.3

(2)如果x1=x2,y1=0,y2=255,则增强图像只剩下2个灰度等级,分段线性变换起到了阈值化的效果,此时的对比度最大,但是细节丢失最多,如下图2.4,其中灰度直方图图2.5,显示所有像素点都集中于灰度级0处。

图2.4

图2.5

(3)[x1,x2],[y1,y2]取一般值时,由下图可见,在[0,x1]段进行了压缩,[x1,x2]扩展,[x2,255]则被压缩,所以图片经过变换之后,灰度更集中于较暗区域,黑白更分明了,直方图的比较,更是显然易见地凸显这种效果。

如下图2.6。

图2.6三段线性变换

图2.7变换前直方图

图2.8变换后直方图

 

2.3基于区域分割的分段线性变换

分段线性变换给出了变换的原理,合理的划分灰度区间是取得较好增强效果的保证。

灰度直方图描述了一幅图像的灰度级内容,任何一幅直方图都包括了可观的信息,可以结合它来划分灰度区间。

但由于不能直观地把某一灰度范围和图像中对应的区域联系起来,调整灰度区间时带有一定的盲目性,需要反复调整多次。

本文提出的基于区域分割的分段线性变换提供了一种划分灰度区间的方法,可以较快的确定图像中增强目标的灰度范围,然后变换到所需的灰度范围。

确定灰度变换区间包含如下三个方面:

(1)显示图像的灰度直方图

图像的灰度直方图是进行图像处理的一种有利的工具,显示了图像的灰度分布情况。

通常对于目标和背景灰度可明确区分的图像,目标对应直方图中某一灰度范围。

通过观察直方图来确定谷点的大致位置,以它为分界点来确定目标的大致灰度范围。

本文生成了可以调节大小的灰度直方图,其中横坐标为0——255灰度级,纵坐标为具有该灰度值的图像中像素的个数。

当图像中包含较多的灰度级时,直方图图像的许多直线会连成一片,这时调节直方图的宽度,加大相邻直线之间的距离;当图像中一些直线的长度较短又相距较近时,很难看出它们之间的相对长短,这时调节直方图的高度,就可以看出它们之间的区别。

当鼠标在直方图图像上移动时,可显示纵横坐标值。

把灰度直方图调整到合适的大小,这时就可以较容易确定谷点的大致位置。

(2)显示图像的像素灰度值

灰度直方图提供了图像灰度分布的统计信息,但丢失了图像像素的空间位置信息。

对于含有多个目标的图像,察看它们较大和较小的灰度级,可以确定多个目标的大致灰度范围。

(3)显示图像的变换区域

确定了某个灰度变换区间,我们并不知道所对应的图像区域的确切范围。

通过显示该灰度区间对应的图像区域,可以知道要增强的目标是否包含在其内。

通过显示目标中没有包含的区域的较大和较小的灰度值,调整灰度区间范围,根据需要确定变换后的彩色部分大小是否合乎要求。

实际应用时,我们可以灵活应用以上方法,大大加快了确定灰度变换区间的过程。

然后进行分段线性变换,增强目标的对比度。

 

3实验实例及分析

下面结合一幅图像说明分段线性变换的实现过程。

图3.1左图为原图像178*178(像素*像素),8位灰度图像,其中的颜色较暗的物体为增强目标。

图3.1右图为左图的灰度直方图,根据需要调节直方图的宽度和高度,调节后的图像如图3.2所示,这时直方图所包含的信息就一目了然了,然后从直方图中找到我们需要的数据。

图3.1

图3.2

图3.1左中目标灰度低于背景灰度,直方图中左边灰度值较低的部分对应目标,右边灰度值较高的部分对应背景。

观察调整后的直方图,左边较低灰度级值为7,在两峰之间的谷点附近取灰度级值80时,然后分别取[y1,y2]为[7,220]、[14,220]、[21,220],得出的线性变换图如下图3.3、图3.4、图3.5。

显然,取[y1,y2]为[21,220]时,能很好的抑制住背景灰度,明显的凸显出目标物体。

图3.3

图3.4

图3.5

比较变换前后的图像,变换后可以看清目标区域更多的细节信息;比较变换前后的直方图,可见拉伸了目标对应的灰度区间,压缩了背景对应的灰度区间。

虽然损失了背景的一些信息,但目标得到了增强,变得清晰可见。

图3.5中多个目标被同时增强,有些增强效果并不明显,可以用类似的方法,确定单个目标较精确的灰度范围,进行变换增强,以察看它们包含的细节信息。

 

4结论

分段线性灰度变换是一种非常灵活的图像增强方法,在图像处理领域有很大的应用空间。

其中基于区域分割的分段线性变换关于确定灰度变换区间的三个方面:

显示图像的变换区域、显示图像的像素灰度值和显示图像的灰度直方图是该方法的关键。

实验结果表明,基于区域分割的分段线性变换提供了一种划分灰度区间的方法,可以较快的确定图像中增强目标的灰度范围,然后变换到所需的灰度范围,拉伸系数的选取对图像增强的效果影响较大,分断线性灰度变换的图像增强效果较为明显。

 

5总结

通常情况下,对于目标和背景灰度可明确区分的图像,经常应用分段线性变换进行处理。

这时图像的直方图明显有双峰,一般取两峰之间的谷点作为分界点,就可以较好地确定灰度区间的范围。

事实上,许多根据人眼主观判断可划分为目标和背景的图像,其灰度直方图并不具备上述特点,可能的情况是灰度直方图的谷点并不十分明显或者存在多个谷,只能确定目标的大致灰度范围。

对于含有多个目标的图像,更难确定每个目标所对应的灰度范围。

总之,这些方法对目标的大致灰度范围直接进行灰度变换。

当划分的灰度区间不合适时,为达到较好的增强效果,需要反复进行调整。

应用基于区域分割的分段线性变换,可以很好的解决这些问题。

通过调节直方图的大小,在谷点附近取值,确定目标的大致灰度范围;通过显示图像中像素的灰度值,可以确定多个增强目标对应的大致灰度范围;通过改变灰度区间对应的图像区域的颜色和显示像素的灰度值来对灰度区间进行调整,可以察看灰度区间对应的图像区域是否合乎要求,减少了调整灰度区间的次数,并获得了要增强目标的较精确的灰度范围。

实验证明,基于区域分割的分段线性变换一定程度上解决了划分灰度区间这一问题,是一种行之有效的方法。

参考文献:

[1]数字图像处理(第二版)冈萨雷斯电子工业出版社2009.

[2]数字图像处理初探张东仓

[3]基于MATLAB的数字图像处理王磊苏州市职业大学学报2009.

[4]基于MATLAB的系统分析与设计—图像处理[M]王晓丹、吴崇明西安电子科技大学出版社2000.

[5]基于MATLAB的X线医学图像增强与直方图处理方法袁丽婷、邱力军

[6]Matlab6.0图形图像处理函数详细列表

 

附录:

线性变换的函数实现:

functionout=imgrayscaling(varargin)

[A,map,x1,x2,y1,y2]=parse_inputs(varargin{:

});

range=getrangefromclass(A);

range=range

(2);

%如果输入图像不是灰度图,则需要执行转换

ifndims(A)==3,%A矩阵为3维,RGB图像

A=rgb2gray(A);

elseif~isempty(map),%MAP变量为非空,索引图像

A=ind2gray(A,map);

end%对灰度图像则不需要转换

%读取原始图像的大小并初始化输出图像

[M,N]=size(A);

I=im2double(A);%将输入图像转换为双精度类型

out=zeros(M,N);

%主体部分,双级嵌套循环和选择结构

fori=1:

M

forj=1:

N

ifI(i,j)

out(i,j)=y1*I(i,j)/x1;

elseifI(i,j)>x2

out(i,j)=(I(i,j)-x2)*(range-y2)/(range-x2)+y2;

else

out(i,j)=(I(i,j)-x1)*(y2-y1)/(x2-x1)+y1;

end

end

end

%将输出图像的格式转化为与输入图像相同

ifisa(A,'uint8')%uint8

out=im2uint8(out);

elseifisa(A,'uint16')

out=im2uint16(out);

%其它情况,输出双精度类型的图像

end

%输出:

ifnargout==0%如果没有提供参数接受返回值

imshow(out);

return;

end

%-----------------------------------------------------------------------------

function[A,map,x1,x2,y1,y2]=parse_inputs(varargin);

%这就是用来分析输入参数个数和有效性的函数parse_inputs

%A输入图像,RGB图(3D),灰度图(2D),或者索引图(X)

%map索引图调色板(:

3)

%[x1,x2]参数组1,曲线中两个转折点的横坐标

%[y1,y2]参数组2,曲线中两个转折点的纵坐标

%首先建立一个空的map变量,以免后面调用isempty(map)时出错

map=[];

%IPTCHECKNARGIN(LOW,HIGH,NUM_INPUTS,FUNC_NAME)检查输入参数的个数是否

%符合要求,即NUM_INPUTS中包含的输入变量个数是否在LOW和HIGH所指定的范围

%内。

如果不在范围内,则此函数给出一个格式化的错误信息。

iptchecknargin(3,4,nargin,mfilename);

%IPTCHECKINPUT(A,CLASSES,ATTRIBUTES,FUNC_NAME,VAR_NAME,ARG_POS)检查给定

%矩阵A中的元素是否属于给定的类型列表。

如果存在元素不属于给定的类型,则给出

%一个格式化的错误信息。

iptcheckinput(varargin{1},...

{'uint8','uint16','int16','double'},...

{'real','nonsparse'},mfilename,'I,XorRGB',1);

switchnargin

case3%可能是imgrayscaling(I,[x1,x2],[y1,y2])或imgrayscaling(RGB,[x1,x2],[y1,y2])

A=varargin{1};

x1=varargin{2}

(1);

x2=varargin{2}

(2);

y1=varargin{3}

(1);

y2=varargin{3}

(2);

case4

A=varargin{1};%imgrayscaling(X,map,[x1,x2],[y1,y2])

map=varargin{2};

x1=varargin{2}

(1);

x2=varargin{2}

(2);

y1=varargin{3}

(1);

y2=varargin{3}

(2);

end

%检测输入参数的有效性

%检查RGB数组

if(ndims(A)==3)&&(size(A,3)~=3)

msg=sprintf('%s:

真彩色图像应当使用一个M-N-3维度的数组',...

upper(mfilename));

eid=sprintf('Images:

%s:

trueColorRgbImageMustBeMbyNby3',mfilename);

error(eid,'%s',msg);

end

if~isempty(map)

%检查调色板

if(size(map,2)~=3)||ndims(map)>2

msg1=sprintf('%s:

输入的调色板应当是一个矩阵',...

upper(mfilename));

msg2='并拥有三列';

eid=sprintf('Images:

%s:

inColormapMustBe2Dwith3Cols',mfilename);

error(eid,'%s%s',msg1,msg2);

elseif(min(map(:

))<0)||(max(map(:

))>1)

msg1=sprintf('%s:

调色板中各个分量的强度',upper(mfilename));

msg2='应当在0和1之间';

eid=sprintf('Images:

%s:

colormapValsMustBe0to1',mfilename);

error(eid,'%s%s',msg1,msg2);

end

end

%将int16类型的矩阵转换成uint16类型

ifisa(A,'int16')

A=int16touint16(A);

end

 

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

当前位置:首页 > 总结汇报 > 学习总结

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

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