KAIST - SoC RobotWar
출전자격 TEST 대비 영상기초
설명1
-
영상은 기본적으로 배열이나 포인터를 이용해서 저장합니다.
-
색상을 표현하는 모델에는 여러가지 방법이 있습니다. 해당 소스에서는 YUV를 이용하여 영상데이터를 lpVHdr->lpData에 저장합니다(편의를 위해 RGB로 변환하는 예제소스를 추가하였습니다)
2-1. 0(검정), 1(흰색)으로만 구성된 binary 이미지
2-2. 0~255의 값으로 이루어진 gray 모델(흔히 말하는 흑백영상이 gray색상모델입니다)
2-3. 빨강(255,0,0), 초록(0,255,0) 파랑(0,0,255)으로 구성된 RGB모델
2-4. Hue(색조), Saturation(채도), Value(명도)로 구성된 HSV모델
2-5. 밝기성분과 색차정보로 구성된 YUV(YCbCr)모델
과제1
- RGB로 구성된 영상을 gray영상으로 변환하세요
gray = (R + G + B)/3 을 이용하시면 됩니다.
- YUV(YCbCr)로 구성된 영상을 gray scale로 변환하세요
설명2
영상이진화(Threshold)
영상 이진화는 color 혹은 gray scale로 이루어진 이미지를 0(검정), 1(흰색)(혹은 255)으로 변환시키는 것을 의미합니다. 임계값 T(밝기)를 기준으로 즉 T보다 어두운 픽셀은 검정으로, T보다 밝은 픽셀은 흰색으로 변환합니다.
하지만 영상에서 최적의 T값은 계속 변하게 됩니다. 이러한 T값을 자동으로 찾는 방법으로는 전역고정이진화, 지역가변 이진화, Hysteresis thresholding등이 있습니다.
1. 전역고정이진화
전역고정이진화는 한 이미지에 대한 임계값을 하나로 고정하여 threshold를 진행합니다. 이때 T값을 자동으로 찾는 방법으로는 Otsu's method가 있습니다.
어두운 픽셀들의 비율을 α
, 밝기 평균을 μ1
, 분산을 σ1^2
, T보다 밝은 픽셀들의 비율을 β
, 밝기 평균을 μ2
, 분산을 σ2^2
라 했을 때 (α+β=1), intra-class 분산과 inter-class 분산은 각각 다음과 같습니다.
intra-class variance = ασ1^2+βσ2^2 --- (1)
inter-class variance = αβ(μ1-μ2)^2 --- (2)
(1)을 최소화하는것은 (2)를 최대로 만드는것과 동일합니다.
2. 지역가변이진화
밝기가 급격하게 변하는 이미지에서는 전역고정이진화를 적용했을때 원하는 임계값이 검출이 되지 않습니다. 이러한 경우에는 각 픽셀마다 T값을 다르게 지정하는 가변 threshold를 진행해야 합니다. 지역 가변 이진화 알고리즘으로는 여러가지 방법이 있지만, 이 글에서는 대표적으로 1가지 알고리즘을 소개합니다.
OpenCV에서 adaptiveThreshold라는 이름으로 제공하는 함수에서는 다음과 같은 방법을 사용합니다. 영상의 각 픽셀마다 서로 다른 threshold를 사용하며 임계값 T는 해당 픽셀을 중심으로 n*n주변 영역의 밝기 평균에 상수 C를 빼서 결정합니다.
주변 영역의 크기와 상수 C의 값에 따라 서로 다른 결과가 나타날 수 있으며, 이미지의 특징에 따라 적절히 값을 조절하면 좋은 결과를 얻을 수 있습니다.
과제 2
- Otsu's method를 이용한 전역고정이진화를 구현하시오
Hint : 반복문을 이용하여 T를 0부터 255까지 검사하며 (1)을 최소 혹은 (2)를 최대를 만족하게 만드는 T값을 검출하고 이 값을 이용하여 이진화를 진행하면 됩니다.
- 한 픽셀을 중심으로 N*N영역의 밝기평균을 이용한 지역가변이진화를 구현하시오(상수 C의 값은 본인이 원하는대로 사용하여도 무관함)