데이터분석/Python
머신러닝 Example by Python - 이미지 데이터를 이용한 K-평균 군집화 (이미지 인식 시스템)
버섯도리
2022. 1. 14. 14:58
### 이미지 데이터를 이용한 K-평균 군집화
## 1. 이미지 데이터의 컬러값을 이용한 K-평균 군집화
import cv2
import sys
import numpy as np
from matplotlib import pyplot as plt
def image_kmeans(fin_img, K, fout_img):
img = cv2.imread(fin_img)
# 입력받은 이미지 행렬의 모양을 바꿉니다.
# 가로 x 세로 x 채널 수의 입력을 가로 * 세로 * 채널 수로 바꿉니다.
Z = img.reshape((-1,3))
# cv.kmeans의 입력으로 사용하기 위해 강도값을 넘파이의 float32 형으로 바꿉니다.
Z = np.float32(Z)
# 파라미터 criteria의 인자를 정합니다. 여기서는 최대 갱신 수 10, 갱신 에러 값 1.0을 이용하여
# 갱신을 종료합니다. 초기화는 10번 하겠습니다.
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
n_init = 10
ret, label, center = cv2.kmeans(Z, K, None, criteria, n_init, cv2.KMEANS_RANDOM_CENTERS)
# 출력된 중심점의 값을 픽셀의 강도로 사용하기 위해 int로 바꿉니다.
center = np.uint8(center)
# 각 픽셀을 해당하는 중심점의 피처값(여기서는 각 채널의 강도값)으로 채웁니다.
res = center[label.flatten()]
# 출력을 위해 원래 이미지와 같은 모양의 행렬로 바꿉니다.
res2 = res.reshape((img.shape))
plt.imshow(cv2.cvtColor(res2, cv2.COLOR_BGR2RGB))
plt.title('k=%d', K)
plt.savefig(fout_img)
if __name__ == '__main__':
argv = sys.argv
image_kmeans(argv[1], argv[2], argv[3])
출처 : 처음 배우는 머신러닝 : 기초부터 모델링, 실전 예제, 문제 해결까지