OpenCV 및 Python K-Means Color Clustering

Jurassic Park 영화 포스터를 보면 지배적인 색깔은 무엇입니까 ? (즉, 이미지에서 가장 많이 표현되는 색상)

배경이 대체로 검게 보입니다. T-Rex 주변에는 빨간색이 약간 있습니다 . 그리고 실제 로고를 둘러싼 약간의 노란색이 있습니다.

인간이 색들을 고르는 것은 꽤 간단합니다.
그러나 이러한 색상을 자동으로 찾아내는 알고리즘을 만들고 싶다면 어떻게해야 할까요? 아마 컬러 히스토그램이 최선의 방법이라고 생각할 것입니다 …

실제로 k-means 클러스터링이라는 더 흥미로운 알고리즘을 적용 할 수 있습니다.

이 게시물에서는 OpenCV, Python 및 k-means 클러스터링 알고리즘을 사용하여 이미지에서 가장 중요한 색상을 찾는 방법을 보여줍니다 .

OpenCV 및 Python 버전 :
이 예제는 Python 2.7 / Python 3.4+ 및 OpenCV 2.4.X / OpenCV 3.0+에서 실행 됩니다.

K-Means 클러스터링

그래서 k-는 정확히 무엇입니까?
K-means는 클러스터링 알고리즘 입니다.
목표는 n개의 데이터 포인트를 k개의 클러스터로 분할하는 것입니다 . n개의 데이터 포인트 각각은 가장 가까운 평균을 갖는 클러스터에 할당됩니다. 각 클러스터의 평균을 “센트로이드” 또는 “센터”라고합니다.

전반적으로, k-means를 적용하면 원래 n개의 데이터 포인트의 k 개의 클러스터가 생성 됩니다. 특정 클러스터 내부의 데이터 포인트는 다른 클러스터에 속한 데이터 포인트보다 서로 “더 유사” 하다고 간주됩니다.

여기서는 RGB 이미지의 픽셀 강도를 클러스터링합니다. MxN 크기의 이미지가 주어지면 MxN 픽셀을 가지며 각 픽셀은 각각 빨강, 녹색 및 파랑의 세가지 구성요소로 구성됩니다.

이 MxN 픽셀을 데이터 포인트로 처리하고 k- 평균을 사용하여 클러스터링합니다.

주어진 클러스터에 속한 픽셀은 개별 클러스터에 속한 픽셀보다 색상이 유사합니다.

 

 

k-means의 한 가지 주의사항은 우리가 미리 생성하고자 하는 클러스터의 수를 지정해야한다는 것 입니다. k의 최적값을 자동으로 선택하는 알고리즘이 있지만 이러한 알고리즘은 이 게시물의 범위를 벗어납니다.

k-means 클러스터링을 우리 자신의 이미지에 적용하는 것이 좋습니다. 일반적으로 클러스터 수가 적을수록 ( k <= 5 ) 최상의 결과를 얻을 수 있습니다.

블로그 원문(pyimagesearch 웹사이트)

 

 

http://www.pyimagesearch.com/…/opencv-python-k-means-color…/

유사 내용의 다른 코드
http://charlesleifer.com/…/using-python-and-k-means-to-fin…/

** k- means의 문제는 표준 구현에만 기반을 두고 있기 때문에 k의 값을 “자동”으로 알 수있는 방법은 없습니다.
그러나 k-means 알고리즘의 확장으로, 특히 베이지안 정보 기준 (Bayesian Information Criterion, BIC)을 사용하여 k의 최적값을 찾는 X- means에 대한 확장이 있습니다.
색상 기반 세분화에 관심이 있다면 scikit-image서브패키지를 살펴보십시오.

http://scikit-image.org/docs/…/api/skimage.segmentation.html