我正在一个项目中工作,在该项目中我必须显示一些图片(灰度),并且我注意到其中许多太暗而无法正确看到。

然后查看ImageJ API文档,我发现了该类:ij.plugin.ContrastEnhancer

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

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

最佳答案

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



直方图均衡化试图获得平坦的直方图-因此所有可能的像素强度均在图像中均等地表示。这意味着直方图中存在峰-某个范围内的值的浓度-将其扩展以覆盖更宽的范围,从而使峰变平,而在直方图中存在波谷的位置,将其映射到较窄的范围以便将水槽拉平。再次,如下所示:



对于动态范围较低的单峰直方图,这两个操作大致相当,但是在直方图已经覆盖了整个强度范围的情况下,直方图均衡化会在进行拉伸时提供有用的视觉效果(因为没有东西可以拉伸) )。用于映射以均衡直方图的曲线是从累积分布中得出的(因此,可以想象每个直方图条都是所有先前值的总和),从理论上讲,有可能实现完美的直方图。但是,由于我们(通常)处理的是像素强度的离散值,因此直方图均衡化可以近似于平坦的直方图,如上所述。

请注意,were taken from this web page以上的图像。

关于java - ImageJ:stretchHistogram vs equalize,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23553409/

10-10 13:32