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

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

其主要目的有三个方面:
  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 = imread('Fig0303(a)(breast).tif');
imshow(src);
result = imadjust(src, [0 1], [1 0]);
figure, imshow(result);


对照度拉伸:

(普通线性变换)
src = imread('Fig0316(a)(moon).tif');
imshow(src);
result = imadjust(src, stretchlim(src), [ ]);
figure, imshow(result);


(使用对数变换)
src = imread('Fig0305(a)(spectrum).tif');
imshow(src);
result = im2uint8( mat2gray( log(1 + double(src)) ) );
figure, imshow(result);


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

在图像处理领域,二值图像运算量小,而且可以体现图像的关键特征,因此被广泛使用。
src = imread('Fig0409(a)(bld).tif');
imshow(src);
[row clumn] = size(src);
for p = 1:row
    for q = 1:clumn
        if src(p,q)>=125
            src(p,q)=255;
        else
            src(p,q)=0;
        end
    end
end
figure,imshow(src);



  • 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。


原文地址:https://www.cnblogs.com/mthoutai/p/7402554.html