OpenCV로 배우는 영상 처리 및 응용/ 화소 처리

영상 화소의 접근

at

  • 행렬의 지정된 원소(화소)에 접근하는 템플릿 함수
반환형 이름 파라미터
_Tp& at int i,
_Tp& at int i, int j,
_Tp& at int i, int j, int k
_Tp& at Point pt
_Tp& at const int* idx
_Tp& at const vec<int, n>& idx

ptr

  • 행렬에서 지정된 행에 대한 포인터를 반환한다.

MatIterator/ MatConstIterator

  • Mat의 반복자 클래스
  • MatIterator는 읽기와 쓰기가 가능한 반복자를 반환
  • MatConstIterator는 읽기만 가능한 반복자를 반환
반환형 이름 파라미터
MatIterator_<_Tp> begin  
MatIterator_<_Tp> end  
MatConstIterator_<_Tp> begin  
MatConstIterator_<_Tp> end  

화소 밝기 변환

밝기 조절

  • Mat에 at을 각 원소별로 접근하고 그 값을 제어
  • Mat에 Rect를 이용해서 범위을 가져오고 그 값을 제어
  • Mat에 상수를 더해서 영상을 밝게 만들 수 있고, 상수를 빼서 영상을 어둡게 만들 수 있다.
  • 255에서 Mat을 빼면 영상을 반전시킬 수 있다.

영상 합성

  • 두 Mat을 더하면 영상 합성이 되고, 두 Mat을 빼면 차영상(difference image)가 된다.

명암 대비

  • 낮은 명암 대비 영상은 밝은 부분과 어두운 부분의 차이가 크지 않아 전체적으로 어둡거나 밝은 영상이고, 높은 명암 대비 영상은 밝은 부분과 어두운 부분의 차이가 큰 영상이다.
  • 영상 내에서 명암 대비를 제어하려면 어두운 부분은 더 어둡게, 밝은 부분은 더 밝게 만들어야 하는데, 이는 곱셈 연산을 통해 가능하다.
  • 명암 대비를 늘리기 위해서는 1.0 이상의 값을 곱하고, 명암 대비를 줄이려면 1.0 이하의 값을 곱해주면 된다.

히스토그램

  • 히스토그램이란 어떤 데이터가 얼마나 많은지를 나타내는 도수 분포표를 그래프로 나타낸 것.
    • 보통 히스토그램에서는 가로축이 계급, 세로축이 빈도수를 뜻한다.
    • 영상 처리에서 히스토그램은 화소의 분포를 나타내는 지표이기 때문에 이 분포를 이해하면 영상의 특성을 판단할 수 있는 유용한 도구가 될 수 있다.
반환형 이름 파라미터 내용
void calcHist const Mat* images,
int nimages,
const int* channels,
InputArray mask,
OutputArray hist,
int dims,
const int* histSize,
const float** ranges,
bool uniform = true,
bool accumulate = false
다차널의 행렬에서 다차원의 히스토그램을 그리는 함수

히스토그램 스트레칭(stretching)

  • 히스토그램 스트레칭이란 명암 분포가 좁은 히스토그램을 좌우로 잡아 당겨서 고른 명암 분포를 가진 히스토그램이 되게 하는 것. 이를 통해 영상의 화질이 변경되고 개선될 수 있다.
  • 히스토그램의 스트레칭 대상이 되는 두 곳이 빈도갑이 가장 낮은 화소값과 가장 높은 화소값이 된다.
    • 가장 낮은 화소값을 0으로 당기고, 가장 높은 화소값을 255로 당기면 그 중간의 화소값들은 각각의 비율에 따라 스트레칭 된다. (가장 낮은 화소값은 히스토그램 그래프 상 가장 왼쪽, 가장 높은 화소값은 가장 오른쪽이 된다)
  • 히스토그램 스트레칭 공식
    • 새 화소값 = (화소값 – low) x 255 / (high – low)
      • high는 최고 화소값, low는 최저 화소값

히스토그램 평활화(equalization)

  • 히스토그램 평활화 알고리즘은 ‘분포의 균등’이라는 방법을 이용해 명암 대비를 증가시킨다. 이를 통해 영상의 인지도를 높이며, 영상의 화질을 개선할 수 있다.
  • 히스토그램의 분포가 좁지는 않지만 특정 부분에서 한쪽으로 치우친 명암 분포를 가진 영상들은 명암 분포가 좁지 않기 때문에 히스토그램 스트레칭으로는 문제가 해결되지 않는다. 이런 영상에서는 히스토그램 평활화를 이용해야 한다.
  • 히스토그램 평활화 과정
    • 영상의 히스토그램을 계산한다.
    • 히스토그램 빈도값에서 누정 빈도수(누적합)를 계산한다.
    • 누적 빈도수를 정규화(정규화 누적합)한다.
    • 결과 화소값 = 정규화 누적합 * 최대 화소값
  • 평활화 화소값 계산식
    • 평활화 결과 화소값 = 입력 화소의 정규화 누적합 x 최대 화소값

평활화 예제

  • 아래와 같은 분포를 가진 이미지가 있다고 하자
