영상 센서는, 물체의 빛의 양을 캡처한다.
CCD camera (Global)
High-end DSLR camera
동일 시간에 모든 줄을 읽어들인다.
CMOS camera (rolling)
Smartphone
각 줄(행)마다 읽어들이는 시간이 다르다.
--> 건물은 가만히 있고, 카메라만 양옆으로 흔들어도, 위아래 시간대가 달라서 건물이 움직여보인다!
이미지를 표현하는 가장 작은 단위가 픽셀인데,
좌표는 모두 정수이다.
만약, 0~255 사이의 값이라면 픽셀값은 정수이고,
0~1 사이의 값이라면 픽셀값은 실수이다.
둘 중, 0~255 사이의 값으로 표현하는 방식이 더 정확하다.
Sampling, Quantization
이미지에서 정수 좌표들을 뽑아내는 것.
예를 들어, 어떤 이미지에서 한 선을 추출해서, 그 선을 이동하면서 변하는 밝기값을 그래프로 나타낼 수 있다.
그 그래프에서 정수 값들만 찾아내는 것을 sampling,
그 정수 값들만 이용해서 그래프로 나타내는 것이 quantization.
2-D Array - 흑백. 좌표값까지 표현하면 3차원으로 표현할 수 있다.
3-D tensor - 컬러. 좌표값까지 표현하면 4차원으로, 그림으로는 표현이 불가능하다.
color -> gray로 바꾸는 방법은 여러 가지가 있는데,
가장 편한 방법으로는 (R+G+B)/3 을 하거나,
가장 정확한 방법으로는 (0.2125R + 0.7154G + 0.0721B) 를 할 수 있다.
그래서 컬러에서 흑백으로 바꾼 이미지는 다시 컬러로 바꾸기 어려운데,
이럴 때 바꿀 수 있는 방법으로는,
약간의 힌트(color scribble)를 줘서 바꾸는 image colorization 기법이 있다.
이러한 학습을 토대로 흑백 이미지를 컬러로 바꿀 수 있다.
이는 진짜 색으로 돌아가는 건 아니지만, 그럴싸한 색으로 바뀔 수 있다.
Bayer colot pattern
한 지점에 빨/초/파 값 중 하나의 값만 받을 수 있음. 이 패턴을 하면 인식이 쉬움.
초록 값이 가장 많음.
근데 여기서, 빨강 따로 초록 따로 파랑 따로 채널을 만들어서, interpolated하여 빈공간을 채우면 final image가 됨.
이미지를 읽을 때, 가로로 읽는 row major(spanning), column major(spanning)이 있는데, 보통 row로 읽는다.
3channels일 때, (H, W, C)로 된다.
근데 보통, (C, H, W)로 가장 나중에 처리될 수록 앞에 쓴다.
이미지(frame)수가 많을 수록 고화질의 영상이 되고, 이를 high frame rate라 한다.
보통 R = (1, 0, 0), G = (0, 1, 0), B = (0, 0, 1)이 되고, 각각 8bit이다. W = (1, 1, 1) = R + G + B이다.
Image Files and Formats
GIF : multiplt images per file, 총 24bit인 RGB보단 bit수가 작은 color map을 이용해 계산량이 적다.
PNG : 무손실 압축
JPEG : 손실 압축 (여러 번 퍼오면 화질 저하)
Point processing
한 픽셀을 한 픽셀에 대응시켜 변환하는 기법이다.
입력이 같으면 출력도 같고,
픽셀의 위치는 전혀 상관없다.
만약 어떤 범위를 한 픽셀에 대응시킨다면, 이것은 point processing이 아니다. filtering!
point processing 기법으로는,
밝게, 어둡게 : +, -하기
대조 높게, 낮게 : *, / 하기
왜냐면, +, - 는 픽셀값 간의 차이는 달라지지 않지만,
*, /는 픽셀값 간 차이가 달라진다.
gamma 값에 따른 Point processing 성능 차이?
Histogram으로 표현하기
픽셀값이 0~255이기에 0, 1, 2, ..., 255의 정수값들에만 히스토그램 값이 있다.
보통, 배경 색에 따라 분포가 결정되는데, 배경이 픽셀 개수가 많기 때문이다. 만약 배경이 회색이면 히스토그램의 중간부분의 값이 높다.
보통, 좋은 사진은 히스토그램의 분포가 균일분포같을 때 생긴다.
만약 어떤 사진의 분포가 한 쪽에 몰려있다면, 픽셀값이 다 비슷하기에 사진에 담겨있는 내용이 희미하게 보일 것이다.
따라서 히스토그램의 몰려있는 분포를 퍼뜨리는 stretching을 하면 contrast가 높아져서 좋은 사진이 될 것이다.
예를 들어 만약 픽셀값이 0~12까지 존재하는데, 3~7 사이에만 값들이 몰려있다면, 임의로 3~7을 1~10까지 늘릴 것이라고 결정한다.
여기서
이런 식이 발생하게 된다. +1은, i(픽셀값)가 3인 경우, 1로 변환할 것이기 때문에 생긴 것이다.
만약 i의 범위가 3~7 사이인 경우 이 식에 대입하면 된다.
그치만 만약 그 이외의 범위인 경우,
i<3이면 최솟값인 (0, 0)에서 (3, 1)을 이은 직선에 대입하고,
i>7이면 최댓값인 (12, 12)에서 (7, 10)을 이은 직선에 대입하면 된다.
이런 과정을 거쳤을 때, 이상적인 경우는 가장 균일분포에 가까운 경우이다.
이 히스토그램을 균일분포로 바꾸는 함수를 잘 뽑는 것이 목표이다.
히스토그램 전체를 총 픽셀수로 나누면, 확률로 표현 가능한데, 이는 총합이 1인 pdf로 볼 수도 있다.
Histogram Equalization
다 더하는 sigma가 평탄화 기능을 한다는 이유는?
-> f_s(S) = 1 이라는 식을 적용한 것이므로, 그나마 균일 분포에 가까워질 수 있음.
transformation function을 그렸을 때, 기울기가 1에 가깝다면 y = x와 비슷한 것이기에, 평탄화 작업이 거의 적용되지 않았다는 뜻. 즉, 거의 바뀌지 않았다는 뜻. ==> 평탄화 작업을 수행하지 않아도 이미 좋은 이미지라는 뜻
가끔 histogram equalization을 했을 때, 과한 왜곡이 되는 경우도 있는데, 그 이유는
만약 검정 옷을 입고 있다면.. 보통 50 이하여야 하는데, 평탄화를 하면 이게 안 맞춰질 수도
출처 : 충남대 고영준 교수님 강의자료
'AI > 컴퓨터비전' 카테고리의 다른 글
Segmentation (1) | 2024.06.16 |
---|---|
Morphological (0) | 2024.06.15 |
edge detection (nms 고치기) (0) | 2024.06.15 |
image resizing (0) | 2024.06.15 |
Image filtering (0) | 2024.06.15 |