如何在 MATLAB 中重新量化图像的动态范围?

发布于 2024-11-07 01:53:05 字数 202 浏览 0 评论 0原文

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

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

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

I need to uniformly re-quantize the dynamic range of an image based on the following pixel value conversions:

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

I want to replace all the pixel values in the above ranges with the quantized values. How can I code this in MATLAB?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

地狱即天堂 2024-11-14 01:53:05

一种方法是使用逻辑索引。给定一个图像矩阵 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

One way is to use logical indexing. Given a image matrix img (which could be 2-D grayscale or 3-D RGB), this will replace all your values:

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

Another option is to create a 256-element look-up table and use the values in your image as indices into this table:

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

Note that with this solution you will have to be mindful of the class of your image matrix. Many images are of class uint8, spanning values 0 to 255. To use these values as an index you have to convert them to a class that can store larger integers (like double) to avoid saturation at the maximum value of 255, then add one since you need an index from 1 to 256. You would then want to convert the resulting image matrix back to class uint8.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文