【问题标题】:decreasing the quality of an image under Matlab在 Matlab 下降低图像质量
【发布时间】:2010-12-03 21:24:06
【问题描述】:

您好, 我正在尝试找到一种简单的方法来处理图像,以便可以将其质量从 8 位降低到 3 位。

实现这一目标的最简单方法是什么? 干杯

【问题讨论】:

    标签: image matlab image-processing compression resolution


    【解决方案1】:

    如果要对其进行线性缩放,只需将每个像素值除以 255/7(即如果原始图像存储在矩阵 I 中,则让低分辨率图像 J = I/(255/7))。

    更新:由于我的缩放常数有误。

    这是一个例子:

    【讨论】:

    • uint8 的最大值为 255,您将得到四舍五入的值 8,它使用 4 位。要获得 0 到 7 的范围,您必须除以 (255/7)。
    【解决方案2】:

    如果您的图像在 MATLAB 中存储为 uint8 类型,则像素值的范围为 0 到 255。将值限制为仅 3 位精度(因此仅使用数字 0 到 7 ),您可以按以下示例缩放数据:

    >> data = uint8([0 23 128 200 255]);  % Create some data of type uint8
    >> scaledData = data*(7/255)
    
    scaledData =
    
        0    1    4    5    7
    
    >> class(scaledData)
    
    ans =
    
    uint8
    

    请注意,即使缩放值限制在 0 到 7 的范围内,存储它们的变量仍然是 uint8 数据类型,因为这是 MATLAB 将使用的最小数据类型。未使用的高位只是 0。

    根据您将缩放后的图像数据输出到文件的方式(如果您想这样做),您可以将存储值的精度降低到小于 8 位(例如,PNG files can store 4-bit types)。

    【讨论】:

      【解决方案3】:

      int8 是 Matlab 中的最小整数值。通过右移图像中任何像素的任何值,您只能使用 int8 中 8 位中的 3 位。

      如果您有权访问 Fixed-Point Toolbox,则可以使用带有简单符号的 numerictype 对象:

      T = numerictype(s,w)
      

      城市。来自 Matlab 的手册:

      T = numerictype(s,w) 创建一个 带定点的 numerictype 对象: 未指定缩放,有符号属性 值 s,字长 w。

      【讨论】:

        猜你喜欢
        • 2019-08-23
        • 2017-08-03
        • 1970-01-01
        • 2016-06-06
        • 2010-11-12
        • 2012-11-07
        • 1970-01-01
        • 1970-01-01
        • 2016-02-09
        相关资源
        最近更新 更多