2017-12-04 2 views
0

주석 512x512x3 지문 이미지가 있으며 이미지의 루프 및 델타 위치입니다. 빨간색은 루프를 나타내고 파란색은 델타를 나타냅니다.MATLAB의 별도 배열에서 인접 요소 그룹화

Red denotes loop, blue denotes delta.

나는이 점의 위치를 ​​찾아야합니다. impixel()을 사용하여이 작업을 수행 할 수 있지만 더 자동화 된 접근 방식이 필요했습니다.

x=[]; 
y=[]; 
for i = 1:512 
    for j = 1:512 
     marked = im(i,j,:); 
     if marked(:,:,1)==255 
      x=[x i]; 
      y=[y j]; 
     end 
    end 
end 
x = unique(x); 
y = unique(y); 

과 붉은 색은 루프의 위치에있는 픽셀의 위치를 ​​가지고 :

나는 다음을했다.

내 배열 y 이런 모든 적색 화소의 Y 좌표 값을 보유하고있다 : 언뜻

[116 117 118 119 120 121 122 191 192 193 194 195 196 197] 

, 그것의 값은 두 개의 적색 점, 2 개의 그룹으로 그룹화 될 수 있다는 것을 알 수있다. 그러나 값을 두 그룹으로 나누는 방법을 확신 할 수 없습니다. 값의 평균을 사용하여 임계 값을 만드는 방법에 대해 생각했지만 점이 가까이에 있으면 작동하지 않을 수 있습니다.

도움이 될 것입니다.

답변

0

당신이 많은 붉은 점 (예 2)에있을 것입니다 방법을 미리 알고 있다면, 당신은 사용할 수 kmeans -

y_groups = kmeans(y',2); 

당신이 그룹의 수를 알 수없는 경우, 다음의 경우 포인트 항상 동일한 수의 픽셀을 포함, 당신이 그에서 그것을 밖으로 일할 수있는 -의 예에서 우리는 각 그룹의 평균을 얻기 위해 나중에 루프를 추가 할 수 있도록

npts = numel(y)/7; 
y_groups = kmeans(y',npts); 

포인트 당 7 개 픽셀이있다 (많은있다 grpstats와 같은 다른 방법을 찾아 볼 수도 있습니다) :

y_means = NaN(npts,1); 
for I = 1:npts 
    y_means(I) = mean(y(y_groups == I)); 
end