2014-01-29 5 views
-1

비트 스케일 이미지를 만들려고합니다. 이 코드에 오류가 발생했습니다. 뭐가 잘못 되었 니?인덱스가 numel 때문에 경계를 벗어났습니다.

clc 
clear all 
a=imread('image.tif');%read file 


[row col]=size(a);%row of image and column of image 
b=zeros(row,col,8);%3D 0 matrix 

for k=1:8%position of bit 
    for i=1:row%for every row 
     for j=1:col%for every column 
      bits = de2bi(a(i,j)); 
      b(i,j,k)=bits(k); 
     end%endFor 
    end%endFor 
end%endFor 

for k=1:8 
    subplot(3,3,k); 
    imshow(b(:,:,k)); 
    title(strcat(num2str(k),'. bit')); 
end%endFor 

오류 : ??? 비트 (2)에 액세스하려고 시도했습니다. numel (bits) = 1이기 때문에 범위를 벗어난 색인.

==> soru1 at 13 b (i, j, k) = bits (k); 코드 줄에서

+0

은 * 행 번호와 스택 추적 *를 포함하여, 질문에 오류를 복사하시기 바랍니다. 또한 문제를 재현하는 데이 코드가 모두 필요합니까? (나는 그것을 복제하기 위해'clc'도'clear all'도 필요하지 않다고 생각한다). –

+0

'dec2bi' 란 무엇입니까? – chappjc

+0

de2bi는이 코드에서 [1,0,0,0,1,1,1,1]과 같은 벡터를 반환합니다. – user3246425

답변

2

:

bits = de2bi(a(i,j));

당신은 "I, J"의 픽셀의 값에 de2bi을 요구하고있다. 열고있는 이미지가 uint8 유형이라고 가정하면 a(i,j) 값은 0에서 255 사이의 값일 수 있습니다.이 값이 0 또는 1 인 경우 de2bi의 출력은 "0"또는 "1"입니다. 즉, 요소가 하나만 있고 두 번째 존재하지 않는 요소에 액세스 할 수 없습니다. 사실에서

bits = de2bi(a(i,j),8)

:

는이 문제를 해결하려면, 당신은 두 번째 입력을 사용하여 수행 할 수 있습니다 당신이 필요로하는 크기, 이렇게 될 de2bi의 출력의 크기를 강제 할 필요가 루프는 대부분의 MATLAB 함수와 같은 입력으로 단지 하나의 번호를 벡터 나 행렬을 처리 할 수 ​​de2bi 때문에 필요하지 않습니다 :

a=imread('image.tif'); 
b=de2bi(a); 
b = reshape(de2bi,[size(a),8]); 
+0

귀하의 답변을 시도하고 있습니다. 실행 중입니다. – user3246425

+1

'bits = de2bi (a (i, j), 8)'는 배열을 오른쪽으로 0으로 채 웁니다. 세 번째 인수를 왼쪽에서 채우기 위해 'left-msb'로 설정하십시오. –

관련 문제