[컴비콜라] 저해상도 영상을 고해상도 영상으로(image super-resolution using cloud IDE+python+tensorflow)

https://youtu.be/jsTFLTPz9qs

 

YouTube

 

www.youtube.com

 

1. 사이트 링크들

구름IDE https://ide.goorm.io/  

Pillow 패키지 https://pillow.readthedocs.io/en/stable/reference/Image.html    

ISR 패키지 https://github.com/idealo/image-super-resolution  

 

 

2. 패키지 설치

Pillow 설치

pip3 install Pillow

 

ISR 설치

pip3 install ISR

 

 

3. 파이썬 코드

from PIL import Image
import numpy as np
from ISR.models import RRDN

im = Image.open("test1.jpg") # test1.jpg 대신에 자신이 사용할 이미지 파일의 이름을 넣어주세요.^^ 
print("img size:", im.size)

# Provide the target width and height of the image
(width, height) = (im.width*4, im.height*4)
im_resized = im.resize((width, height))
print("resized img size:", im_resized.size)
im_resized.save('im_resized.jpg')

lr_im = np.array(im)
model = RRDN(weights='gans')
sr_im = model.predict(lr_im)
sr_im = Image.fromarray(sr_im)
print("sr img size:", sr_im.size)
sr_im.save('im_sr.jpg')

댓글()

[컴비콜라] 사진 속 객체 찾기(object detection using cloud IDE+python+tensorflow)

https://www.youtube.com/watch?v=AUv0IRkIF28

 

 

1. 구름IDE 주소

https://ide.goorm.io/

 

2. 라이브러리(패키지, 모듈) 설치

opencv-python 설치

pip3 install opencv-python

 

cvlib 설치

pip3 install cvlib

 

3. 파이썬 코드

import cvlib as cv
from cvlib.object_detection import draw_bbox
import cv2

img = cv2.imread("test1.jpg") # 이미지 읽기

bbox, label, conf = cv.detect_common_objects(img) # 물체 검출

output_image = draw_bbox(img, bbox, label, conf) # 바운딩 박스 그리기

cv2.imwrite("result.jpg", output_image) # 이미지 저장

댓글()

[컴비콜라] 남자? 여자?(gender recognition using cloud IDE+python+tensorflow)

https://www.youtube.com/watch?v=4u6SZ3suXIA&t=22s

 

1. 구름 IDE 주소

https://ide.goorm.io/

 

2. 라이브러리(패키지, 모듈) 설치

opencv-python 설치

pip3 install opencv-python

 

cvlib 설치

pip3 install cvlib

 

3. 성별 인식 파이썬 코드

# import necessary packages
import cv2
import cvlib as cv
import numpy as np

# read input image
img = cv2.imread('테스트에 사용할 이미지 파일명')

# apply face detection
face, conf = cv.detect_face(img)

padding = 20

# loop through detected faces
for f in face:
    (startX,startY) = max(0, f[0]-padding), max(0, f[1]-padding)
    (endX,endY) = min(img.shape[1]-1, f[2]+padding), min(img.shape[0]-1, f[3]+padding)
    
    # draw rectangle over face
    cv2.rectangle(img, (startX,startY), (endX,endY), (0,255,0), 2)

    face_crop = np.copy(img[startY:endY, startX:endX])

    # apply gender detection
    (label, confidence) = cv.detect_gender(face_crop)

    idx = np.argmax(confidence)
    label = label[idx]
    label = "{}: {:.2f}%".format(label, confidence[idx] * 100)
    Y = startY - 10 if startY - 10 > 10 else startY + 10  
    cv2.putText(img, label, (startX, Y),  cv2.FONT_HERSHEY_SIMPLEX,
                0.7, (0, 255, 0), 2)

# save output
cv2.imwrite("gender_detection.jpg", img)

 

댓글()

[컴비콜라] 사진 속 얼굴 찾기(face detection using cloud IDE+python+tensorflow)

https://www.youtube.com/watch?v=7o6spHwM3G0&t=102s

 

1. 구름IDE 주소

https://ide.goorm.io/

 

2. 라이브러리(패키지, 모듈) 설치

opencv-python 설치

