2016-10-10 2 views
2

mat이라는 100x100 부울 매트릭스가 있습니다. 모든 셀은 다각형 영역의 연속 패치를 제외하고는 잘못된 값을 갖습니다. 행렬의 각 셀을 실행하고 정확한 셀을 찾아서이 다각형에 속한 셀을 읽을 수 있습니다.매트릭스에 포함 된 폴리곤 경계 및 기타 후 처리 기법

region_of_interest=false(size(mat)); 
for i=1:size(mat,1) 
    for j=1:size(mat,2) 
     if mat(i,j) 
      region_of_interest(i,j)=true; 
     end 
    end 
end 

이제 경계 셀만 저장하는 것처럼이 다각형을 처리하려고합니다. 이 작업을 수행하는 방법? 나는 각 다각형 셀을 방문하여 그 네 이웃이 다각형 안에 있는지 아닌지 보았다. 그러나 이것은 매우 효율적으로 보이지 않았습니다. 거기에 더 좋은 알고리즘이 있습니까?

이 시나리오에서 실행할 수있는 다른 후 처리 방법이있는 경우 제안하십시오. Matlab 이외의 제안도 환영합니다.

답변

0

이것은 파이썬도 볼록 - 선체 문제도 아닙니다.

그러나 폴리곤 내부의 경계 셀은 참이며 하나 이상의 이웃이 거짓이고 폴리곤 외부의 경계 셀이 거짓이며 하나 이상의 이웃이 참이라는 사실을 지적하고자합니다.

내외부 경계 셀을 원하는지, "이웃"인지를 결정하는 것은 당신에게 달려 있습니다. 예를 들어, 셀의 이웃들이 기본 방향의 네 이웃이거나 대각선 방향의 여덟 이웃입니까? 이 전자를 있다면, 당신은 여전히 ​​같은 경우에 셀에 2 셀 (1)에서 얻을 내가 아래에 설명하는 알고리즘을 사용하기 위해 팔 이웃을 검색해야합니다 다음

...XX 
...2X 
XX1XX 
XXXXX 

즉, 그것을 말했다되고 알고리즘을 작성하는 방법에 관한 데이터가 무엇인지에 달려 있습니다. 당신의 질문이 의미하는 것처럼 보이는 구멍이없는 연속적인 블록이 하나 있다는 것을 안다면, 경계 셀을 발견하면 다시 첫 번째 셀을 찾을 때까지 경계를 따라 가면됩니다. 따라서 다음 경계 셀을 찾을 때까지 이웃을 검색 한 다음 다시 수행하십시오.

문제는 첫 번째 경계 셀을 찾는 것입니다.

한 가지 방법은 패치 내에서 셀을 찾을 때까지 무작위로 검색 한 다음 경계를 찾을 때까지 어떤 방향 으로든 걷는 것입니다.

위에서 설명한 것과 동일한 첫 번째 셀을 찾을 때까지 일종의 균일 한 검색을 수행하는 것이 좋습니다. 패치 크기가 항상 x- 셀 이상인 경우 패치 크기를 기준으로 그리드 크기를 조정할 수 있습니다.

자세한 정보가 없으면 이러한 아이디어는 최소한 솔루션을 찾는 데 도움이됩니다. 행운을 빕니다!