IT박스

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

itboxs 2020. 8. 17. 08:29
반응형

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


누구든지 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

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


우선 기본 사항 :

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

여기에 이미지 설명 입력

조치 : 각 픽셀을 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 세분화는 다음과 같이 작동합니다.

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

In your case, all you have are intensity values, so feature space will only be one-dimensional. (You might compute some texture features, for instance, and then your feature space would be two dimensional – and you’d be segmenting based on intensity and texture)

Search windows are distributed over the feature space 여기에 이미지 설명 입력

The number of windows, window size, and initial locations are arbitrary for this example – something that can be fine-tuned depending on specific applications

Mean-Shift iterations:

1.) The MEANs of the data samples within each window are computed 여기에 이미지 설명 입력

2.) The windows are SHIFTed to the locations equal to their previously computed means 여기에 이미지 설명 입력

Steps 1.) and 2.) are repeated until convergence, i.e. all windows have settled on final locations 여기에 이미지 설명 입력

The windows that end up on the same locations are merged 여기에 이미지 설명 입력

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

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

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

참고 URL : https://stackoverflow.com/questions/4831813/image-segmentation-using-mean-shift-explained

반응형