- 화소 처리(Point Processing) = 입력 영상의 특정 좌표 픽셀 값을 변경하여 출력 영상의 해당 좌표 픽셀 값으로 설정하는 연산.
화소 처리는 특정 좌표의 값을 바꾸는 연산이므로 함수로 표현할 수 있습니다.
다양한 변환 함수 f(x)가 존재하며 예를 들면 다음과 같습니다.
- f1 = 입력된 픽셀값이 변함없이 동일한 픽셀값으로 출력되는 함수. (항등 함수)
- f2 = 입력된 픽셀값보다 밝은 픽셀값으로 출력되는 함수.
- f3 = 입력된 픽셀값이 특정 값 이하이면 0, 특정 값 이상이면 255로 출력하는 함수. (이진 함수)
화소값을 변화시키는 변환 함수는 0~255 사각형 범위 안에 존재해야 하며 반전, 밝기 조절, 명암비 조절 등의 효과를 구현할 수 있습니다.
- 밝기 조절(Brightness Control) = 영상을 전체적으로 더욱 밝거나 어둡게 만드는 연산.
밝기 조절을 함수 표현으로 나타내면 다음과 같습니다.
여기에서 단순히 화소의 픽셀값에 +n을 하거나 -n을 하게되면 픽셀값이 0보다 작아지거나 255보다 커지게 됩니다. 화소의 픽셀값은 0~255의 값만 가질 수 있으므로 이 부분에 대한 처리가 필요합니다.
그림과 같이 픽셀값의 최소인 0 이하의 값이면 0으로, 255 이상의 값이면 255로 처리하는 함수가 필요합니다. 이를 saturate 함수라고 하며 이러한 처리를 saturate 연산이라고 합니다.
1-(1) 영상의 밝기 조절 코드
Upload File
from google.colab import files
upload = files.upload()
Saving lenna.bmp to lenna.bmp
Import Library
import sys
import numpy as np
import cv2
Read Grayscale Image
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
if src is None:
print('Image load failed!')
sys.exit()
- src = 흑백 영상으로 불러온 'lenna.bmp' 영상.
Increase Brightness
dst = cv2.add(src, 100)
#dst = np.clip(src + 100., 0, 255).astype(np.uint8)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
- OpenCV의 add 함수를 사용하여 화소의 픽셀값을 100만큼 증가시킵니다.
- dst = 흑백 영상인 src의 픽셀값에 100을 더하고 saturate 연산을 한 영상.
- 여기에서 만약 cv2.add 함수를 사용하지 않고 그냥 100만큼 픽셀값을 더한다면 255을 넘기는 경우 다시 0부터 값으로 연산됩니다. 예를들어 특정 화소의 픽셀값이 160이고, 픽셀값을 100만큼 더해서 증가시킨다면 260이 되며 255가 최대값이므로 3으로 넘어가게 됩니다. 그러므로 반드시 saturate 연산을 해줘야 합니다.
- cv2.add 함수의 효과는 넘파이의 np.clip()이라는 함수로 구현할 수 있습니다.
Read Color Image
src = cv2.imread('lenna.bmp')
if src is None:
print('Image load failed!')
sys.exit()
- src = 컬러 영상으로 불러온 'lenna.bmp' 영상.
Increase Brightness
dst = cv2.add(src, (100, 100, 100, 0))
#dst = np.clip(src + 100., 0, 255).astype(np.uint8)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
- OpenCV의 add 함수를 사용하여 화소의 픽셀값을 100만큼 증가시킵니다.
- dst = 컬러 영상인 src의 픽셀값에 100을 더하고 saturate 연산을 한 영상.
- 컬러 영상에서 밝기를 조절할 때 반드시 각 채널 BGR의 픽셀값을 모두 처리해야 합니다. 만약 cv2.add 함수에 100만 입력했다면 첫번째 채널 Blue만 밝기가 100 증가하고, 나머지는 기본값 0으로 증가하므로 전체적으로 밝은 파란색의 영상으로 변하게 됩니다.
- cv2.add 함수의 효과는 넘파이의 np.clip()이라는 함수로 구현할 수 있습니다.
*참고 : OpenCV를 활용한 컴퓨터 비전과 딥러닝
'Fields Applied with AI > 컴퓨터 비전 Computer Vision' 카테고리의 다른 글
Ⅰ. 컴퓨터 비전 기초 (8. 트랙바와 연산 시간 측정) (0) | 2022.03.13 |
---|---|
Ⅰ. 컴퓨터 비전 기초 (7. 입력 장치 이벤트) (0) | 2022.03.13 |
Ⅰ. 컴퓨터 비전 기초 (6. 동영상이란?) (0) | 2022.02.27 |
Ⅰ. 컴퓨터 비전 기초 (5. 마스크 연산과 ROI) (0) | 2022.02.25 |
Ⅰ. 컴퓨터 비전 기초 (4. 영상의 생성, 복사, 추출) (0) | 2022.02.24 |