gpt4 book ai didi

matlab - 为什么 MATLABs "imwrite"缩放 12 位图像以及如何避免这种情况?

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:22 24 4
gpt4 key购买 nike

我有一个图像作为 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}

因此,对于 uint16 数据,它将通过位移 bitshift(data,-4); 应用 65535/maxval 的比例来重新缩放数据; 。您不希望它重新缩放数据,但您还希望它以 12 位格式写入文件(这发生在 writepnm>write_raw_data 中。解决方法是在调用之前应用相反的比例 imwrite:

Iscaled = uint16(double(I)*(2^16-1)/(2^12-1))
imwrite(Iscaled,'test.pgm','MaxValue',2^12-1)

请注意,根据上面代码注释中的表格,您也可以使用在 [0,1] 之间缩放的 double 值。

阅读 12 位 PGM/PPM,请参阅 here .

关于matlab - 为什么 MATLABs "imwrite"缩放 12 位图像以及如何避免这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27487816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com