[algorithm] 평균 이동을 사용한 이미지 분할 설명

누구든지 Mean Shift 세분화가 실제로 어떻게 작동하는지 이해하도록 도와 주시겠습니까?

방금 만든 8×8 행렬이 있습니다.

  103  103  103  103  103  103  106  104
  103  147  147  153  147  156  153  104
  107  153  153  153  153  153  153  107
  103  153  147  96   98   153  153  104
  107  156  153  97   96   147  153  107
  103  153  153  147  156  153  153  101
  103  156  153  147  147  153  153  104
  103  103  107  104  103  106  103  107

위의 행렬을 사용하여 평균 이동 세분화가 세 가지 다른 수준의 숫자를 분리하는 방법을 설명 할 수 있습니까?



답변

우선 기본 사항 :

평균 이동 세분화는 지역화 된 객체의 음영 또는 색조 차이를 감쇠하는 데 매우 유용한 로컬 균질화 기술입니다. 예는 여러 단어보다 낫습니다.

여기에 이미지 설명 입력

조치 : 각 픽셀을 range-r 이웃에 있고 값이 거리 d 내에있는 픽셀의 평균으로 대체합니다.

평균 이동은 일반적으로 3 개의 입력을 사용합니다.

  1. 픽셀 간의 거리를 측정하는 거리 기능입니다. 일반적으로 유클리드 거리이지만 잘 정의 된 다른 거리 함수를 사용할 수 있습니다. 맨하탄 거리 때로는 또 다른 유용한 선택이 될 것입니다.
  2. 반경. 이 반경 내의 모든 픽셀 (위의 거리에 따라 측정 됨)이 계산에 포함됩니다.
  3. 가치 차이. 반지름 r 내부의 모든 픽셀에서 값이이 차이 내에있는 픽셀 만 평균을 계산합니다.

알고리즘은 경계에서 잘 정의되어 있지 않으므로 다른 구현은 다른 결과를 제공합니다.

적절한 수학적 표기법 없이는 표시 할 수없고 StackOverflow에서 사용할 수 없으며 다른 곳에서 좋은 소스에서 찾을 수 있기 때문에 여기에서는 피투성이 수학적 세부 사항에 대해 논의하지 않겠습니다 .

행렬의 중심을 살펴 보겠습니다.

153  153  153  153
147  96   98   153
153  97   96   147
153  153  147  156

반경과 거리를 합리적으로 선택하면 4 개의 중앙 픽셀은 97 (평균) 값을 갖게되며 인접한 픽셀과는 다른 형태가됩니다.

Mathematica 에서 계산해 봅시다 . 실제 숫자를 표시하는 대신 색상 코딩을 표시하므로 무슨 일이 일어나고 있는지 더 쉽게 이해할 수 있습니다.

매트릭스의 색상 코딩은 다음과 같습니다.

여기에 이미지 설명 입력

그런 다음 합리적인 평균 이동을 취합니다.

MeanShiftFilter[a, 3, 3]

그리고 우리는 :

여기에 이미지 설명 입력

모든 중심 요소가 동일한 경우 (97, BTW).

보다 균일 한 색상을 얻기 위해 평균 이동을 여러 번 반복 할 수 있습니다. 몇 번의 반복 후에 안정적인 비 등방성 구성에 도달합니다.

여기에 이미지 설명 입력

이때 Mean Shift를 적용한 후 얻을 수있는 “색상”수를 선택할 수 없음이 분명해야합니다. 그럼, 어떻게하는지 보여 드리겠습니다. 질문의 두 번째 부분이기 때문입니다.

미리 출력 클러스터 수를 설정하기 위해 필요한 것은 Kmeans 클러스터링 과 같은 입니다.

매트릭스에 대해 다음과 같이 실행됩니다.

b = ClusteringComponents[a, 3]

{{1, 1, 1, 1, 1, 1, 1, 1},
 {1, 2, 2, 3, 2, 3, 3, 1},
 {1, 3, 3, 3, 3, 3, 3, 1},
 {1, 3, 2, 1, 1, 3, 3, 1},
 {1, 3, 3, 1, 1, 2, 3, 1},
 {1, 3, 3, 2, 3, 3, 3, 1},
 {1, 3, 3, 2, 2, 3, 3, 1},
 {1, 1, 1, 1, 1, 1, 1, 1}}

또는:

여기에 이미지 설명 입력

이는 이전 결과와 매우 유사하지만 보시다시피 이제 출력 레벨이 3 개뿐입니다.

HTH!


답변

Mean-Shift 세분화는 다음과 같이 작동합니다.

이미지 데이터는 기능 공간으로 변환됩니다.
기능 공간

귀하의 경우에는 강도 값만 있으면되므로 기능 공간은 1 차원 일뿐입니다. (예를 들어 일부 텍스처 기능을 계산하면 기능 공간이 2 차원이되고 강도 텍스처를 기반으로 분할됩니다 )

검색 창은 기능 공간에 배포됩니다.
여기에 이미지 설명 입력

이 예에서 창 수, 창 크기 및 초기 위치는 임의적입니다. 특정 응용 프로그램에 따라 미세 조정할 수 있습니다.

Mean-Shift 반복 :

1.) 각 창 내 데이터 샘플의 MEAN이 계산됩니다.
여기에 이미지 설명 입력

2.) 창은 이전에 계산 된 평균과 동일한 위치로 이동됩니다.
여기에 이미지 설명 입력

수렴 될 때까지 1 단계와 2 단계가 반복됩니다. 즉, 모든 창이 최종 위치에 고정됩니다.
여기에 이미지 설명 입력

같은 위치에있는 창은 병합됩니다.
여기에 이미지 설명 입력

데이터는 창 순회에 따라 클러스터링됩니다.
여기에 이미지 설명 입력

… 예를 들어, “2”위치에 도달 한 창에 의해 순회 된 모든 데이터는 해당 위치와 관련된 클러스터를 형성합니다.

따라서이 세분화는 (동시에) 세 그룹을 생성합니다. 이러한 그룹을 원래 이미지 형식으로 보는 것은 belisarius의 답변의 마지막 그림과 비슷할 수 있습니다. 다른 창 크기와 초기 위치를 선택하면 다른 결과가 생성 될 수 있습니다.


답변