【问题标题】:How can I re-quantize the dynamic range of an image in MATLAB?如何在 MATLAB 中重新量化图像的动态范围?
【发布时间】:2011-05-12 20:38:08
【问题描述】:

我需要根据以下像素值转换统一重新量化图像的动态范围:

Pixel Value: Quantized Value
0 - 64     : 31
65 - 128   : 95
129 - 192  : 159
193 - 255  : 223

我想用量化值替换上述范围内的所有像素值。如何在 MATLAB 中编写代码?

【问题讨论】:

  • 我注意到一件小事:您的范围不涵盖相同数量的像素值。如果您希望每个范围有 64 个像素值,则应使用以下限制:0-63、64-127、128-191 和 192-255。
  • 哦,谢谢。我还有另一个问题。我想计算每个强度值出现在图像中的概率。 Matlab中有没有办法可以确定?比如 31 出现了多少次,95 出现了多少次,等等……
  • @user730255:看起来你已经得到了答案here。 ;)
  • 啊哈哈,是的。这很有帮助,你也是!非常感谢,先生。

标签: matlab image-processing quantization


【解决方案1】:

一种方法是使用logical indexing。给定一个图像矩阵img(可能是2-D grayscale or 3-D RGB),这将替换您的所有值:

img(img >= 0 & img <= 64) = 31;
img(img >= 65 & img <= 128) = 95;
img(img >= 129 & img <= 192) = 159;
img(img >= 193 & img <= 255) = 223;

另一种选择是创建一个包含 256 个元素的查找表,并将图像中的值用作该表的索引:

lookupTable = [31.*ones(1,65) 95.*ones(1,64) 159.*ones(1,64) 223.*ones(1,63)];
img = uint8(lookupTable(double(img)+1));

请注意,使用此解决方案时,您必须注意图像矩阵的类别。许多图像属于uint8 类,跨越值 0 到 255。要将这些值用作索引,您必须将它们转换为可以存储更大整数的类(如 double)以避免在最大值 255 处饱和,然后添加一个,因为您需要一个从 1 到 256 的索引。然后您需要将生成的图像矩阵转换回类 uint8

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    相关资源
    最近更新 更多