2013-07-19 2 views
2

저는 matlab에 새로 입문했지만 상황을 잘 알고 있습니다. 나는 바다의 위성 이미지를 가지고있다. 약간의 땅과 약간의 보트가있다. thresholding을 사용하여 바이너리 마스크와 bwlabel을 만들었지 만 물 위에서 보트와 일치하는 레이블 집합을 만들었습니다. 당신은 이미지에서 볼 수 있듯이이미지의 특정 부분을 분석하는 MATLAB

enter image description here

은 레이블이 일부 디머뿐만 아니라 보트를 포함 : 당신이 무슨 뜻인지 볼 수 있도록 여기에 보트 (토지)를 통해 라벨의 중첩 된 이미지입니다 그들 중 어느 쪽이든 사이드 로브. 사이드 로브가 아닌 보트 만 커버 할 수있는 새로운 라벨 세트를 만드는 방법을 찾아야합니다. 다양한 밝기의 보트가있는 이미지가 많기 때문에 더 밝은 경계점을 사용할 수는 없습니다. 그 중 일부는 다른 보트의 사이드 로브보다 어둡게 보일 것입니다.

그래서 나는이 이미지에서 컬러 섹션을 추출하고, 개별 세그먼트를 thresholding하거나 히스토그램 또는 기타를 사용하여 새로운 레이블 세트를 만드는 방법으로이를 분석하는 방법이 있는지 묻고 싶습니다. 원래의 이미지를 그대로 유지하면서 원래의 이미지 위에 다시 붙일 수 있도록이 새로운 레이블의 위치를 ​​그대로 유지합니다. 그렇다면 어떻게?

감사합니다.

답변

2

몇 가지 질문이 있습니다.

1.이 이미지에서 컬러 섹션을 추출하는 방법이 있습니까?

예.

bwlabel에서 얻은 라벨 이미지를 L, 원본 이미지를 I으로합시다. 그런 다음 S = regionprops(L,'BoundingBox');L에 각 지역과 연결된 경계 상자를 제공합니다. S(2)의 영역을 추출하려면 I2 = imcrop(I,S(2).BoundingBox);을 사용하십시오. S(2)2 레이블 L에 해당하는지 확인해야합니다 (그렇지 않은 경우 수정은 쉽지 않음).

2. 개별 세그먼트를 thresholding하거나 히스토그램 등을 사용하여 더 자세히 분석하여 보트 만 포함 된 새로운 레이블 집합을 만듭니다.

그리 간단하지 않습니다. 이는 이미지에 크게 좌우됩니다. MATLAB의 기본 thresholding 함수를 사용하면 효과를 낼 수 있습니다. 자른 각 이미지에 대해 이진 마스크 ​​(예 : IB1)를 얻은 것으로 가정합니다.

3. 원본 이미지를 다시 원래 이미지 위에 다시 삽입 할 수 있도록 원본 이미지와 관련하여 이러한 새 레이블의 위치를 ​​그대로 유지하십시오.

예. 경계 상자 세트가 있으므로 S 새 마스크를 L으로 바꿉니다. I1이 개선 마스크이다

L(round(S(1).BoundingBox(2):S(1).BoundingBox(2)+S(1).BoundingBox(4)),... round(S(1).BoundingBox(1):S(1).BoundingBox(1)+S(1).BoundingBox(3))) = IB1;

.L에 할당 할 때 마스크의 모든 0이 아닌 값을 레이블 색인으로 설정하는 것을 잊지 마십시오.

round을 사용하는 이유에 대한 자세한 내용은 look here입니다.

+0

감사합니다. 큰 도움이되었습니다. – user2599252

0

레이블이없는 영역을 이전 이미지에 곱하거나 (다른 레이블 값을 가지므로 im_label ~ = 0) 관련이없는 정보를 제거한 다음 해당 이미지의 "whatever"메서드를 사용하여 이미지를 다시 처리 할 수 ​​있습니까? 배경이 제거 되었습니까?

관련 문제