如何在 MATLAB 中重新量化图像的动态范围?
-
12-11-2019 - |
题
我需要根据以下像素值转换统一重新量化图像的动态范围:
Pixel Value: Quantized Value
0 - 64 : 31
65 - 128 : 95
129 - 192 : 159
193 - 255 : 223
我想用量化值替换上述范围内的所有像素值。我如何在 MATLAB 中编写此代码?
解决方案
一种方法是使用 逻辑索引. 。给定一个图像矩阵 img
(这可能是 2-D 灰度或 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,因为您需要从 1 到 256 的索引。然后,您需要将生成的图像矩阵转换回类 uint8
.
不隶属于 StackOverflow