2013-01-17 18 views
5

İmzasız bir 16 bitlik (2 baytlık) tamsayı olan bir ikili Bant Sırası (1-bant, BSQ dosyası) var.MATLAB: İmzasız bir 16 bitlik ikili dosyanın her iki baytının okunması

Şu anda multibandread aracılığıyla bütün (görüntü) okuyorum:

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

MATLAB'ta hangi süreci beni hem bireysel olarak bayt okuma olanağı sağlayacak? yani, dosyayı MATLAB'de 2 yeni dizide okumak istiyorum, örn. bayt1 (400x400x1) ve bayt2 (400x400x1).

Bu, fread aracılığıyla başarılabilir mi? 'Kesinlik' bölümünde, kaynak değerlerini atlamak mümkündür (ör. 'N*source=>output'), ancak kesin işlemden emin değilim.

+0

“Uint16” yerine “uint8” yi belirterek, sonucu elde edip sonra iki görüntüye böldün mü? Ya da alternatif olarak bitmiş işlemleri kullanarak mevcut sonucunuzu iki görüntüye ayırmak? –

+0

'uint16' dizisinden her iki bayttan birini ayıklamam gerekiyor - bunu uint8 'olarak okuyordum? (İkinci baytta bulunan verilerle daha çok ilgileniyorum) – MBL

cevap

4

Tek yol, geçerli img öğelerinizi bitly işlemleri ile bölüyor olabilir.

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

MSB görüntü olurdu: LSB görüntü olurdu

img2 = bitsra(img, 8); 

zorunlu değil, ama belki de uint8 s içine bu dönüştürmek isteyeceksiniz:

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

'img2 = bitsra (img, 8);' daha iyi olurdu. –

+2

Bunu yapmış görünüyor. Ben sadece MSB ile ilgileniyorum, 'img1 = bitand (A, 255) kullanarak makul değerlerle geliyor gibi görünüyor; % // 0x00FF'. Alkış – MBL

+0

@BenVoigt Düzeltme için teşekkürler! –