冈萨雷斯《数字图像处理matlab版》(二):灰度变换与空间滤波

灰度变换函数:

1、

I = mat2gray(A, [amin amax])

将图像矩阵A中介于amin和amax的数据归一化处理, 其余小于amin的元素都变为0, 大于amax的元素都变为1。

I = mat2gray(A)

将图像矩阵A归一化为图像矩阵I,归一化后矩阵中每个元素的值都在0到1范围内(包括0和1)。其中0表示黑色,1表示白色。

 

 

 

2、g=imadjust(f,[low_in,high_in],[low_out,high_out],gammma):

(1)输入图像low_in到high_in的灰度级映射到输出图像low_out,high_out之间。输入和输出图像属于同一类。除了f,gamma以外的其他参数都在0到1之间。如果high_out<low_out,则输出灰度将被反转。

(2)低于low_in的作为low_in处理,高于high_in的作为high_in 处理。gamma>1 凸函数式映射,gamma<1凹函数式映射,默认为1。

low_high=stretchlim(f)输出f的高低两个灰度级

 

 

适用情形:

(1)g=imadjust(f,low_high,[low_out,high_out],gammma):

[0,1]à[1,0]明暗翻转,对增强嵌入一片黑色区域的白色或者灰色细节是非常有用的。

(2)g=imadjust(f,[0.25,0.75],[0,1])

将感兴趣的区域延展开,强调感兴趣区域。

 

3、对数变换及对比度拉伸:

g=c*log(1+double(f))

 

适用情形:

一般用于减小动态范围。扩展低灰度值,压缩高灰度值。

 

动态范围和对比度的差别:动态范围是受光者的接收范围,系统最大可度量灰度与最小可检测灰度之比。对比度是实际图片最高和最低灰度差。

 

4、f=im2uint8(g)

把图像数据类型转换为无符号八位整型(八比特图像)。

 

5、对比度拉伸变换函数

 

R为输入图像的灰度,s是输出图像的相应灰度值。E用于控制该函数的斜率。

输出在[0,1]之间。

 

6、指定任意灰度变换:

g=interp1(z,T,f)

T(1)~T(256)对应f中0~255的像素映射成的值。

z=linspace(0,1,numel(T))   在0 1之间产生numel(T)个均匀分布的坐标。

像素是归一化的[0,1]之间。z,T是列向量。

对于f中像素 先在z中找位置 再在T中按比例线性内插找映射结果。

7、伽马变换

s=c*r^(gamma)

8、分段线性变换。

 

 

绘制直方图:

h=imhist(f,b)  b是灰度级分成几部分 默认是256

p=imhist(f,b)/numel(f)   归一化直方图

bar(horz,h,width)       horz和h同维 horz是水平刻度增量(横坐标),h是垂直量(对应的纵坐标的值),width是柱状图宽度。在(0,1)之间。

axis([0  255 0 60000]) x和y的坐标范围

set(gca,’xtick’,0:10000:60000)  gca 意为获取当前轴,按间隔设置x轴。

xlim(‘auto’)  自动设置x轴取值范围和刻度标记。

xlabel(‘textstring’,’font size’,size)  x轴文字标注、尺寸、颜色

y轴原理相同。

 

title(‘textstring’)    加标题   

text(xloc,yloc,’textstring’,fontsize,size) 在图中某位置加文字标注。

plot(horz,h,’linespec’)     用曲线把一组点用直线连起来。

 

 

适用情形:

计算图像像素值的分布。

 

 

 

 

 

直方图均衡:

1、原理

首先图像的灰度值归一到[0,1]以内,且共L个灰度值。对于输出图像的第K个灰度值,它的值等于输入图像前k个灰度值的概率之和,以此类推,得到输出图像的L个灰度值。  若输入图像灰度值连续函数与之原理类似。

2、函数

g=histeq(f,nlev)  f是输入的图像,nlev是输出图像设定的灰度级数。若nlev与L(输入图像可能的灰度级总数)相等,则直接执行变换函数。若nlev<L,则函数试图分配灰度级,以便得到近似平坦的灰度图。

3、适用情形:

生成一幅灰度级等可能的图像,覆盖整个[0,1]范围。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。

4、缺点

如果像素集中在低灰度级,会导致输出图像集中在高灰度级,对比度仍然没有展开。而且有褪色的问题。

 

 

直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法

直方图匹配(直方图规定化):

将图像直方图以标准图像的直方图为标准作变换,使两图像的直方图相同和近似,从而使两幅图像具有类似的色调和反差。

g=histeq(f,hspec)

其中,f为输入图像,hspec为规定的直方图(一个规定值的行向量),g为输出图像,输出图像的直方图近似于指定的直方图hspec。当length(hspec)比f中的灰度级数小很多的时候,g的直方图会较好的匹配hspec。

