【发布时间】:2023-03-10 16:37:01
【问题描述】:
我正在尝试对 16 位灰度图像进行直方图均衡化,原始直方图如下所示,其灰度级约为 25000:
我第一次使用 MATLAB,但由于某种原因,输出中的总水平显着降低(只有 21 个!)。我尝试手动分配 20,000 的 bin 编号,但输出级别仍然很小 (67)。
然后我在 Python 中尝试了 Scikit-Image,一切都按预期工作——输出现在有 16,500 个级别,直方图非常平坦。
这是 MATLAB 命令:
J = histeq(I,2e4);
这是 Python 命令:
img_eq_sk = exposure.equalize_hist(img_16bit)
由于直方图均衡是一种基本操作,我希望 MATLAB 和 Python 的行为相似,但据此 MATLAB 的结果甚至不如 Skimage 的结果。
【问题讨论】:
-
如果将输入图像转换为双倍,也会发生同样的情况吗?
-
@CrisLuengo 实际上,如果我将它加倍,会有一个小的改进,均衡图像的灰度现在增加到 34(默认)和 132(2e4 箱)
-
我认为主要区别在于我们在 scikit-image 的整个过程中使用浮点数,而我认为 Matlab 会立即四舍五入到 uint8。在用户在这里报告错误后,我对两者进行了比较:github.com/scikit-image/scikit-image/issues/…
-
感谢您的链接,我认为它完全解释了我的担忧。看起来 MATLAB 在这个过程中引入了很多舍入误差;正如你所说,即使将 Skimage 结果放入 255 个 bin 中,我们也不会得到这么少的级别。
标签: python matlab image-processing histogram scikit-image