2017-10-12 91 views
0

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

是否有任何其他方式将图像写入bin文件,并在2个字节上显示正确的值?

回答

1

你可以运行这段代码并验证它在你的系统上工作吗?

%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 

如果这样做,你能检查它与你的代码不同吗?

+0

奇怪......它似乎有效......它也与'ushort'一起工作......但它不能与'integer * 2'一起使用,也许它确实是签名/未签名的问题......谢谢 – sop