适用情形:

使输出图像具有期望的色调和反差。

 

 

 

 

g=adapthisteq(f)  分片的直方图匹配。

线性滤波:

g=imfilter(f,w,滤波模式,边界选项,大小选项)  f是图像,w是模板

滤波模式: 相关‘corr’滤波模板直接通过  卷积:’conv’  卷积是滤波器在通过前先旋转180度。

边界选项: P(用P值扩充) ‘replicate’(复制  边界值扩充)

‘symmetric’(镜像扩充)    ‘circular’ 

大小选项: ‘full’ 扩充后的大小  ‘same’ 原图像大小

 

非线性滤波器:

nlfilter函数和colfilt函数,colfilt占用内存大但是速度快,因此被更多的采用。

给定一幅M*N的图像f邻域大小为m*n,confilt生成一个最大尺寸为mn*MN的矩阵,称为A。每一列对应于图像中被邻域包围的像素。

g=colfilt(f,[m,n],’sliding’,fun)

[m,n]表示滤波区域的维数,’sliding’表明处理过程是在输入图像f中逐像素的滑动,fun是一个函数句柄。

对每一列进行操作,返回一个行向量v,v中第k个元素即对A中的第k列做fun操作的结果。

V的大小为1*MN。

不同于线性滤波器,非线性滤波器必须在confilt函数之前显式地填充输入图像。

所使用地函数是:

B =padarray(A,padsize,padval,direction)
       A为输入图像,B为填充后的图像,padsize给出了给出了填充的行数和列数,通常用[r c]来表示。padval和direction分别表示填充方法和方向。它们的具体值和描述如下:
  padval:'symmetric'表示图像大小通过围绕边界进行镜像反射来扩展;
                     'replicate'表示图像大小通过复制外边界中的值来扩展;
                     'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
       direction:'pre'表示在每一维的第一个元素前填充;
                        'post'表示在每一维的最后一个元素后填充;
                        'both'表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。
       若参量中不包括direction,则默认值为'both'。若参量中不包含padval,则默认用零来填充。若参量中不包括任何参数,则默认填充为零且方向为'both'。在计算结束时,图像会被修剪成原始大小。

 

 

 

滤波模板w的生成: w=fspecial(‘type’,parameters)  

不同类型的滤波器对应的参数不同。

 

type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。
type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为 

0.5。
type= 'laplacian',为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1],默认值为0.2。
type= 'log',为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3],sigma为滤波器的标准差,单位为像素,默认值为0.5
type= 'prewitt',为prewitt算子,用于边缘增强,无参数。
type= 'sobel',为著名的sobel算子,用于边缘提取,无参数。
type= 'unsharp',为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2。

 

 

非线性空间滤波器 如

1. 排序滤波器

g=ordfilt2(f,order,domain)   domain是一个逻辑数组,邻域中对应domain 0 元素的像素不参与排序,选取第order个数值作为f在该点的值。

2. 中值滤波器

g=medfilt2(f,[m,n],padnot)     m*n的邻域  padnot是周边填充的模式。其中,‘zeros’(默认值),‘symmetric’镜像反射填充,‘indexed’表示若f是double类,用1填充,否则用0填充。

 

g=imnoise(f,'salt & pepper',d) 在f上生成椒盐噪声。同理可生成其他噪声。

 

 

滤波适用情形:

去除目标和背景中的噪声。

 

 

拉普拉斯算子进行图像锐化: g(x,y)=f(x,y)+c*

(x,y)=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4*f(x,y)

f和g分别是输入图像和锐化后的图像。

锐化的适用情形:

图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰。非锐化--锐化的相反的操作是平滑,所以非锐化就是平滑操作;掩蔽--字面意思是隐藏,其实我们可以把它理解成为减去除去,所以这个过程就是减去平滑后的图像得到的结果。而实际算法的思路是,原图减去平滑后的图像,得到被削弱的边缘部分,然后按照一定比例和原图相加,如果比例为1,那么就是非锐化掩蔽,如果大于1就是高提升滤波,和前面频率域的高提升,高频强调思路一致,只是那部分用的是频率域方法。

非锐化掩蔽(k=1)和高提升滤波(k>1):

1. 输入图像f(x,y)得到平滑后的图像 (x,y)

2. 得到模板gmask=f(x,y)- (x,y)

3. g(x,y)=f(x,y)+k*gmask

 

 

  1. 平滑图像,边缘和突变被消减,而平滑部分不变(此处不适合采用边缘保持性好的平滑算法,代码中使用了均值滤波和高斯滤波)。
  2. 原图像与平滑后图像相减,得到钝化模板。
  3. 钝化模板的k倍与原图相加得到锐化结果。

    值得注意的是,因为钝化模板有负值,所以,如果k选择过大的时候有可能图像产生负值

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值