728x90
반응형
드디어 5주차 수업까지 마무리!
이번 주차에서는 흑백이미지를 컬러이미지로 변환하는 딥러닝 모델에 대하여 공부했다.
그리고 작은 해상도 이미지를 크게 만들어주는 딥러닝 모델도 공부했다.
사실 우리가 아는 흑백이미지는 '회색이미지'라고 불러야 맞다.
코딩에서 진짜 흑백이미지는 검은색과 흰색만 있는 이미지를 말하기 때문.
아래 코드는 회색 사진의 크기를 줄이고, 이를 그냥 늘리는 방법과 딥러닝 모델을 이용해서 늘리는 방법을 써서 비교해보고, 딥러닝 모델을 쓴 이미지를 컬러화시키는 작업이다.
import cv2
import numpy as np
proto = 'models/colorization_deploy_v2.prototxt'
weights = 'models/colorization_release_v2.caffemodel'
net = cv2.dnn.readNetFromCaffe(proto, weights)
pts_in_hull = np.load('models/pts_in_hull.npy')
pts_in_hull = pts_in_hull.transpose().reshape(2, 313, 1, 1).astype(np.float32)
net.getLayer(net.getLayerId('class8_ab')).blobs = [pts_in_hull]
net.getLayer(net.getLayerId('conv8_313_rh')).blobs = [np.full((1, 313), 2.606, np.float32)]
sr = cv2.dnn_superres.DnnSuperResImpl_create()
sr.readModel('models/EDSR_x4.pb')
sr.setModel('edsr', 3)
img = cv2.imread('imgs/07.jpg')
img_reduce = cv2.resize(img, dsize=None, fx=0.25, fy=0.25)
result = sr.upsample(img_reduce)
resized_img = cv2.resize(img_reduce, dsize=None, fx=4, fy=4)
# colorize
h, w, c = result.shape
img_input = result.copy()
img_input = img_input.astype('float32') / 255.
img_lab = cv2.cvtColor(img_input, cv2.COLOR_BGR2Lab)
img_l = img_lab[:, :, 0:1]
blob = cv2.dnn.blobFromImage(img_l, size=(224, 224), mean=[50, 50, 50])
net.setInput(blob)
output = net.forward()
output = output.squeeze().transpose((1,2,0))
output_resized = cv2.resize(output, (w, h))
output_lab = np.concatenate([img_l, output_resized], axis = 2)
output_bgr = cv2.cvtColor(output_lab, cv2.COLOR_Lab2BGR)
output_bgr = output_bgr * 255
output_bgr = np.clip(output_bgr, 0, 255)
output_bgr = output_bgr.astype('uint8')
cv2.imshow('img', img)
cv2.imshow('img_reduce', img_reduce)
cv2.imshow('result', result)
cv2.imshow('resized_img', resized_img)
cv2.imshow('output', output_bgr)
cv2.waitKey(0)
결과는 아래처럼 나온다.
자세히 보면 그냥 단순히 사이즈를 늘리면 그림이 깨져버린다.
하지만 딥러닝 모델을 써서 해상도를 늘리면 곡선이 매끄럽게 늘어난다. 다만 색상을 완벽하게 살리지는 못하나보다.
가장 신기했던 것이 컬러화시키는 모델이다.
그냥 아무거나 흑백사진을 넣으면 가장 그럴듯한 색으로 뽑아준다.
이걸 이용해서 오래된 흑백사진을 컬러로 바꿔줄 수 있을 듯 하다.
참 알면 알수록 신기한 인공지능 세상이다.
728x90
반응형
'공부 > 코딩' 카테고리의 다른 글
스파르타코딩클럽 게임개발 종합반 1주차 일지 - 빗방울 게임 (0) | 2022.11.13 |
---|---|
스파르타코딩클럽 제 2회 스파르톤 생존일지 (4) | 2021.09.04 |
스파르타코딩클럽 이미지로 시작하는 딥러닝 4주차 개발일지 (2) | 2021.07.17 |
스파르타코딩클럽 이미지로 시작하는 딥러닝 3주차 개발일지 (0) | 2021.07.11 |
스파르타코딩클럽 이미지로 시작하는 딥러닝 2주차 개발일지 (0) | 2021.07.11 |