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
如果可行,您能检查一下它与您的代码有何不同吗?
我有一个图像(矩阵),它的值是 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
如果可行,您能检查一下它与您的代码有何不同吗?