【问题标题】:MATLAB Greyscale 12 bit to 8 bitMATLAB 灰度 12 位到 8 位
【发布时间】:2015-03-24 06:30:17
【问题描述】:

我正在尝试创建一种算法来将灰度从 12 位转换为 8 位。

我得到了一个像这样的灰度:

比例以矩阵表示。问题是,与 1/16 的简单乘法会破坏第一个灰色列。

这里是代码示例:

in =[
    1 1 1 3 3 3 15 15 15 63 63 63;
    1 1 1 3 3 3 15 15 15 63 63 63;
    1 1 1 3 3 3 15 15 15 63 63 63; 
    1 1 1 3 3 3 15 15 15 63 63 63
];   
[zeilen spalten] = size(in); 

eight = round(in/16);   
imshow(uint8(eight));

Destroy 意味着,新列现在是黑色的

【问题讨论】:

  • 你说的“破坏”是什么意思?
  • 12 位到 8 位,反之亦然?你的标题说明了一件事,而问题说明了相反。
  • 对不起,我错了,12到8
  • 如果您提供您使用的确切代码行会更容易提供帮助

标签: image matlab image-processing


【解决方案1】:

只需重新缩放图像,以便将每个元素除以对应于 12 位(或2^12 - 1 = 4095)无符号整数的最大可能强度,然后乘以对应于 8 位无符号整数的最大可能强度整数(或2^8 - 1 = 255)。

因此:

out = uint8((255.0/4095.0)*(double(in)));

您需要转换为double以确保在执行此缩放时保持浮点精度,然后转换为uint8以确保图像类型为8位。你已经巧妙地推断出这个比例因子大约是 (1/16)(因为255.0/4095.0 ~ 1/16)。但是,您的测试图像的输出将其前 6 列肯定为零,因为 12 位图像的强度 1 和 3 太小而无法以等效的 8 位形式表示,这就是它得到的原因向下舍入为 0。如果您考虑一下,对于 12 位图像的强度每增加 16 次,这将记录为 8 位图像的等效单次强度增加,或者:

12-bit --> 8-bit
   0   -->   0
   15  -->   1
   31  -->   2
   47  -->   3
   63  -->   4
   ... --> ...
  4095 --> 255

由于您的 1 和 3 的值不足以进入下一个级别,因此将它们向下舍入为 0。但是,您的 15 的值被映射到 1,而 63 的值被映射到 4,这当您在测试输入上运行上述代码时,这是我们所期望的。

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 2015-07-01
    • 1970-01-01
    • 2019-08-27
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    相关资源
    最近更新 更多