본문 바로가기
Image Processing (Python)

Invert (색반전)

by HanByol Jang 2021. 11. 10.
728x90

함수 설명

이미지에서 중요한 영역이 주변보다 어두운 경우반전된 이미지를 이용하면 해당 영역을 좀 더 쉽게 관찰할 수 있습니다. 또는 색반전을 통해 원본 이미지와는 다른 분위기의 새로운 이미지를 얻을 수 있습니다.

 

색반전의 원리는 아래와 같습니다.

 

반전된 이미지의 픽셀 값 = (이미지가 표현할 수 있는 최대 픽셀 값) - (원본 이미지의 픽셀 값)


예를 들어, 8bit 이미지의 경우 각 픽셀이 0부터 255의 값을 가지기 때문에 새로운 이미지는 255 에서 원본 이미지의 픽셀 값을 뺀 값을 가집니다.

RGB 칼라 영상의 경우는 3 channel 별로 각각 위의 작업을 진행해줍니다.

 


코드 설명

python에서 색반전을 할 수 있는 방법은 다양합니다.

그 가운데 몇가지 방법에 대해 소개하도록 하겠습니다.

 

1. 직접 계산

output = 255 - image

 

2. numpy 라이브러리

import numpy as np

output = np.invert(image)

 

3. OpenCV 라이브러리

import cv2

output = cv2.bitwise_not(image)

 

4. scikit-image 라이브러리

from skimage.util import invert

output = invert(image)


예제

흑백 이미지를 통해 반전 효과를 확인하는 코드입니다.

import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.util import invert

# Image Load (cv2.imread는 BGR로 load 하기에 Gray로 변환)
image = cv2.imread("mri.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 직접 계산
output1 = 255 - image

# numpy 라이브러리
output2 = np.invert(image)

# OpenCV 라이브러리
output3 = cv2.bitwise_not(image)

# scikit-image 라이브러리
output4 = invert(image)

# view
img_list = [image, output1, output2, output3, output4]
title_list = ['Original', 'Calculate', 'Numpy', 'OpenCV', 'Scikit-image']

for i in range(len(img_list)):
    plt.subplot(2, 3, i+1)
    plt.imshow(img_list[i], cmap='gray')
    plt.title(title_list[i])
    plt.axis('off')
plt.show()

원본 영상과 비교하여 흑, 백이 반전된 것을 확인할 수 있습니다.

728x90

'Image Processing (Python)' 카테고리의 다른 글

Sharpening (샤프닝)  (1) 2021.11.15
Image Read (이미지 불러오기)  (0) 2021.11.11
Zero Padding  (0) 2021.11.09
Z-Score Standardization (표준화)  (0) 2021.11.08
Min-Max Normalization (정규화)  (0) 2021.11.04

댓글