首页 > 代码库 > 【数字图像处理之(三)】用图像增强谈灰度变换

【数字图像处理之(三)】用图像增强谈灰度变换

前面已经说了,数字图像处理是指通过计算机对数字图像进行去除噪声增强复原分割提取特征等处理的方法和技术。

其主要目的有三个方面:
  1. 提高图像的视感质量,如进行图像的亮度、彩色变换,增强、抑制某些成分,对图像进行几何变换等,以改善图像的质量。
  2. 图像数据的变换、编码和压缩,以便于图像的存储和传输
  3. 提取图像中所包含的某些特征或特殊信息,这些被提取的特征或信息往往为计算机分析图像提供便利。提取特征或信息的过程是模式识别或计算机视觉的预处理提取的特征可以包括很多方面,如频域特征、灰度或颜色特征、边界特征、区域特征、纹理特征、形状特征、拓扑特征和关系结构等。

图像增强(增强图像中的有用信息)

  1. 图像增强是指对图像的某些特征,如边缘轮廓对比度等进行强调或锐化,以便于显示、观察或进一步分析与处理
  2. 增强的首要目标是使处理后的图像比原始图像更适合于特定应用
  3. 主要方法:
    • 空间域: 
      • 点运算(灰度变换、直方图修正法)
      • 区域运算(空间滤波)
    • 频域:
      • 高通滤波、 低通滤波、中值滤波;

灰度变换(gray-scale transformation, GST)是一种空间域上的点运算处理方法,根据一定的关系,逐点改变原图像中每一个像素灰度值的方法(且只跟该点原来的灰度值有关),其表示形式如下:

  • 对于输入图象f(x,y),输出图像g(x,y),T(in)为灰度变换函数,则g(x,y)=T( f(x,y) )。

其主要目的如下:
  • 改善画质,使图像显示效果更加清晰
  • 有选择性地突出图像中感兴趣的特征或抑制某些不需要的特征,使图像与视觉响应特征相匹配(图像增强)

其主要应用如下:
  • 图像求反
  • 对比度拉伸
  • 图像灰度分割(二值化)

图像求反:

这种方法适用于增强嵌入图像暗色区域的白色或灰色细节。
src = http://www.mamicode.com/imread('Fig0303(a)(breast).tif');>


对比度拉伸:

(普通线性变换)
src = http://www.mamicode.com/imread('Fig0316(a)(moon).tif');>


(使用对数变换)
src = http://www.mamicode.com/imread('Fig0305(a)(spectrum).tif');>


图像灰度分割(二值化):

在图像处理领域,二值图像运算量小,并且能够体现图像的关键特征,因此被广泛使用。
src = http://www.mamicode.com/imread('Fig0409(a)(bld).tif');>


  • MATLAB函数小结:


imadjust()

imadjust在数字图像处理中用于进行图像的灰度变换(调节灰度图像的亮度或彩色图像的颜色矩阵),该函数先将图像映射到[0 1],例如uint8类型的图像会先乘以255来决定实际应用中的值。
调用格式:
J = imadjust(I)
将灰度图像 I 中的亮度值映射到 J 中的新值并使 1% 的数据是在低高强度和饱和,这增加了输出图像 J 的对比度值。此用法相当imadjust(I,stretchlim(I))

J = imadjust(I,[low_in; high_in],[low_out; high_out])
将图像I中的亮度值映射到J中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in 以下与 high_in 以上的值被剪切掉了,也就是说,low_in 以下的值映射到 low_out,high_in 以上的值映射到high_out。它们都可以使用空的矩阵[],默认值是[0 1]

J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
将图像 I 中的亮度值映射到 J 中的新值,其中 gamma指定描述值I和值J关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。

newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)
调整索引色图像的调色板map。如果low_in, high_in, low_out, high_out 和 gamma 都是标量,那么对 r,g,b 分量同时都做此映射。对于每个颜色分量都有唯一的映射,当 low_in 和 high_in 同时为1*3向量或者 low_out 和 high_out 同时为1*3向量或者 gamma 为1*3向量时。调整后的颜色矩阵 newmap 和 map 有相同的大小。

RGB2 = imadjust(RGB1,...)
对 RGB 图像 RGB1 的红、绿、蓝调色板分别进行调整。随着颜色矩阵的调整,每一个调色板都有唯一的映射值。

stretchlim() 

 LOW_HIGH = stretchlim(src, tol)
该函数找到对比度扩展图像的对照,可用于imadjust(),
tol =  [LOW_FRACT HIGH_FRACT] 指定图像低像素值和高像素值饱和度的百分比
如果tol是一个标量,tol = LOW_FRACT、HIGH_FRACT = 1 - LOW_FRACT,饱和度等于低像素值和高像素值的百分比。
如果在参数中忽略toll,那么饱和度水平为2%,tol的默认值为[0.01  0.99]。
如果选择tol = 0, LOW_HIGH = [min(I(:)); max(I(:))].

mat2gray()

调用格式:
I = mat2gray(A, [amin amax])
将图像矩阵A中介于amin和amax的数据归一化处理, 其余小于amin的元素都变为0, 大于amax的元素都变为1。I = (A-amin)/(amax-amin)

I = mat2gray(A)
将图像矩阵A归一化为图像矩阵I, 归一化后矩阵中每个元素的值都在0到1范围内(包括0和1)。I = (A-amin)/(amax-amin)

im2uint8()

函数功能: 把图像数据类型转换为无符号八位整型。如果输入图像是无符号八位整型的,返回的图像和
源图像相同。如果源图像不是无符号八位整型的,该函数将返回和源图像相同但数据类型为uint8的图像
(必要时对图像进行调整)。
调用格式:
I = im2uint8(src)
灰度图像src数据类型转换成无符号八位整型的后, 返回。(但src并不发生改变)

RGB2 = im2uint8(RGB1)
把真彩色图像的数据类型转换成无符号八位整型的, 并返回。注意这里并不是将真彩色图像转换成为黑白图像, 这里仅仅改变了图像数据的类型。

I = im2uint8(BW)
把二值图像BW的数据格式转换成uint8格式的, 由于二值图像的图像数据仅仅取0和1, 所以这里的转换效果仅仅是把1映射成255。