2013-01-22 5 views
2

내 문제는 png 형식의 레이더 이미지가 있습니다. (미안하지만 동료가 독일 날씨 서비스의 저작권을 침해한다고 말하면서 이미지를 삭제해야했습니다.)이미지 라벨 및 matlab에서 centroid 찾기

나는 MATLAB에서 이미지를 읽고 싶습니다. 그런 다음 모든 구름을 읽고 각 구름에 고유 색인을 붙입니다. 즉, 특정 클라우드에 속한 각 픽셀에는 동일한 색인 i이 표시됩니다. 각 구름의 area(coa)의 중심을 계산하면 구름 사이의 거리를 한 코아에서 다른 코아까지 측정 할 수 있어야합니다.

내가 아는 비슷한 작업은 IDL에서 수행되었습니다. 나는 이것을 사용하려했지만 MATLAB에서이 모든 것을 할 수 있고 결과에 더 집중할 수 있다면 IDL을 배우는 데 시간을 허비하지 않고 훨씬 쉬울 것입니다.

그래서 점프하기 전에 모든 것이 MATLAB에서 가능한지 알고 싶습니다. 그렇다면 클라우드를 추출하여 레이블을 붙일 수있는 방법에 대해 약간의 안내를받을 수 있습니까?

+0

그 이미지에서 구름은 다음과 같습니다

여기에 아주 기본적인 코드 샘플입니까? –

+0

@AbidRahmanK - 이미지에서 볼 수있는 것은 모두 구름입니다. – Vikram

+0

오, 죄송합니다. 나는 내 마음 속에 구름의 모습이 아주 다르다. :). 어쨌든이 링크를 시도하십시오 : http://blogs.mathworks.com/steve/2006/06/02/cell-segmentation/ –

답변

3

관련성이있는 경우 노이즈를 줄이기 위해 먼저 임계 값 또는 중앙값 필터링과 같은 기본 이미지 분석을 수행하십시오. 그런 다음 bwlabel을 사용하여 각 클라우드에 고유 색인을 붙일 수 있습니다. 무게 중심을 찾으려면 reigonprops을 사용하십시오.

d=imread('u09q8.png'); 
bw = im2bw(d,0.1); % thereshold at 50% 
bw = bwareaopen(bw, 10); % Remove objects smaller than 10 pixels from binary image 
bw=bwlabel(bw); % label each cloud 
stats=regionprops(bw,'Centroid'); % find centroid coordinates of all labeled clouds 
+0

예, 저는 지분 정리를하고 싶습니다. 그리고 지역 계획은 너무 많은 도움이 될 수 있다고 생각합니다. 고마워. – Vikram

+0

와우 고마워요. 임계 값을 가진 결과 이미지와 각 클라우드에 표시된 가능한 라벨을 어떻게 볼 수 있을까요? – Vikram

+0

당신은'imagesc (bw)'를 사용할 수 있습니다. 이는 각 레이블을 색상 표 (colourap)가 주어진 다른 색상으로 색을 지정합니다 (기본값은'jet'입니다). – bla

1

예 가능합니다. 클라우드 검색과 관련하여 단계별 프로세스입니다. 사용하려는 알고리즘을 기반으로합니다. 시작할 수 있습니다 here.

1

물론입니다. 이것은 k-means clustering을 사용하여 수행 할 수 있습니다. imreadkmeans에 관해 읽을 수 있습니다. kmeans의 공식 문서에 나와있는 예제는 정확히 필요한 것을 보여줍니다. 예를 들어

, 당신은 5 구름으로 이미지를 클러스터링하려면 :

%// Read the image 
I = imread('clouds.png'); 
[y, x] = find(I);    %// Obtain all coordinates 
y = size(I, 1) - y + 1;  %// Adjust y-coordinates 
K = 5; 
[idx, c] = kmeans([x, y], K); %// Classify clouds into K clusters 

이제 idx 저장 해당 클러스터 인덱스와 c 저장 무게 중심의 좌표.

은 같은 것을 할 수 있고, 그 결과를 그리려면이 방법은 사전에 클러스터 K의 수를 미리 결정이 필요하다는

%// Plot results 
figure, hold on 
scatter(x, y, 5, idx)   %// Plot the clusters 
plot(c(:, 1), c(:, 2), 'r+') %// Plot centroids 
text(c(:, 1) + 10, c(:, 2), num2str((1:K)'), 'color', 'r') %// Plot cluster IDs 

참고. 또는 this tool을 사용하여 클러스터 수를 자동으로 감지 할 수 있습니다.

편집 : 저작권 침해로 인해 결과 이미지가 삭제되었습니다.

+1

감사합니다. 나는 지금 그것에있다. – Vikram

+0

@Vikram 귀하의 편의를 위해 예제를 추가했습니다. –

+0

감사합니다.그러나 이런 식으로 단지 클라우드를 클러스터 (클라우드 그룹)로 분할하는 반면 원하는 것은 개별 클라우드 (다른 클라우드와는 접촉하지 않음)를 분리하는 것입니다. – Vikram