【问题标题】:ImageJ: stretchHistogram vs equalizeImageJ:拉伸直方图与均衡
【发布时间】:2014-06-26 12:46:34
【问题描述】:
我正在处理一个项目,我必须显示一些图片(灰度),我注意到其中许多图片太暗而无法正常看到。
然后查看ImageJ API文档,发现类:ij.plugin.ContrastEnhancer
那里有两种方法,我很难理解它们的概念差异,stretchHistogram() 和 equalize() 都使图像更亮,但我仍然想了解它们的区别。
我的问题是:这些方法之间的概念差异是什么?
【问题讨论】:
标签:
java
image-processing
imagej
【解决方案1】:
直方图拉伸是指图像的动态范围较低 - 例如,所有像素强度都集中在比 8 位灰度图像的 0 到 255 范围更小的频带中。因此,图像中最暗的像素可能是 84,最亮的像素可能是 153。拉伸只是利用这个狭窄的范围,并对整个 0 到 255 范围执行线性映射。像这样的:
直方图均衡化尝试获得平坦的直方图 - 因此所有可能的像素强度在图像中均等地表示。这意味着在直方图中存在峰值的地方 - 某个范围内的值的浓度 - 这些被扩展以覆盖更宽的范围,从而使峰值变平,而在直方图中有谷的地方,这些被映射到更窄的范围使槽变平。再一次,像这样:
对于具有低动态范围的单模态直方图,这两种操作大致等效,但在直方图已经覆盖了全部强度范围的情况下,直方图均衡化提供了有用的视觉改进,而拉伸则无济于事(因为有没有什么可拉伸的)。用于均衡直方图的映射曲线来自累积分布(因此想象每个直方图条是所有先前值的总和),理论上可以实现完全平坦的直方图。然而,因为我们(通常)处理的是像素强度的离散值,所以直方图均衡化给出了如上所示的平面直方图的近似值。
注意上面的图片were taken from this web page。