首页 > 解决方案 > 最小最大图像直方图拉伸

问题描述

我在将图像的直方图拟合到特定范围以获得更好的对比度时遇到问题。

首先,我使用的数据从输入图像+直方图到我的输出图像+直方图到我想要的输出+直方图:

我的输入图像

输入图像的直方图

我的输出图像

我的输出图像的直方图

我希望它看起来像这样(看起来更平滑)

我想要的输出图像的直方图

我使用的程序中的方法描述只是说“将黑色映射到最小强度,将白色映射到最大强度”。

这是进行映射的代码:

for y in range(0, h):
    for x in range(0, w):
        image[y,x] = (((image[y,x] - smallest) / diff)  * 65535)

在此代码中,原始图像中的最小强度是最小的,并区分最大和最小强度之间的差异。

我需要做什么才能最终获得更平滑的直方图?

感谢您的帮助!

标签: pythonimage-processing

解决方案


如果image是整数类型,则(image[y,x] - smallest) / diff)是较小的整数 - 此操作将结果向下舍入,有效量化输入灰度级。

为了防止这种情况发生,预先计算乘数如下:

scale = 65535 / diff
image[y,x] = (image[y,x] - smallest) * scale

或者,在计算映射之前将像素值转换为浮点数,然后转换回整数以将其存储回image数组中。


推荐阅读