ImageJ:stretchHistogram vs equalize

时间:2014-05-08 22:06:34

标签: java image-processing imagej

我正在处理一个项目,我必须显示一些图片(灰度),我注意到它们中的许多太暗而无法正常看到。

然后查看ImageJ API文档,我找到了类: ij.plugin.ContrastEnhancer

有两种方法,我很难理解它们的概念差异,stretchHistogram()和equalize()都会使图像更亮,但我仍然想要理解这些差异。

我的问题是:这些方法之间的概念差异是什么?

1 个答案:

答案 0 :(得分:3)

直方图拉伸是指具有低动态范围的图像 - 例如,所有像素强度都集中在比8位灰度图像的0到255范围更小的范围内。因此,图像中最暗的像素可能是84,最亮的是153.拉伸只是采用这个窄范围,并执行线性映射到完整的0到255范围。像这样:

linear

直方图均衡试图获得平直的直方图 - 因此所有可能的像素强度在图像中均匀表示。这意味着,如果直方图中存在峰值 - 某个范围内的值浓度 - 这些峰值将扩展到更宽的范围,以便峰值变平,并且直方图中存在波谷,这些值将映射到更窄的范围这样槽就会变平了。再次,像这样:

equalised

对于具有低动态范围的单模直方图,这两个操作大致相同,但是在直方图已经覆盖整个强度范围的情况下,直方图均衡提供了有用的视觉改善,而拉伸没有做任何事情(因为那里& #39;没什么可伸展的)。用于映射以均衡直方图的曲线是从累积分布导出的(因此想象每个直方图条是所有先前值的总和)并且理论上可以实现完美平坦的直方图。但是,因为我们(通常)处理像素强度的离散值,所以直方图均衡给出了如上所示的平直线图的近似值。

请注意were taken from this web page上方的图片。