2017-05-01 12 views
3

이미지의 전경을 표시하는 바이너리 마스크가 있습니다. 히스토그램 평형화 또는 otsu 방법과 같은 많은 이미지 처리 알고리즘이 전체 이미지를 처리합니다. 제 질문은 그 이미지 처리 알고리즘을 적용하여 내 바이너리 마스크가 레이블링 한 영역 만 처리 할 수있는 방법입니다. 예 : I은 회색 음영 이미지이고 BW은 이진 마스크입니다. 아래 코드는 BW 마스크로 표시된 특정 영역이 아닌 전체 이미지를 계속 처리합니다.Matlab의 바이너리 마스크를 기반으로 레이블이 지정된 ROI에 이미지 처리 알고리즘을 적용하는 방법은 무엇입니까?

level = graythresh(I.*BW); 
BW = im2bw(I.*BW,level); 

답변

1

코드의 문제점은 이미지의 요소를 0으로 설정한다는 것입니다. 대신, 관심있는 복셀을 grayscale 알고리즘에만 전달해야합니다. BW는 투자 수익 (ROI)에 0이 아니면 예를 들어, 당신은 당신이 임계 값 계산에 원하는 요소 만 선택됩니다

level = graythresh(I(BW>0)); 

을 말할 수있다. 보통 (인덱스의 종류가 소위 인) 논리 인덱스를 사용하는 것보다 느리다 - 그것은

level = graythresh(I(find(BW>0))); 

식의 두 번째 형태는 지표와 중간 배열을 생성 대한 속기.

+1

자세한 내용은 [논리 색인 생성] (https://nl.mathworks.com/help/matlab/math/matrix-indexing.html#bq7egb6-1)을 참조하십시오. – m7913d

0

@SimaGuanxing은 또한 다음으로 동일하게 얻을 수 있습니다

수준 = graythresh (I (BW));

하지만 BW가 논리적 값을 가진 항목과 동일한 크기의 매트릭스인지 확인해야합니다.