K-clustering이란 K개의 비슷한 색상으로 아마자룰 모아주는 것을 말한다.
- 원본 이미지
- K=2, 4, 8, 16 Clustering
- 코드
import numpy as np
import cv2
def clustering(eye_img,num_k,name):
Z = eye_img.reshape((-1, 3))
Z = np.float32(Z)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 15, 1.0)
K = num_k
ret, label, center = cv2.kmeans(Z, K, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
res = center[label.flatten()]
res2 = res.reshape((eye_img.shape))
cv2.namedWindow('Clustering_img_'+name, cv2.WINDOW_NORMAL)
cv2.resizeWindow('Clustering_img_'+name, 500, 400)
cv2.imshow('Clustering_img_'+name, res2)
return res2
img = cv2.imread("ori.jpg")
clustering(img, 2, "2")
clustering(img,4,"4")
clustering(img, 8, "8")
clustering(img, 16, "16")
cv2.waitKey(0)
cv2.destroyAllWindows()- 코드 분석
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 15, 1.0)
- criteria : Clustering의 알고리즘 반복의 종료 조건
- cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER : 최대 반복 횟수 및 필수 정확도 충족 시 종료한다.
- 15(max_iter) : 최대 반복 횟수
- 1.0(EPS) : 필수 정확도
cv2.kmeans(Z, K, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
- Z : 이미지 데이터
- K : 필요한 클러스터 개수
- 10(attemps) : 밑에 나올 cv2.KMEANS_RANDOM_CENTERS 반복 횟수 -> 값이 커질수록 색상들이 더 모여있게되는 것으로 느껴진다.
- cv2.KMEANS_RANDOM_CENTERS : 군집의 중심 값(분할할 색상군집의 기준)을 정하는 방식
'IT > 영상 처리' 카테고리의 다른 글
| [Python_OpenCV] 모폴로지 연산 (morphology) (0) | 2018.09.08 |
|---|---|
| [Python_OpenCV] Gaussian, Bilateral, Median flter (0) | 2018.09.06 |
| [Python_OpenCV] 지정경로에서 이미지 파일 읽어오기 (0) | 2018.08.08 |
| [Python_OpenCV] Templete Matching(템플릿 매칭) (0) | 2018.07.22 |
| [Python_OpenCV] Feature Matching (이미지 특성 매칭) (0) | 2018.07.22 |