jol*_*olo 4 matlab png image-processing
我有一个图像作为一个N x M矩阵与12位数据,我想用来imwrite将图像保存为.pgm文件.
为什么MATLAB将图像缩放到16位?我怎么能绕过这个呢?
使用该'MaxValue'参数似乎也会改变图像,因为之后无法正确显示,例如在IrfanView中.
该MaxValue参数有点直观.它确实指定写入标记有特定深度的最大值的PGM(例如,此处为12位),但它也告知iwwrite重新缩放数据.重新缩放发生在writepnm>remap_pixel_values:
function newdata = remap_pixel_values(data, maxval)
%REMAP_PIXEL_VALUES Remap pixel values in array of pixel values.
%
% NEWDATA = REMAP_PIXEL_VALUES(DATA, MAXVAL) remaps the pixel values in
% DATA as follows
%
% Class of DATA Input Output
% ------------- ----- ------
% uint8 The set {0,1,...,255} The set {0,1,...,maxval}
% uint16 The set {0,1,...,65535} The set {0,1,...,maxval}
% double The interval [0,1] The set {0,1,...,maxval}
Run Code Online (Sandbox Code Playgroud)
因此,对于uint16数据,它将通过应用65535/maxval比特移位的比例来重新调整数据bitshift(data,-4);.您不希望它重新缩放数据,但您还希望它将文件写为12位(这种情况发生在writepnm>write_raw_data.解决方法是在调用之前应用相反的比例imwrite:
Iscaled = uint16(double(I)*(2^16-1)/(2^12-1))
imwrite(Iscaled,'test.pgm','MaxValue',2^12-1)
Run Code Online (Sandbox Code Playgroud)
请注意,根据上面代码注释中的表,您也可以使用在[0,1]之间缩放的double值.
有关读取 12位PGM/PPM的信息,请参见此处.
| 归档时间: |
|
| 查看次数: |
987 次 |
| 最近记录: |