【问题标题】:Convert 8-bit grayscale image to 7-bit grayscale image将 8 位灰度图像转换为 7 位灰度图像
【发布时间】:2017-09-24 11:48:46
【问题描述】:

我想将我原来的 8 位深度灰度图像转换为 7 位深度灰度图像(像素值应在[0 127] 范围内。

我使用以下语法,但是值等于255 的像素将更改为128(似乎它们在除法后被四舍五入,即127.5 更改为128)。如何解决此问题并在除法后将像素值保持在[0 127] 范围内?

RGB = imread('camera_man128x128.png')% read 8-bit image
RGB = RGB*0.5; %change pixel value to be in range to 0~127
               %however pixels with value 255 change to 128.

【问题讨论】:

  • MATLAB 中不能有 7 位数据类型。不过,您可以将数据重新缩放为 0-127 整数。你想要吗?
  • @SardarUsama 是的,这不对。我想将值存储在unit8 中,但我只想将数据比例从 0~127 更改。
  • 取整数据,或除以除法后数据中的最大值并乘以 127
  • 请编辑您的问题以包含您在上一条评论中提供的信息并删除模棱两可的术语“7-bit”

标签: image matlab grayscale


【解决方案1】:

最简单的方法是使用bitshift:

RGB = bitshift(RGB, -1);

这会将每个uint8 值的位模式向右移动一个,相当于乘以2-1(即除以2),这样255 将变为127 .

【讨论】:

    【解决方案2】:

    将您的数据类型转换为double,然后乘以 0.5。使用floor 向负无穷大舍入,然后转换回uint8。

    RGB = uint8(floor(double(RGB)*0.5));
    

    【讨论】:

      猜你喜欢
      • 2013-01-06
      • 2020-05-07
      • 2017-01-17
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2015-08-11
      • 2012-03-30
      相关资源
      最近更新 更多