关于强度
简单地说,很难谈论图像的“强度”。每个像素都有其强度(对于灰度图像,它们通常允许的范围是 [0, 255]),但不存在图像强度的概念。如果您正在进行某种图像分析,您可能会对描述图像强度的参数感兴趣,例如平均强度(如@geometrikal 所说)或图像级别的分布(与对比度有关)。
对比之下
如果您假设灰度图像仅包含两个强度值的像素(一个用于背景像素,一个用于对象像素)的理想化情况,则对象的对比度将是这些值的差异。在显示的图像上意味着什么 --> 对比度越高,就越容易在图像上发现(查找、定位)对象(对于人眼)。同样,您通常会谈论图像中对象的对比度,很难谈论无法定义对象的图像对比度。
例如,让我们看几个一维信号(您可以从这些信号中生成与您的示例类似的图像):
1) 0 0 0 0 20 20 0 0
2) 0 0 0 0 255 255 0 0
3) 200 200 200 200 255 255 200 200
4) 200 200 200 200 0 0 200 200
我将假设每个示例中与其余像素不同的两个像素是对象像素,其余的是背景。我们这里有几个案例(我可以做更多):
- 深色背景上较亮的物体,所有强度值都很低(即图像相当暗),对比度低
- 深色背景上的明亮物体,大多数像素强度低,对比度高(这是一张黑白图像)
- 较暗背景上的明亮物体,所有强度值都很高(即图像很亮),对比度低(但高于第一个示例)
- 明亮背景上的暗物体,大多数像素具有高强度,对比度高(但不如第二个例子高)
这是另一个例子,支持对比度通常是描述对象的属性,无论是相对于自身还是相对于周围环境。从该示例中要注意的另一个重要事实是对比度通常描述了强度级别之间的差异,但精确定义取决于应用(测量目的)。让我解释一下P. Soille, L. Najman的分层图像分割中使用的对比度定义:以图像处理和空间数据聚类的形态层次表示为例:
连通分量(对象)的内部对比度对应于属于该连通分量的两个相邻像素之间的最大强度差。外部对比度定义为所考虑的连通分量的像素与不属于所考虑分量的相邻像素之间的最小强度差。
当然,不同的应用程序可以使用不同的对比度测量。
在imadjust
我通常不在 MATLAB 中工作,但在文档中,它用于将输入图像的强度范围(给定范围内的强度级别)映射到为输出图像指定的强度范围。默认的无参数调用将增加图像的对比度。但是,您可以通过增加或减少对象对比度来获得更亮/更暗的图像。让我在我的第三个例子中证明这一点:imadjust
imadjust(I3, [0.8; 1.0], [0.0; 1.0])
应该输出0 0 0 0 255 255 0 0
。你会得到一个黑色背景上的白色物体。通常,图像较暗(强度较低),但对比度较高(黑白)。
imadjust(I3, [0.8; 1.0], [0.0; 0.2])
应该输出0 0 0 0 51 51 0 0
。黑色背景上相当暗的物体。图像较暗(强度较低),物体的对比度没有变化。
imadjust(I3, [0.8; 1.0], [0.85; 0.9])
应该输出216 216 216 229 229 216 216
。在明亮的背景上非常明亮的物体。图像更亮(更高强度),并且对象的对比度降低(对象强度级别更类似于背景的强度级别)。
您可以通过将它们乘以最大灰度级 (255) 来获得函数正在使用的实际范围。例如,范围[0.2; 0.8]
实际上是强度范围[51; 204]
。
需要注意的另一件事是,该函数会剪切第一个强度范围之外的值,如果它们更小,则将它们映射到新的低点,如果它们大于该范围,则将它们映射到新的高点。我所有的例子实际上都包括这个:第一个范围从0.8
which 开始映射到强度204
,但是200
从输入图像的强度映射到所有图像中的输出低。
所以,它实际上只是图像强度的简单缩放(带截止)。imadjust
此外,仅使用图像作为输入参数的默认调用应该会增加对比度。我会说那imadjust(I2)
不会做任何事情(在我的第二个示例中存在最大对比度)。
关于对比度增强
引自P. Soille:形态图像分析:
图像对比度增强是指增强或锐化图像特征,以使图形显示对人眼对图像的可视化或分析更有用。
他还强调:通过视觉(人工)检查增强对比度图像分析更容易。在像我的示例中这样的理想化图像中,计算机在图像分析难度方面不会获得太多收益。
例如,对于通过阈值提取对象,这意味着应该使用不同的阈值从背景中提取对象。但是,人类检查员会在高对比度图像上更容易发现物体。这一切都会在真实图像中发生一些变化(对象没有统一的灰度级),因此对比度增强在图像分析中变得有用。
对比度增强有几种方法:
- 基于点的技术,其中本地邻域并不重要。它们基于对整个图像的灰度级分析
- 基于邻域的技术,其中像素的局部邻域很重要。示例是白色和黑色礼帽运算符,以及togle contrast 运算符。
- 基于变换的技术,其中在使用逆变换之前对变换后的图像进行滤波(例如,在傅立叶变换之后在频域中进行滤波)。
关于强度调整
就灰度图像而言,像素的强度与其亮度相对应。强度越大,亮度越大。这也意味着增加强度可以被视为使图像变亮(而降低强度可以被视为使图像变暗)。
我将把图像均匀变亮的过程描述为增加强度,同时保持整个图像的对比度不变。这实际上意味着为所有像素添加一个常数值。
现在,由于像素强度值具有预定义的范围,通常为 [0..255],这意味着存在最大强度。这不可避免地意味着一些像素(之前彼此不同)将变成白色(即强度 255)。
当您将照片对准非常明亮的物体(太阳或其他光线)时,这种“自然”就会发生。远离灯光,您可能会看到一些细节,但在灯光/太阳的位置及其周围,您只会看到白色像素,这意味着强度(拍摄图像时的光量)“达到”其最大值(可显示/可存储)值。
您不会通过此操作丢失细节的唯一方法是,如果原始像素强度仅属于可能的强度范围的一部分,例如,如果原始像素在 [10, 150] 范围内,则图像可能会变亮到 105 强度级别,然后再开始松散细节。
由于imgadjust
旨在执行强度缩放,它可以做的不仅仅是使图像变亮/变暗。如果你想用 来模拟增亮效果imadjust
,你可以这样写:
imadjust(I, [0.0; x], [1.0-x; 1.0])
其中x
是 0 和 1 之间的任意数字(例如x=0.5
,将使 [0..255] 图像增亮 127)。
也就是说,对于这样一个简单的操作来说,这是一个矫枉过正的事情。我确信 matlab 有一个基本操作,可以为矩阵的所有元素添加一个标量,所以你可以使用它:)