python - 最小最大图像直方图拉伸
问题描述
我在将图像的直方图拟合到特定范围以获得更好的对比度时遇到问题。
首先,我使用的数据从输入图像+直方图到我的输出图像+直方图到我想要的输出+直方图:
我使用的程序中的方法描述只是说“将黑色映射到最小强度,将白色映射到最大强度”。
这是进行映射的代码:
for y in range(0, h):
for x in range(0, w):
image[y,x] = (((image[y,x] - smallest) / diff) * 65535)
在此代码中,原始图像中的最小强度是最小的,并区分最大和最小强度之间的差异。
我需要做什么才能最终获得更平滑的直方图?
感谢您的帮助!
解决方案
如果image
是整数类型,则(image[y,x] - smallest) / diff)
是较小的整数 - 此操作将结果向下舍入,有效量化输入灰度级。
为了防止这种情况发生,预先计算乘数如下:
scale = 65535 / diff
image[y,x] = (image[y,x] - smallest) * scale
或者,在计算映射之前将像素值转换为浮点数,然后转换回整数以将其存储回image
数组中。
推荐阅读
- react-native - 我在 ExpoKit 下的 RNGestureHandler.h 文件中生成了构建错误。未知类型名称“RNGestureHandlerState”
- kotlin - Kotlin 中的 maxByOrNull 函数
- python - 在 python 中使用 4 阶 Runge Kutta 求解 3 个耦合非线性微分方程
- reactive-programming - 具有反应性扩展的阈值检测
- python - Tox 使用了错误的解释器
- firebase - 在 Android 的 Firebase 存储中按创建时间对项目进行排序
- arrays - 数组 bash 脚本中元素的大小
- html - 创建使用 css 自动调整大小的弹性框标签
- ios - 编译器在尝试删除所有快照侦听器时发现 nil
- azure-ad-b2c - B2C - 运行“更改登录名”自定义策略后注销用户