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


107

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

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

  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

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


3 단계? 나는 약 100과 약 150의 숫자를 봅니다.
John

2
세분화와 마찬가지로 중간에있는 숫자가 경계의 해당 섹션에 포함될 가장자리 숫자에서 멀어 질 것이라고 생각했습니다. 이것이 제가 3이라고 말한 이유입니다. 이러한 유형의 세분화가 어떻게 작동하는지 정말로 이해하지 못하기 때문에 저는 틀릴 수 있습니다.
Sharpie 2011 년

오 ... 아마도 우리는 다른 것을 의미하는 수준을 취하고있을 것입니다. 문제 없다. :)
John

1
나는 받아 들여진 대답을 좋아하지만 전체 그림을 보여주지 않았다고 생각합니다. IMO이 pdf는 평균 이동 세분화를 더 잘 설명합니다 (예를 들어 더 높은 차원 공간을 사용하는 것이 2d보다 낫다고 생각합니다). eecs.umich.edu/vision/teaching/EECS442_2012/lectures/...
Helin입니다 왕

답변:


204

우선 기본 사항 :

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

여기에 이미지 설명 입력

조치 : 각 픽셀을 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!


이미지에 대한 평균 이동의 Matlab 구현이 있습니까?
Kaushik Acharya


164

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

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

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

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

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

Mean-Shift 반복 :

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

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

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

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

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

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

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


특징 공간이 각 픽셀의 위치를 ​​설명하는 3 차원이 될 수 없습니까?
Helin Wang 2014-10-01

@HelinWang 예, 그럴 수 있습니다.
mlai 2014 년

창이 1D 기능 공간에 어떻게 배치되는지 이해하지만 공간 검색 거리 (예 : 픽셀) 및 스펙트럼 거리 (값 차이)를 포함하는 이동 알고리즘을 의미하는 데 귀하의 설명을 어떻게 적용 할 수 있는지 모르겠습니다. 벨리 사리우스 박사의 대답 에서처럼. 이것을 명확히 할 수 있습니까?
Lennert

@Lennert 질문을 올바르게 이해했다면 기본적으로 픽셀 위치 (x, y)를 기능으로 추가하거나 다른 위치 기반 기능을 클러스터링 공간에 추가하는 것입니다. Belisarius의 답변은 Mathematica의 특정 구현을 참조하여 좀 더 정교한 작업을 수행 할 수 있습니다. 도움이 되나요?
mlai

1
@Lennert 그래, 나는 당신이 그것을 얻은 것 같아요. 왜 내 대답이 혼란 스러웠는지 이해할 수 있습니다. 내 '창'을 2 차원으로 그렸지만 실제로는 1 차원 스펙트럼 값에서만 클러스터링을 묘사하려고했습니다. 그것은 꽤 도면 또는 애니메이션 (필자는 시간을 얻는 경우에 요즘 어쩌면 하나) 3 차원 특징 공간에서 평균 시프트 클러스터를 시각화하는 냉각 것
mlai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.