具有大动态范围的图像的图像归一化

时间:2017-07-19 07:59:52

标签: matlab image-processing

我的图像大小为144 * 2209,动态范围很大(从-1108到984)。

我想要显示此图像,因此需要将此范围设置为0到255,为此我需要对图像进行标准化。

问题在于:当这么大的动态范围变得紧凑时,归一化后的像素值变得彼此非常接近,使得图像不会显示出来。

可以采取哪些措施来解决这个问题?

以下是IMAGE的链接。

1 个答案:

答案 0 :(得分:2)

您可以使用线性变换来更改原始图像的动态范围,但请注意您将修改图像的信息

为此,对于Matlab中的8位范围,只需使用以下代码段:

bins = pow2(8); % = range
lin_eq_img = round( (bins - 1) * (img - min_img) / (max_img - min_img) );

但它会略微影响图像: 8-bit equalization

只是一些评论:

  • 即使您的图像动态范围高于8位深度,也不会被视为“大动态范围”
  • 取决于您想要做什么以及如何做,您可能需要考虑在16位动态上使用先前的线性变换,以避免丢失细节(通过“挤压”像素值分布)
  • 您不希望像素值的强度在每像素8位深度给出的值范围内,并且说您修改了图像的显示方式:这不是无损操作!
  • 如果您知道要增强的内容,那么有很多非线性转换可能会有所帮助

编辑:

16位均衡版本将“保持您的阴影更清晰”(不丢失细节),但是,当然,渲染图像将占用更多空间。这是一个比较:

8-bit vs. 16-bit equalization

我强烈建议您在2 ^ 16强度值范围内执行直方图归一化,以避免细节丢失。