问候,我正在尝试找到一种简单的方法来处理图像,以便我可以将其质量从 8 位降低到 3 位。
实现这一目标的最简单方法是什么?干杯
问候,我正在尝试找到一种简单的方法来处理图像,以便我可以将其质量从 8 位降低到 3 位。
实现这一目标的最简单方法是什么?干杯
如果要对其进行线性缩放,只需将每个像素值除以 255/7(即如果原始图像存储在矩阵 I 中,则让低分辨率图像 J = I/(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 文件可以存储 4 位类型)。
int8
是 Matlab 中的最小整数值。通过向右移动图像中任何像素的任何值,您只能使用 int8 中 8 位中的 3 位。
如果您有权访问Fixed-Point Toolbox,则可以使用numerictype
具有简单符号的对象:
T = numerictype(s,w)
引用。来自 Matlab 的手册:
T = numerictype(s,w) 创建具有定点:未指定缩放、有符号属性值 s 和字长 w 的 numerictype 对象。