3

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

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

4

3 回答 3

4

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

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

这是一个例子:

结果

于 2009-10-05T14:19:02.853 回答
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 文件可以存储 4 位类型)。

于 2009-10-05T15:09:06.240 回答
1

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

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

T = numerictype(s,w)

引用。来自 Matlab 的手册:

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

于 2009-10-05T09:32:52.427 回答