우선 기본 사항 :
평균 이동 세분화는 지역화 된 객체의 음영 또는 색조 차이를 감쇠하는 데 매우 유용한 로컬 균질화 기술입니다. 예는 여러 단어보다 낫습니다.
조치 : 각 픽셀을 range-r 이웃에 있고 값이 거리 d 내에있는 픽셀의 평균으로 대체합니다.
평균 이동은 일반적으로 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!