이진화란?
요즘 카메라로 사진을 찍으면 칼라로 사진을 보통 사진을 찍게 되는데
사람이 보기에는 그냥 빨간색과 검정색옷을 입고 주변 색들도 눈으로 보이는 것과 같지만...
컴퓨터는 조명이나 그림자, 잡영 등에 영향을 받아서 색이 다 다르게 보인다.
그래서 컴퓨터에게 더 쉽게 이해하기 쉬운 영상으로 만들어주는 것이 이진화이다.
검정색과(0) 흰색(255)로 컬러 값을 바꾸는 것이다.
이는 입력으로 들어가는 영상의 각 채널을 이진화 한다.
이런 이유로 컬러영상(3개 채널)을 이진화 하는 경우, R, G, B 각각을 이진화 하기 때문에
아래와 같이 의도하지 않은 영상을 얻게 될 수도 있다.
그런 이유 때문에 이진화 전에는 cvCvtColor()를 이용하여 Gray로 변환 후 이진화 한다.
cvCvtColor()의 세 번 째 인수는 어떤 컬러맵으로 변환할 것인지 선택할 수 있으며,
OpenCV에서 제공하는 방법들은 CV_BGR2GRAY 뿐만 아니라
CV_BGR2YCrCb, CV_BGR2HSV, CV_BGR2Lab 등 여러가지이며 이는 cv.h 파일에서 확인할 수 있다.
cvThreshold() 함수는 실제로 이진화를 수행하는 함수로,
세 번 째 인수는 문턱치를 설정하고,
네 번 째 인수는 문턱치를 넘어선 픽셀들을 어떤 값으로 설정할 것인지를,
다섯 번 째 인수는 이진화 알고리즘을 선택할 수 있다.
중요함수
1.
원본영상, 이진화가 된 후 저장될 영상, 경계가 되는 수치값(임계값), 임계 값을 넘는 픽셀값을 바꿔줄 최대값 설정,이진화방식)
이진화방식
#define CV_THRESH_BINARY 0 // 임계 값 이하 : 0, 임계 값 초과 : 1
#define CV_THRESH_BINARY_INV 1 // 임계 값 이하 : 1, 임계 값 초과 : 0
#define CV_THRESH_TRUNC 2 // 임계 값 이하는 변화 없음, 임계 값 초과는 임계 값
#define CV_THRESH_TOZERO 3 // 임계 값 이하는 0, 임계 값 초과는 그대로
#define CV_THRESH_TOZERO_INV 4 // 임계 값 이하는 그대로, 임계 값 초과는 0
2.
원본영상, 변환후 저장될 영상, Color 변환모드
Color 변환모드
CV_RGB2GRAY - 흑백으로 변환
CV_RGB2YCrCb - 주로 Skin Color 모델을 할 때 변환
CV_RGB2HLS - H(Hue색상), L(Luminance,휘도),S(Saturation,채도)
CV_RGB2HSV - 모든 컬러를 Hue, Saturation, Value로 표현하는 방식
CV_RGB2Lab - L은 밝기인 명도, a 조합은 녹색에서 적색의 보색 b 조합은 황색에서 청색의 보색
CV_RGB2Luv - CIE Yxy색표계에서 지각적 등보성을 보완한 색 공간
결과
[참고] OpenCV 강좌 04. 영상 이진화 하기 (OpenCV KOREA 대한민국 최고의 컴퓨터비젼 커뮤니티)
'프로그래밍 기초 > 영상처리' 카테고리의 다른 글
Haar분류기에 대한 정보 (0) | 2011.11.16 |
---|---|
얼굴인식의 역사, 이슈, 알고리즘, Process flow, 기본적인 기술 비교 (1) | 2011.11.06 |
마우스 이벤트 (0) | 2011.10.31 |
키보드 이벤트 처리 (0) | 2011.10.30 |
문자 출력 (1) | 2011.10.30 |