摘自《数字图像处理》 冈萨雷斯
3.1 背景
3.2 亮度变换函数
亮度变换函数仅取决于亮度的值,而与(x,
y)无关,所以亮度变换函数通常可写作如下所示的简单形式:
s = T(r)
其中,r表示图像f中响应点(x, y)的亮度,s表示图像g中响应点(x,
y)的亮度
3.2.1 函数imadjust
语法为:
g = imadjust(f, [low_in high_in], [low_out
high_out], gamma)
函数将对两个区间的值进行映射,区间外的将被剪掉。如果输入的是[]矩阵,则取默认区间[0
1]。参数gamma指定了曲线的形状,该曲线用来映射f的亮度值,以便生成图像g。若gamma小于1,则映射被加权至更高(更亮)的输出值,若gamma大于1则更暗。若省略gamma,则默认值为1,为线性映射。曲线形状如下图所示。
例3.1 使用函数imadjust
首先,我们的原图片是一幅数字乳房X射线图像f,他显示了一处疾患。采用下面的语句读入
>> f =
imread('Fig0303(a)(breast).tif');
使用下面的语句进行明暗反转(负片图像),如上面的右图
>> g1 =
imadjust(f, [0 1], [1 0]);
这种获得明暗反转图像的过程可用于增强潜入在大片黑色区域中的白色或灰色细节。例如,在右边的图就可以非常容易的分析乳房组织。一幅图像的负片同样可以使用IPT函数imcomplement得到:
g = imcomplement(f)
下面的左图是执行下面语句的结果
>> g2 = imadjust(f, [0.5 0.75],
[0 1]);
>> imshow(g2)
该命令将0.5至0.75之间的灰度级扩展到范围[0,
1]。这种类型的处理过程可以突出我们感兴趣的亮度带。最后使用如下命令得到下面右图
3.2.2 对数和对比度拉伸变换
对数与对比度拉伸变换是进行动态范围处理的基本工具。对数变换通过如下表达式实现:
g = c*log(1 + double(f))
其中,c是一个常数。该变换的形状类似于gamma曲线,在两个坐标轴上,低值设置为0,高值设置为1.注意,gamma曲线的形状是可变的,而对数函数形状是固定的。
对数变换的一项主要应用时压缩动态范围。
当执行一个对数变换时,我们通常期望将导致的压缩值还原为显示的全范围。对8比特而言,在matlab中这样做的最简方法是使用语句
gs = im2nint8(mat2gray(g));
使用函数mat2gray可将值限定在范围[0,
1]内,使用函数im2uint8可将值限定在范围[0, 255]内。
图3.4(a)所示的函数称为对比度拉伸变换函数,因为该函数可将输入值低于m的灰度级压缩为输出图像中较暗灰度级的较窄范围内;类似,该函数可以将输入值高于m的灰度级压缩为输出图像中较亮灰度级的较窄范围内。输出的是一幅具有高对比度的图像。实际上,在图3.4(b)所示的限制条件下,输出值是一幅二值图像。这种限制函数称为阈值函数,它是图像分割的一种有效工具。使用本节开头介绍的表示法,图3.4(a)所示的函数的形式为
其中,r表示输入图像的亮度,s是输出图像中的相应亮度值,E控制该函数的斜率。在Matlab中,该式由如下语句对整幅图像完成操作:
g = 1./(1 + (m./ (double(f) + eps))
.^E)
注意,使用eps可以避免f出现0值时的一处现象。由于T(r)的限制值为1,所以在执行此类变换时,输出值也被缩放在范围[0,
1]内。图3.4(a)所示的曲线形状是使用E = 20时获得的。
例3.2 使用对数变换减小动态范围
>>