2014-04-10 8 views
-3

연결된 구성 요소 (CC) 측면에서 이웃 (주어진 반경의 원)을 얻는 방법을 찾고 있습니다.연결된 구성 요소의 근처

주어진 연결된 구성 요소를 연결하는 연결된 구성 요소의 수의 수를 기반으로 원하는 것을 선택하고 싶습니다. 예를 들어,

의 경우, 빨간색 이웃의 양 때문에 녹색 CC를 빨간색으로 분류하는 것이 목적입니다. 사전에

enter image description here

감사합니다.

+2

프로그래밍에 관한 질문이 아닙니다. 이론을 연구하고 코드에 대한 질문으로 다시 돌아가십시오. –

답변

1

Matlab의 쉬운 방법은 regionprops 다음에 find을 사용하는 것입니다. 계산 바이너리 이미지 BW의 모든 CC의 경계 상자 :

BB_CC = reshape([CC_stats.BoundingBox],4,[]); 
idxCC_close = find((sqrt((BB_CC(2,:)-x0).^2+(BB_CC(1,:)-y0).^2)<r0) ... 
| (sqrt(((BB_CC(2,:)+BB_CC(4,:)-x0).^2+(BB_CC(1,:)-y0).^2)<r0) ... 
| (sqrt((BB_CC(2,:)-x0).^2+(BB_CC(1,:)+BB_CC(3,:)-y0).^2)<r0) ... 
| (sqrt(((BB_CC(2,:)+BB_CC(4,:)-x0).^2+(BB_CC(1,:)+BB_CC(3,:)-y0).^2)<r0)); 
: 다음

CC_stats = regionprops(BW, 'BoundingBox'); 

, [x0,y0]에서 반경 r0의 중심 원을 가정하면, 원의 (부분적으로) 모든 CC를 찾아

(편집 :) CC_stats.BoundingBox의 요소를 바꿔야합니다.이 변수는 모든 바운딩 상자의 기본 요소이므로 하나씩 차례대로 넣어야합니다.

쓸데 있지만, 기본적으로 원 안에 하나 이상의 모서리가있는 CC의 색인이 필요하므로 4 가지 테스트가 필요합니다.

마지막으로 CC 닫기의 수는 단지 length(idxCC_close)입니다.

+0

재미있는 아이디어입니다. CC_stats.BoundingBox (2)에 액세스하려고하면 다음과 같이 표시됩니다. "더 많은 참조 블록 뒤에 오는 인 다중 구조 요소에 대한 필드 참조가 오류입니다." 이 통계 (:, 1) .BoundingBox (2) "이 유형의 다중 수준 색인 생성에 필요한 스칼라 색인"이 표시됩니다. –

+0

@BrainMarker 죄송합니다, 제 대답을 편집합니다. 실제로 'CC_stats.BoundingBox'는 경계 상자 자체의 요소이므로 오류가 발생합니다. 나는 그 점을 잊어 버렸습니다 ... – Bentoy13

1

각 그룹의 중심을 구하여 원하는 구성 요소까지의 유클리드 거리가 반경보다 작거나 같은 연결된 구성 요소의 수를 계산할 수 있습니다.

CC = regionprops(BW, 'Centroid'); 
dist = squareform(pdist(cell2mat({CC(:).Centroid}'))); 

dist은 NxN 매트릭스가되며, 여기서 N은 연결된 구성 요소의 수입니다. dist(a,b)은 구성 요소 a과 구성 요소 b의 거리를 제공합니다 (dist(a,a)은 항상 0입니다).

componentIndex = 14; % Example 
numberOfNearest = nnz(dist(componentIndex ,:) <= radius) - 1; 
radius이 원 반경이다

하고 -1는 현재 구성 요소를 계산하지 않도록하는 것입니다

지금 당신은이 같은 가장 가까운 구성 요소의 수를 얻을 수 있습니다.

+0

이것은 훌륭합니다, 고마워요. –

관련 문제