问候, 我试图找到一种简单的方法来操作图像,这样我就可以将它的质量从8位降低到3位。
实现这一目标最简单的方法是什么? 干杯
答案 0 :(得分:4)
如果要对其进行线性缩放,只需将每个像素值除以255/7(即如果原始图像存储在矩阵I中,则让低分辨率图像J = I /(255/7))。
更新:由于我的缩放常数错误。
以下是一个例子:
答案 1 :(得分: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 )。
答案 2 :(得分:1)
int8
是Matlab中最小的整数值。通过向右移动图像中任何像素的任何值,您只能在int8中使用8位中的3位。
如果您可以访问定点工具箱,则可以使用简单表示法使用numerictype
个对象:
T = numerictype(s,w)
相关链接。来自Matlab的手册:
T = numerictype(s,w)创建一个 带定点的numerictype对象: 未指定的缩放,签名属性 值s和字长w。