영상의 이진화 Binarization 란?
영상의 이진화는 영상의 픽셀 값을 0 또는 255(1)로 만드는 연산이다.
0은 검정색, 255는 흰색을 의미한다.
이진화를 하는 이유는
- 배경과 객체를 구분
- 관심 영역과 비관심 영역 구분
마스크 영상도 이진 영상의 한 형태라고 볼 수 있다.
그레이스케일 영상의 이진화
그레이스케일 영상의 이진화는 픽셀 값이 임계값을 넘으면 0(검은색) 임계값 보다 낮으면 255(흰색)으로 표현한다.
히스토그램을 보고 적절한 임계값을 설정하는 것이 중요하다.
✔︎ 임계값 함수 - cv2.threshold
retval, dst = cv2.threshold(src, thresh, maxval, type, dst=None)
- src : 입력 영상. 다채널, 8비트 또는 32비트 실수형
- thresh : 사용자 지정 임계값
- maxval : cv2.THRESH_BINARY 또는 cv2.THRESH_BINARY_INV 방법 사용 시 최댓값. 보통 255로 지정.
- type : cv2.THRESH_ 로 시작하는 플래그. 임계값 함수 동작 지정 또는 자동 임계값 결정 방법 지정
- retval : 사용된 임계값
- dst : 출력 영상. src와 동일 크기, 동일 타입, 같은 채널 수
cv2.threshold는 영상의 이진화 뿐만 아니라 모든 임계값을 지원하는 함수이다.
maxval는 255를 입력해 주는 것이 좋다. 이진화를 하고 싶으면 type 인자에 cv2.THRESH_BINARY 나 cv2.THRESH_BINARY_INV를 입력해주면 된다.
# type
- THRESH_BINARY : 픽셀 값이 threshold 보다 크면 maxval(255 흰색), 아니면 0(검정)
- THRESH_BINARY_INV :픽셀 값이 threshold 보다 크면 0, 아니면 maxval
- THRESH_TRUNC : 픽셀 값이 threshold 보다 크면 임계값, 아니면 픽셀 값 그대로 할당
- THRESH_TOZERO : 픽셀 값이 threshold 보다 크면 픽셀값 그대로, 작으면 0 할당
- THRESH_TOZERO_INV : 픽셀 값이 threshold 보다 크면 0, 작으면 픽셀값 그대로
TRUNK는 임계값 보다 크면 임계값으로 지정하고, 낮으면 배경영상을 그대로 이용한다.
TOZERO는 임계값보다 크면 배경영상, 낮으면 검은색을 출력한다.
TOZERO_INV는 임계값보다 작으면 배경영상 크면 검은색을 출력한다.
TRHESH_NINARY와 THRESH_BINARY_INV 이 두 가지를 제일 많이 이용한다.
💬 영상의 이진화 예제 코드
import sys
import numpy as np
import cv2
src = cv2.imread('cells.png', cv2.IMREAD_GRAYSCALE)
if src is None:
print('Image load failed!')
sys.exit()
_, dst1 = cv2.threshold(src, 100, 255, cv2.THRESH_BINARY)
_, dst2 = cv2.threshold(src, 210, 255, cv2.THRESH_BINARY)
cv2.imshow('src', src)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.waitKey()
cv2.destroyAllWindows()
'OpenCV' 카테고리의 다른 글
[OpenCV with Python] 이진 영상 처리 : 지역 이진화 - cv2.adaptiveThreshold (0) | 2022.02.04 |
---|---|
[OpenCV with Python] 이진 영상 처리 : 자동 이진화 - Otsu 방법 (0) | 2022.02.04 |
[OpenCV with Python] 영상의 특징 추출 : 영상에서 원 검출하기 - 허프 변환 (0) | 2022.02.04 |
[OpenCV with Python] 영상의 특징 추출 : 영상에서 직선 검출하기 - 허프 변환 (0) | 2022.02.04 |
[OpenCV with Python] 영상의 특징 추출 : 캐니 에지 검출 cv2.Canny (1) | 2022.02.04 |