【发布时间】:2010-12-03 21:24:06
【问题描述】:
您好, 我正在尝试找到一种简单的方法来处理图像,以便可以将其质量从 8 位降低到 3 位。
实现这一目标的最简单方法是什么? 干杯
【问题讨论】:
标签: image matlab image-processing compression resolution
您好, 我正在尝试找到一种简单的方法来处理图像,以便可以将其质量从 8 位降低到 3 位。
实现这一目标的最简单方法是什么? 干杯
【问题讨论】:
标签: image matlab image-processing compression resolution
如果要对其进行线性缩放,只需将每个像素值除以 255/7(即如果原始图像存储在矩阵 I 中,则让低分辨率图像 J = I/(255/7))。
更新:由于我的缩放常数有误。
这是一个例子:
【讨论】:
uint8 的最大值为 255,您将得到四舍五入的值 8,它使用 4 位。要获得 0 到 7 的范围,您必须除以 (255/7)。
如果您的图像在 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)。
【讨论】:
int8 是 Matlab 中的最小整数值。通过右移图像中任何像素的任何值,您只能使用 int8 中 8 位中的 3 位。
如果您有权访问 Fixed-Point Toolbox,则可以使用带有简单符号的 numerictype 对象:
T = numerictype(s,w)
城市。来自 Matlab 的手册:
T = numerictype(s,w) 创建一个 带定点的 numerictype 对象: 未指定缩放,有符号属性 值 s,字长 w。
【讨论】: