Search
Duplicate

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

영상 화소의 접근

at

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

ptr

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

MatIterator/ MatConstIterator

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

화소 밝기 변환

밝기 조절

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

영상 합성

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

명암 대비

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

히스토그램

히스토그램이란 어떤 데이터가 얼마나 많은지를 나타내는 도수 분포표를 그래프로 나타낸 것.
보통 히스토그램에서는 가로축이 계급, 세로축이 빈도수를 뜻한다.
영상 처리에서 히스토그램은 화소의 분포를 나타내는 지표이기 때문에 이 분포를 이해하면 영상의 특성을 판단할 수 있는 유용한 도구가 될 수 있다.
Search
반환형
이름
파라미터
내용
void
Open
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 최대 화소값

평활화 예제

아래와 같은 분포를 가진 이미지가 있다고 하자
Search
제목
0
2
2 1
1
1
2
3
2
1
2
3
2
1
3
1
7
각 화소값에 대한 빈도수, 누적 빈도수, 정규화 누적합, 평활화 결과는 아래와 같다.
평활화 결과는 반올림해서 사용한다.
Search
화소값
0
1
2
3
4
5
6
7
빈도수
Open
1
5
6
3
0
0
0
1
누적 빈도수
Open
1
6
12
15
15
15
15
16
정규화 누적합
Open
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
평활화 결과
Open
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=cos1[(RG)+(R+B))×0.5(RG2)+(RB)×(GB)]H = \cos^{-1}[{(R-G) + (R+B)) \times 0.5 \over \sqrt{(R-G^{2}) + (R-B) \times (G-B)}}]
Else
H=360HH = 360 - H
S
S=13×min(R,G,B)(R+G+B)S = 1 - {3 \times \min(R, G, B) \over (R+G+B)}
I
I=(R+G+B)3I = {(R + G + B) \over 3}
HSV 컬러 공간에 대한 변환 공식
H
If V = R
H=(GB)×60SH = {(G-B) \times 60 \over S}
Else if V = G
H=(GB)×60S+120H = {(G-B) \times 60 \over S} +120
Else if V = B
H=(GB)×60S+240H = {(G-B) \times 60 \over S} + 240
S
If V = 0
S=0S = 0
Else
S=min(R,G,B)VS = {\min(R, G, B) \over V}
V
V=max(R,G,B)V = \max(R, G, B)

YCrCb 컬러 공간

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

YUV 컬러 공간

YUV 컬러 공간은 TV 방송 규격에서 사용하는 컬러 표현 방식이다. PAL 방식의 아날로그 비디오를 위해 개발되었지만 디지털 비디오에서도 유럽의 비디오 표준으로 사용하고 있다.
RGB와 YUV 변환 공식
Y=0.2160R+0.7142G+0.0722BY = 0.2160R + 0.7142G + 0.0722B
U=0.0999R0.3360G+0.4360BU = -0.0999R - 0.3360G + 0.4360B
V=0.6150R0.5586G0.05639BV = 0.6150R - 0.5586G - 0.05639B
R=Y+1.28033VR = Y + 1.28033V
G=Y0.21482U0.38059VG = Y - 0.21482U - 0.38059V
B=Y+2.12798UB = Y + 2.12798U