2013-01-17 3 views
5

부호없는 16 비트 (2 바이트) 정수인 이진수 밴드 순차 (1 밴드, BSQ 파일)가 있습니다.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

''uint16 '대신에''uint8' '을 지정하려고 했습니까? 결과를 얻은 다음 두 개의 이미지로 나눕니까? 또는 양자 택일로 비트 연산을 사용하여 현재 결과를 두 개의 이미지로 분할합니까? –

+0

'uint16' 배열에서 두 바이트를 모두 추출해야합니다. (나는 두 번째 바이트에 포함 된 데이터에 더 관심이있다.) – MBL

답변

4

한 가지 방법은 현재 img을 비트 연산으로 분할하는 것입니다.

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

과 MSB 이미지는 다음과 같습니다 : LSB는 이미지가 될 것

img2 = bitsra(img, 8); 

필수 아니,하지만 어쩌면 당신은 또한 uint8의에이를 변환 할 수 있습니다 :

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

'img2 = bitsra (img, 8);'더 좋을 것이다. –

+2

그걸 한 것처럼 보입니다. 나는 MSB에 대해서만 관심이있다. imb1 = bitand (A, 255); % // 0x00FF'입니다. 환호 – MBL

+0

@BenVoigt 정정을 보내 주셔서 감사합니다! –

관련 문제