0 2 2 1
1 2 3 2
1 2 3 2
1 3 1 7
  • 각 화소값에 대한 빈도수, 누적 빈도수, 정규화 누적합, 평활화 결과는 아래와 같다.
    • 평활화 결과는 반올림해서 사용한다.
화소값 0 1 2 3 4 5 6 7
빈도수 1 5 6 3 0 0 0 1
누적 빈도수 1 6 12 15 15 15 15 16
정규화 누적합 1/16 = 0.0625 6/16 = 0.375 12/16 = 0.75 15/16 = 0.9375 15/16=0.9375 15/16=0.9375 15/16=0.9375 16/16 = 1
평활화 결과 0.0625 x 7=0.4375 0.375 x 7=2.625 0.75 x 7 = 5.25 0.9375 x 7 = 6.5625 0.9375 x 7 = 6.5625 0.9375 x 7 = 6.5625 0.9375 x 7 = 6.5625 1 x 7 = 7

컬러 공간 변환

RGB 컬러 공간

  • 빛의 3원색을 이용해 만든 컬러 공간. 빨강(red), 파랑(blue), 초록(green)으로 이루어진다.
  • 원색의 조합은 섞을 수록 밝아지기 때문에 가산혼합이라 한다.

CMY(K) 컬러 공간

  • 색의 삼원색을 이용한 컬러 공간. 빛의 삼원색과 보색 관계에 있는 청록(cyan), 자홍(magenta), 노랑(yellow)로 이루어진다.
  • 색은 섞을수록 어두워지기 때문에 감산 혼합이라 한다.

HSI 컬러 공간

  • HSI는 색상(Hue), 채도(Saturation), 명도(Intensity Value)라는 3가지 변수로 구분된다.
    • 색상은 빛이 물체에서 반사되어 나온 색으로 파장을 시각적으로 표현한 값.
    • 채도는 색의 순수한 정도로 순색(pure color)에 흰색의 혼합 비율에 따라 0~100의 값을 갖는다.
    • 명도는 빛의 세기로 색의 밝고 어두운 정도를 나타낸다. 0~100의 값이며 0이면 검은색, 100이면 흰색이 된다.
  • RGB 컬러 공간에서 HIS 컬러 공간으로 변경하는 공식
    • H
      • If B ≤ G
        • H = cos^{-1} [ {((R - G) + (R + B)) \times 0.5 \over \sqrt{(R - G^{2}) + (R - B) \times (G - B)} } ]
      • Else
        • H = 360 - H
    • S
      • S = 1 - {3 \times min (R, G, B) \over (R + G + B)}
    • I
      • I = {(R + G + B) \over 3}
  • HSV 컬러 공간에 대한 변환 공식
    • H
      • If V = R
        • H = {(G - B) \times 60 \over S}
      • Else if V = G
        • H = {(G - B) \times 60 \over S} +120
      • Else if V = B
        • H = {(G - B) \times 60 \over S} + 240
    • S
      • If V = 0
        • S = 0
      • Else
        • S = {min (R, G, B) \over V}
    • V
      • V = max(R, G, B)

YCrCb 컬러 공간

  • YCrCb 컬러 공간은 영상 시스템에서 사용되는 색공간의 일종으로 영상 데이터를 압축하는 방식이다.
  • 인간의 시각은 밝기에 민감하지만 색상에는 덜 민감하다는 점을 이용해서 YCrCb 컬러 공간에서는 색차 신호인 Cr, Cb 성분을 Y 성분보다 상대적으로 낮은 해상도고 구성해서 인간의 시각에서 화질의 큰 저하 없이 영상 데이터의 용량을 감소 시킬 수 있다.
  • RGB와 YCbCr 변환 공식
    • Y = 0.299R + 0.857G + 0.114B
    • Cb = (R - Y) \times 0.564 + 128
    • Cr = (B - Y) \times 0.713 + 128
    • R = Y + 1.403 \times (Cr - 128)
    • G = Y - 0.714 \times (Cb - 128) - 0.344(Cb - 128)
    • B = Y + 1.773 \times (Cb - 128)
    • R = Y + 1.403 x (Cr – 128)
    • G = Y – 0.714 x (Cb – 128) – 0.344 x (Cb – 128)
    • B = Y + 1.773 x (Cb – 128)

YUV 컬러 공간

  • YUV 컬러 공간은 TV 방송 규격에서 사용하는 컬러 표현 방식이다. PAL 방식의 아날로그 비디오를 위해 개발되었지만 디지털 비디오에서도 유럽의 비디오 표준으로 사용하고 있다.
  • RGB와 YUV 변환 공식
    • Y = 0.2160R + 0.7142G + 0.0722B
    • U = -0.0999R - 0.3360G + 0.4360B
    • V = 0.6150R - 0.5586G - 0.05639B
    • R = Y + 1.28033V
    • G = Y - 0.21482U - 0.38059V
    • B = Y + 2.12798U
[ssba]

The author

지성을 추구하는 디자이너/ suyeongpark@abyne.com

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.