MATLAB灰度变换

前言
  所谓“空间域”指的是图像平面本身,这类方法是对图像像素直接处理为基础的。图像的灰度变换处理是图像增强处理技术的一种非常基础的空间域处理方法。灰度变换主要针对独立的像素点进行处理,通过改变原始图像数据所占据的灰度范围而使图像在视觉上得到良好的改变。

文章目录

1 灰度变换函数

1.1 imadjust函数

   imadjust函数是针对灰度图像进行灰度变换的基本图像处理工具箱函数,一般的语法格式如下:

g=imadjust(f,[low_in hign_in],[low_out high_out],gamma)

  此函数将f的灰度值映射到g中的新值,也就是将low_in与high_in之间的值映射到low_out与high_out之间的值。low_in以下与high_in以上的值可以被截去。也就是将low_in以下的值映射为low_out;将high_in以上的值映射为high_out。

例1:图1是一副米粒图像原图,图2是负片图像

g=imread('rice.png')
imshow(g)
g1=imadjust(g,[0 1],[1 0])
figure,imshow(g1)

MATLAB灰度变换

  获得照片负片图像的这一过程对于增强在一大片主要的黑色区域中嵌入白色及灰色细节是非常有用的。

1.2 对数及对比度扩展变换

  对数及对比度扩展是动态范围处理的基本工具。对数变换通过以下表达式实现:

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

  其中,c是常数,f是浮点数。对数变换的一项主要应用是压缩动态范围,假设动态范围是10610^6106,之后被将至14(也就是log(10610^6106)=13.8),这样也更容易处理。
&emsp ;当执行对数变换时,通常期望得到的是将压缩值返回至显示的全域。对于8比特来说,在MATLAB中最简单的方法是:

gs=im2uint(mat2gray(g))

  使用mat2gary将值限定在[0,1]范围内,使用im2uint8将值限定在[0,255]范围内,把图像转换为uint8类。

例2:利用对数变换减小动态范围

a=imread('pout.tif')
imshow(a)
g=im2uint8(mat2gray(log(1+double(a))))
figure,imshow(g)

MATLAB灰度变换
  图3是原图,图4是经过对数变换后的图像,可见图4相对于原始图像在视觉方面的改善效果是较明显的。

2 直方图均衡化

2.1 生成图像的直方图

以从图像灰度直方图中提取信息为基础的灰度变换函数在增强、压缩、分割、描述等方面的图像处理中起重要作用,有时利用归一化的直方图是必要的。
工具箱中用于处理图像直方图的核心函数是imhist,基本语法如下:

h=imhist(f,b)

其中,f为输入图像,h为直方图,b是用来形成直方图的“统计堆栈”的数目,如果我们处理一幅uint8类的图像且设b=2,然后灰度范围会被分成两部分:0至127和128至255。所得到的直方图将有两个值:h(1)等于图像在[0,127]间隔内的像素数,h(2)等于图像在[128,255]间隔内的像素数。

2.2 histeq函数

  假设灰度级为归一化在[0,1]范围内的连续量,让p(rrr)代表一副给定图像的灰度级的概率密度函数。假设我们对输入灰度进行下列变换,得到处理之后的灰度级s:
s=T(r)=0rp(w)dws=T(r)=\int_{0}^{r}p(w)dws=T(r)=∫0r​p(w)dw
式中的w是积分虚变量,前面的变换生成一幅图像,这幅图像的灰度级是等概率的。此外,灰度覆盖了整个[0,1]范围。
直方图均衡化由工具箱中的histeq函数实现,语法如下:

g=histeq(f,nlev)

其中,f为输入图像,nlev为输出图像设定的灰度级数。若nlev与L(输入图像中可能灰度级的总数)相等,则histeq直接执行变换函数

例3:直方图均衡化

a=imread('pout.tif')
imshow(a)
figure,imhist(a)
ylim('auto')
g=histeq(a,256)
figure,imhist(g)
ylim('auto')
figure,imshow(g)

MATLAB灰度变换
  上图是原图与经过直方图均衡化之后的结果,在平均灰度及对比度方面的改进是非常明显的。另外,直方图如下所示:

MATLAB灰度变换

  对比度的增加源于直方图在整个灰度级以上的显著扩展。灰度级的增加源于整个灰度级上的显著扩展,灰度级的增加源于均衡化之后的图像直方图中灰度级平均值高于原始值。

2.3. adapthisteq函数

  这个工具箱函数执行对比度受限的自适应直方图均衡,和histeq不同的是,此方法用直方图规定化方法处理图像的小区域组成,然后用双线性内插将相邻小片组合起来以消除人工引入的边界效应。特别是可以限制均匀亮度区域的对比度,以免放大噪声。adapthisteq函数的语法如下:

g=adapthisteq(f,param1,val1,param2,val2,…)

  其中,f是输入图像,g是输出图像,param/val是表中所示内容。

参数
NumTiles 根据行和列[r c]指定小片数的正整数的两元素向量,r和c至少是2,小片总数是r*c
ClipLimit 范围[0 1]内的标量,指定了对比度增强限制,值越高,对比度越高,默认值是0.01
NBins 正整数标量,为建立对比度增强变换而使用的直方图指定堆栈数目
Range 指定输出图像数据范围的字符串
Distribution 字符串,用于指定图像小片所需的直方图形状

例4:adapthisteq运用

g=imread('moon.tif')
imshow(g)
g1=adapthisteq(g)
figure,imshow(g1)
g2=adapthisteq(g,'NumTiles',[25 25])
figure,imshow(g2)
g3=adapthisteq(g,'NumTiles',[25 25],'ClipLimit',0.03)
figure,imshow(g3)

MATLAB灰度变换

  上图是图像原图与使用adapthisteq默认值之后的结果,结果显示的细节略有增加,但是图像的重要部分仍然较暗

MATLAB灰度变换
  上图是加入小片大小增加到[]25 25]后的结果以及加入ClipLimit=0.03后的结果,这两幅图与前两幅图相比,在细节方面明显增强。这就是局部增强方法以及全局增强方法的区别。

上一篇:opencv-python学习记录


下一篇:openCV图像处理---边缘保留滤波