pip3 install opencv-python

 

cvlib 설치

pip3 install cvlib

 

3. 얼굴 검출 파이썬 코드

import cv2
import cvlib

img = cv2.imread('테스트할 이미지 파일명') # 이미지 읽기

faces, confidences = cvlib.detect_face(img) # detect faces (얼굴 검출)

# 검출된 얼굴을 박스로 감싸기
for face in faces:
	(startX,startY) = face[0],face[1]
	(endX,endY) = face[2],face[3]
	cv2.rectangle(img, (startX,startY), (endX,endY), (0,255,0), 2)

cv2.imwrite('result.jpg', img) # 이미지 저장

댓글()

HDR(high dynamic range) 이미지와 톤매핑(tone-mapping)

디지털이미지는 일반적으로 red, green, blue (RGB) 3채널로 구성되어 있고, 각 채널당 8비트로 표현되어 있습니다. R, G, B 채널 각각 0-255의 밝기로 표현할 수 있는 것이죠. 이러한 디지털이미지를 SDR(standard dynamic range) 이미지라고 부릅니다. 그러나 SDR 이미지의 경우 구현할 수 있는 밝기의 범위가 좁기 때문에 어두운 부분이 제대로 표현되지 않거나, 밝은 부분이 제대로 표현이 되지 않을 때가 많습니다. 결과적으로 우리가 눈으로 직접 보는 장면과 그것을 담은 디지털이미지 사이에는 큰 차이가 있습니다. 

 

 

사람의 욕심은 끝이 없기 때문에, 이 수준에 만족할 수 없었습니다. 좀 더 우리가 눈으로 보는 것과 유사한 디지털이미지를 원하게 되죠. 그래서 나오게 된 것이 HDR(high dynamic range) 이미지입니다. HDR 이미지는 보통 노출의 정도를 다양하게 변화시켜서 촬영한 이미지들을 적절히 조합해서 만듭니다. 채널당 8비트로 표현하는 SDR 이미지와 달리 HDR 이미지는 채널당 16 또는 32비트로 표현하기 때문에, 훨씬 더 광범위한 색상과 밝기를 나타낼 수 있게 되고, 좀 더 장면을 현실감 있게 표현해냅니다. HDR 이미지를 보기 위해서는 HDR 이미지를 디스플레이할 수 있는 장치가 필요합니다. 그러나 일반적인 디스플레이 장치에서는 HDR 이미지를 표현할 수 없기 때문에 8비트 SDR 이미지로 다시 변환해줘야 합니다. 이때 사용되는 기술이 바로 톤매핑(tone-mapping)입니다. 톤매핑을 위한 알고리즘에는 여러 종류가 있습니다. 톤매핑된 HDR 이미지를 tone-mapped HDR image라고 부릅니다. 이 과정을 하나의 그림으로 정리해봤습니다.  

 

 

위 그림과 같이 노출 정도를 다르게 해서 얻은 여러 장의 SDR 이미지들을 조합해서 한 장의 HDR 이미지를 만들고, 이것을 일반 디스플레이 장치에서 볼 수 있게 하기 위해서 톤매핑 기술을 통해 톤매핑된 HDR 이미지를 만듭니다. 

 

또한 위와 달리 HDR 이미지를 만들지 않고 노출 정도를 다르게 해서 찍은 여러 장의 이미지들을 바로 하나의 이미지로 합성하는 방법도 있는데, 이 방법은 MEF(multi exposure fusion)라고 부릅니다. MEF를 시행해주는 알고리즘도 역시 여러 종류가 있습니다. MEF로 얻은 이미지는 multi exposure fused image라고 부릅니다. 

 

간단하게 정리해봤는데 도움이 되셨나요? 항상 질문과 지적은 환영합니다. 빠르게 답변드리도록 노력하고 있으니 댓글 남겨주세요.^^ 

 

 

<참고자료>

[1] https://pgmaru.tistory.com/52, 풀그림마루, "HD 및 HDR의 이해"

[2] https://support.microsoft.com/ko-kr/help/4463133/windows-10-what-is-windows-hd-color, Microsoft, "Windows HD Color란?"

태그 : HDR, SDR, 톤매핑

댓글()