2017-10-12 116 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