什么是cv :: equalizeHist和matlab histeq()之间的区别

时间:2014-08-08 09:32:33

标签: c++ opencv matlab

非常简单的问题,但我很困惑。任何人都可以解释Matlab histeq()函数和Opencv cv :: equalizeHist()函数之间是否有任何区别。

当我试图在matlab上对图像应用直方图均衡时,但我发现结果不一样,在像素的每个值中存在大约4-6的差异。特别是一行的前2个像素。和其他像素的1或2差异。 例如,对于相同的图像 openCV结果

100160210240

但Matlab返回

97,159,210,240。

即使我尝试使用histeq(图像,255);或者histeq(图像,256);但即使比它一样。有什么不同? 提前致谢。

2 个答案:

答案 0 :(得分:4)

这可能在于Matlab使用约束来指定灰度变换不能超过图像的累积直方图超过给定强度的直方图计数之间距离的一半。您有关于Matlab here使用的算法的更多详细信息(位于页面底部,"算法')和OpenCV here

答案 1 :(得分:0)

Matlab的histeq函数为您提供了几个输入选项1)J = histeq(I, hgram) - 输出J将近似于用户指定的直方图和2)J = histeq(I, n) - 输出J将近似于默认的平直方图但是n离散灰度。如果省略n,则默认的灰度级数为64. OpenCV的equalizeHist(src,dst)不会给出这些选项中的任何一个;事实证明它假设256个灰度级。因此,如果您尝试J = histeq(I, 256),您的结果将与opencv匹配。

相关问题