【Google Colab】 OpenCV에서 이미지 감마 보정

소개



화상 처리에서는 반드시 깨끗한 화상을 준비할 수 있는 것은 아니다.
어두운 이미지와 반대로 너무 밝은 이미지가 포함될 수 있습니다.
이미지의 밝기를 조정하는 방법에는 감마 보정이 있습니다.

이번에는 Python을 사용하여 OpenCV로 이미지를 감마 보정합니다.

감마 보정이란?



감마 보정(또는 감마 변환)은 간단히 말하면 이미지의 밝기를 조정하는 방법입니다.

이미지는 일반적으로 어두운 부분과 밝은 부분을 포함합니다.
이 경우 이미지 전체에 대해 동일한 비율로 밝기를 조정하는 것이 아니라 각 픽셀 값에 따라 밝기를 조정하는 방법이 감마 보정의 특징입니다.
감마 보정 공식은 다음과 같습니다.
y = 255\times\Bigl(\frac{x}{255}\Bigr)^{1/\gamma}

x는 입력의 픽셀 값이고 y는 출력의 픽셀 값입니다.
$\gamma$(감마)의 값에 따라 출력이 달라지기 때문에 감마 보정이라고 합니다.
$\gamma$가 1보다 크면 밝고 1보다 작으면 어두워집니다.

감마 보정 그래프는 다음과 같습니다.



준비



환경은 Google 공동체를 사용합니다.
파이썬 버전은 다음과 같습니다.
import platform
print("python " + platform.python_version())
# python 3.6.9

이미지를 보자.



그럼, 조금 코드를 써 갑시다.

먼저 OpenCV를 가져옵니다.
import cv2

또한 Colaboratory에서 이미지를 표시하기 위해 다음을 가져옵니다.
from google.colab.patches import cv2_imshow

샘플 이미지도 준비해 둡시다.
이번에는 Pixabay의 무료 이미지를 사용합니다.

이제 준비한 샘플 이미지를 표시해 봅시다.
img = cv2.imread(path) # pathは画像を置いている場所を指定
cv2_imshow(img)



이제 감마 보정을 사용하여 이미지를 밝게 해 봅시다.
미리 감마 보정하는 함수를 만들어 둡니다.
import numpy as np

def create_gamma_img(gamma, img):
  gamma_cvt = np.zeros((256,1), dtype=np.uint8)
  for i in range(256):
    gamma_cvt[i][0] = 255*(float(i)/255)**(1.0/gamma)
  return cv2.LUT(img, gamma_cvt)

감마 보정 이미지를 원본 이미지와 나란히 표시해 봅니다.
img_gamma = create_gamma_img(2, img)
imgs = cv2.hconcat([img, img_gamma])
cv2_imshow(imgs)



$\gamma$를 1보다 크게 하면 밝아집니다.
위에서는 2로 보았습니다.

이제 $\gamma$의 값을 다양하게 변경하여 감마 보정된 이미지를 표시해 봅시다.
img1 = create_gamma_img(0.33, img)
img2 = create_gamma_img(0.5, img)
img3 = create_gamma_img(0.66, img)
img4 = create_gamma_img(1.5, img)
img5 = create_gamma_img(2, img)
img6 = create_gamma_img(3, img)
imgs_1 = cv2.hconcat([img1, img2, img3])
imgs_2 = cv2.hconcat([img4, img5, img6])
imgs = cv2.vconcat([imgs_1, imgs_2])
cv2_imshow(imgs)



왼쪽 상단부터 순서대로 $\gamma$의 값을 크게 해 갔습니다.
상단은 원래 이미지보다 어둡고 하단은 원래 이미지보다 밝습니다.

요약



이번에는 Python을 사용하여 OpenCV로 이미지 감마 보정 (감마 변환)을 수행했습니다.

이미지의 밝기를 조정할 필요가 나오면 감마 보정을 시도하십시오.

감마 보정(감마 변환)에 대한 자세한 내용은 다음이 참고됩니다.
  • (99) OpenCV #4 : 감마 보정으로 이미지를 보기 쉽게 조정
  • 【Udemy】
    【Python으로 배우기】 OpenCV에서의 화상 처리 입문
  • 좋은 웹페이지 즐겨찾기