2012-11-02 2 views
1

내가 M1 순서의 2 차원 배열입니다 코드 여기matlab에 오류 동안

m1 = imread('owl','pgm'); 
for x = 1:size(m1,1) 
    for y = 1:size(m1,2) 
     m1(x,y) = log10(m1(x,y)); 
    end 
end 

다음 사용하여 MATLAB에서 이미지의 각 픽셀의 base 10log을 찾기 위해 노력하고 221 X 201 하지만, 이 오류

??? Undefined function or method 'log2' for input arguments of type 'uint8'. 

Error in ==> log10 at 20 
y = log2(x); 

Error in ==> q2 at 38 
     m1(x,y) = log10(m1(x,y)); 

에 직면하지만이 기능을 로그인 디버깅 할 때 다음과 같은 코드를 사용하고

fprintf('log of 190 is %d', log10(190)); 
,

루프에서 동일한 코드를 사용했을 때 어떤 일이 발생했는지 알지 못해서 올바른 결과를 얻을 수 있습니다.

답변

3

오류 메시지가 표시되면 함수를 uint8 유형의 값에 적용하려고 시도했지만 해당 함수 유형에 해당 함수가 정의되어 있지 않습니다. 당신이 깨닫지 못했던 것은 imread입니다. 이미지 파일이 특정 기준을 만족하면 (그 기준이 무엇인지 문서를 읽으십시오) 픽셀 데이터를 uint8의 실제 수치가 아닌 배열로 캡처합니다.

당신이 더 간단 같은 입력을 취하거나 자신의 로그 함수를 정의해야합니다 중 하나 uint8의 로그를 취하려면

log10가 만족하는 유형으로 uint8를 캐스팅. 예를 들어, 당신이 쓸 수 :

log10(double(m1(x,y))) 

를 그리고 명령 log10(190) 매트랩 실행할 때 진단 검사가 유용 당신이 아무 말도하지 않았다 왜 지금 당신이 실현거야, 기본적으로 190이의 것을 결정한다 double을 입력하고 불만없이 로그를 계산합니다. log10(uint8(190))는 다른 이야기를합니다.