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 |