2013-01-17 84 views
5

我有一個二進制帶順序(1波段,BSQ文件),它是一個無符號的16位(2字節)整數。MATLAB:讀取無符號16位二進制文​​件的兩個字節

目前我通過multibandread閱讀整個(圖片):

img=multibandread('IMAGE.bsq',[400 400 1],'uint16',0,'bsq','n'); 

在MATLAB什麼樣的過程,讓我讀單獨兩個字節?即我想在MATLAB中將文件讀入2個新數組中,例如byte1(400x400x1)和byte2(400x400x1)。

這可以通過fread來實現嗎?我在'精確'部分注意到可以跳過源值(例如'N*source=>output'),但我不確定確切的過程。

+0

你有沒有嘗試指定''uint8''而不是''uint16'',獲得結果,然後將它分成兩個圖像?或者,也可以使用按位運算將當前結果拆分爲兩個圖像? –

+0

我需要從'uint16'數組中提取兩個字節 - 會讀取爲'uint8'達到這個目的嗎? (我對第二個字節包含的數據更感興趣) – MBL

回答

4

一種方法是將您當前的img與按位操作分開。該LSB的形象將是:

img1 = bitand(img, 255); %// 0x00FF 

與MSB的形象將是:

img2 = bitsra(img, 8); 

不是強制性的,但也許你還需要將這些轉換爲uint8 S:

img1 = uint8(img1); 
img2 = uint8(img2); 
+2

'img2 = bitsra(img,8);'會更好。 –

+2

這似乎已經做到了。我只對真正感興趣的MSB看起來像使用'img1 = bitand(A,255);它具有合理的值; %// 0x00FF'。乾杯 – MBL

+0

@BenVoigt感謝您的更正! –

相關問題