Matlab fwrite 饱和度

Matlab fwrite saturation

我有一个图像(矩阵),它的值是 16 位,介于 0 和 65535 之间,我想将它写入二进制文件,所以我使用 fwrite,正如它在我尝试使用不同的精度将数据写入 2 个字节('integer*2''uint16' 等)的文档,但数据似乎在 15 位上饱和,即最大值是0x7ff,如果我使用更多字节,比方说 4,数据到达完整,值大于 0x7ff 且小于 0xffff。我在文档中读到 fwrite 使值饱和,因此不会有 Inf 或 NaN,这是否意味着我可以写 x 字节,只有 (x*8 - 1) 位?!?

有没有其他方法可以将图像写入具有 2 个字节正确值的 bin 文件?

你能运行这个代码并验证它在你的系统上工作吗?

%generate and show data
IM = uint16(((2^16)-1) .* rand(512));
imagesc(IM);axis image;colorbar
%write data
fid=fopen('image.dat','w');
fwrite(fid,IM(:),'uint16');
fclose(fid);
%read data
fid=fopen('image.dat','r');
IM2=fread(fid,inf,'*uint16');
fclose(fid);
IM2=reshape(IM2,512,512);
%check if they are equal
all(IM(:)==IM2(:))

>> 1

如果可行,您能检查一下它与您的代码有何不同吗?