2013-07-02 3 views
0

그래서 특정 회색 음영 이미지가 바이너리 파일로 있습니다. 이미지에서 빨간색이 나타나면 일련의 값을 한 값으로 바꾸고 나머지 행렬은 그대로 둡니다. 값 인식 및 바꾸기 matlab

는이 코드

if myimage < 20 
    myimage = 0; 
else if 20 < myimage <40 
     myimage = 20; 
    else if 40 < myimage < 60 
      myimage = 40; 
     else if 60<myimage<80 
       myimage = 60; 
      end 
     end 
    end 
end 

을 사용하지만 어떤 이유로 이미지를로드하지 못했습니다. 일부 디버깅 후 나는 "else if 20 ...."행 다음에 파일이 "20"값을 가진 1 x 1 행렬이되었다는 것을 알아 냈습니다. 아무도 정확히 왜 이런 일이 일어나는지 알아낼 수 있습니까? 감사.

+3

변수'myimage'는 값의 행렬이고, 여러분이 여기서하는 일은 그것을 스칼라로 다루는 것입니다. 귀하의 비교 표현과 과제 문장은 귀하가 기대하는대로 행동하지 않습니다. 대신에 특정 요소의 인덱스를 찾고 변경해야합니다. [MATLAB의 행렬 색인 생성] (http://www.mathworks.com/help/matlab/math/matrix-indexing.html)에 대한 자세한 내용을 읽고 거기에서부터 작업해야합니다. –

+0

이미지를 반복하여 myimage (X, Y) <20과 같이 처리해야합니까? – user2475404

+0

예, 좋은 시작입니다. 귀하의 경우에는 다음과 같이 생각하십시오 : 20 * floor (myimage/20);, 전체 이미지를 한 번에 처리 할 수 ​​있습니다. – Peter

답변

0

myimage에서 특정 값을 갖는 특정 색인을 변경해야합니다. 당신이 현재 호출하는 방식으로 myimage 변수를 특정 값으로 덮어 쓰는 것입니다. 모든 관련 인덱스를 찾을 수있는 한 가지 방법은 찾기 함께 :

myimage을 관심의 인덱스를 참조 찾아 한 라이너로 모든 값을 대체하기 위해 find(myimage==20)

:

myimage(find(myimage<20))=0;

복수 인덱스의 집합 (예를 들어 값> 20 AND < 40), 사용이 교차 결합 :

myimage(intersect(find(myimage>20),find(myimage<40)))=20;

+0

위의 @ EitanT의 주석에서 볼 수 있듯이 색인 생성에서 '찾기'호출은 중복됩니다. –

+0

두 가지 동시 조건의 경우 올바른 호출은 무엇입니까? 예 : myimage> 20 AND myimage <40? – jbrown

+0

'myimage (20