1장 영상 처리의 개요

영상처리란

신호처리의 한 분야인데 영상을 대상으로 하는 것.


Graphics / Image Data Types

Pixel : 영상의 기본단위. 화소라고도 한다.

Bitmap : 픽셀 값들을 2차원 배열로 만든 것

Image Resolution : 픽셀의 갯수

Aspect Ratio : 한 이미지의 가로/세로 크기비

half-tone printing : 아날로그 인쇄에서 쓰던거..


2장

Cornea(각막) : 눈의 외부를 보호한다.

Iris(홍채) : 동공의 크기를 조절해서 눈으로 들어가는 빛의 양을 조절한다.

Lens(수정체) : 초점을 맞춘다

Forvea : 시야의 중심에 위치해 있다. 정밀한 인식을 가능하게 한다.

Retina(망막) : 상이 맺히는 곳. 뇌에서 사물을 지각하게 한다.

Blind Spot : 신경다발의 통로… 상이 맺히지 않는다.



Weber Ratio

변화의 차이를 50%일 경우 인식 할 수 있는 빛의 세기의 차이 비


Mach band effect : 사람이 인지하는 빛의 세기는 실제 intensity만 가지고 계산할 수 없다.


Digitization

아날로그 신호를 디지털 신호로 변환하는 프로세스

Saturation : 값이 더 올라갔어야 되는데 못 올라가고 잘린 것

dp : 1인치 공간에서 점을 몇 개 가져갈 수 있는지!


Sampling rate ↓ resolution ↓ 격자하나의 크기↑


3장 BMP 파일의 이해

비트맵 개요

비트맵 : 윈도우즈에서 영상을 표현하기 위해 사용되는 윈도우즈 GDI 오브젝트

→ 영상을 2차원 array로 표현하는 것 (픽셀 값으로 표현)

벡터그래픽 : 점 선 면등의 기본적인 도구를 이용해서 그림을 그리는 것

→ 영상을 선의 방정식으로 표현

윈도우즈 GDI : 윈도우즈에서 화면 및 프린터 출력을 위해 사용되는 도구들

(펜, 브러쉬, 비트맵, 폰트…)



BMP 파일의 이해

비트맵파일헤더 - 비트맵인포헤더 - RBGQUAD 배열 - color/index 배열


Bitmap file header :

42 4D : BMP 파일임을 나타냄

Size : BMP 파일의 크기

Reserved1,2 : 비워놓은 자리

offset : 실제 픽셀정보가 시작되는 위치


Bitmap Info Header (DIB Header) :

size : header의 크기

Width, Height : 가로 세로 픽셀 수

Plane : 항상 1임

BitCount : 픽셀 당 비트수

Compression : 0이면 압축 안한거

ImageSize : raw bitmap data의 이미지 크기

XpelsPerMeter,YPelsPerMeter : 미터당 가로세로 몇픽셀인지

NumColors : 팔레트안에 있는 색의 수. 0이면 BitCount에서 지정한 거 다씀

​ 아닐 때는 RGBQUAD 구조체의 크기

NumImportant : 0


RGBQUAD :

트루컬러 비트맵에서는 존재하지 않음

픽셀데이터가

bottom-up 으로 저장된다. → 상하가 뒤집힌 상태로 저장

Bitmap data는 4바이트 단위로 정렬된다.



4장 GIF 파일의 이해

GIF (Graphics Interchange Format)

LZW 알고리즘을 기반으로 한다.

8-bit color image를 위한 것이다.

4 pass interlacing을 지원한다.

GIF89a는 간단한 애니메이션을 지원한다.!

4-pass interlace display

0 - 8 - 16 → 4 - 12 - 20 → 2 - 10 - 18 → 1 - 9 - 17

이 순서로 진행..


Color Lookup Tables(LUTs)

pallete라고도 부름!

8bit color index를 24bit color information으로 매핑해준다.

  1. 이미지에 포함된 색을 3차원 공간에 점으로 찍는다.
  2. 얘네가 다 포함되는 제일 작은 박스를 그린다.
  3. 제일 긴 축을 찾아서 sorting한다.
  4. 픽셀수를 반으로 나눌 수 있는 중간값으로 나눈다.
  5. 제일 긴축을 찾는다.
  6. 8번 반복해서 256개의 박스로 나눈다.
  7. 이 박스들의 중간값이 LUT에 들어가는 entry 값이다.
  8. (가장자리에 있어서 옆 박스랑 더 가까우면 옆박스로 매핑해준다.)


6장 화질 향상 기법

영상 반전

영상내의 모든 픽셀 값을 하나하나 반전시키는 것

$g(x,y) = 255 - f(x,y)$


밝기와 명암비 조절

밝기조절 : $g(x,y)) = f(x,y) + n$

명암비 조절 : $g(x,y) = f(x,y) + (f(x,y) - 128) * a$

​ 알파를 0보다 작게잡으면 기울기가 완만해지고 차이가 줄어들음

​ 알파를 0보다 크게 잡으면 대비가 커짐

결과 영상의 픽셀 값이 255보다 커지거나 0보다 작아지면 255 또는 0으로 값을 조정해주어야 한다.



감마보정

지수법칙변환 : 모니터, 프린터 등은 지수법칙의 특성을 갖는다.

출력값은 입력값의 감마승한 값에 비례한다.

감마값이 증가할 수록 입력값을 올려도 밝아지지 않다가 어느순간부터 급속도로 밝아진다.


히스토그램 분석

히스토그램 : 도수분포표를 그래프로 나타낸 것

가로축이 계급 (변수의 구간) , 세로축이 도수

영상 내에서 각 그레이스케일 값에 해당하는 픽셀의 개수를 함수의 형태로 나타낸 것

정규화된 히스토그램 : 각 픽셀의 개수를 영장 전체 픽셀 개수로 나누어준 것

해당 그레이스케일 값을 갖는 픽셀이 나타날 확률


히스토그램 균등화

영상의 히스토그램을 그레이스케일 전 구간에서 골고루 나타나도록 해주는 것

  1. 히스토그램 생성
  2. 누적합 계산
  3. 정규화 누적합
  4. 반올림하여 수치화
  5. 화소위치 파악, 이전 위치에 매핑

한 쪽에 치우친 히스토그램을 균등한 분포를 가진 히스토그램으로 바꿔줌


히스토그램 스트레칭

히스토그램을 벽 쪽으로 밀어 붙인 다음 다시 당겨서 균등한 분포를 가지게 할 수 있다는 이론

새로운 명암값 =

255 * (기존 명암값 - 왼쪽에 존재하는 최소값) / (오른쪽에 존재하는 최대값 - 왼쪽에 존재하는 최소값)


히스토그램 스트레칭은 한쪽이나 중앙으로 치우친 히스토그램을 가진 영상을 개선하는데 적용한다.

히스토그램 평활화는 빈약한 히스토그램 분포를 가진 영상에 적용한다.

서로 상호보완적인 관계이기때문에 스트레칭하고 평활화 해도 됨!


7장 연산의 산술 및 논리 연산

영상의 산술 연산

덧셈연산 : $h(x,y) = f(x,y) + g(x,y)$

뺄셈연산 : $h(x,y) = f(x,y) - g(x,y)$

평균연산 : $h(x,y) = 1/2 [f(x,y) + g(x,y)]$

차이연산 : $h(x,y) = f(x,y) - g(x,y) $


AND연산 (논리곱) :

예로 든거는 Gray 128이기 떄문에 128보다 크거나 같은애들만 살아남아서 픽셀값이 128이거나 0이 된다.

OR연산 (논리합) :

예로 든거는 Gray 127이기 떄문에 128보다 크거나 같은애는 255가 된다.

픽셀값은 127아니면 255가 된다.


비트평면 분할

비트평면 : 영상의 각 비트에 해당하는 값을 이용하여 만든 이진 영상

데이터 숨기기 :

비트맵은 손실이 없기 때문에 비트맵에서만 가능하다.

GIF같은 손실이 있는 포맷에서는 값이 날아가서 불가능하다.


8장 다양한 공간적 필터링 기법

필터링

영상에서 특정 주파수 성분을 제거하는 작업


공간적 필터링

영상의 픽셀 값을 그대로 이용해서 영상에서 원하는 정보만을 걸러내는 영상처리 기법

마스크를 이용하는 방법

→ 마스크 연산시 원본 영상의 복사본을 만들어 픽셀 값을 참조해야 한다.


최외곽 픽셀 처리방법


영상 부드럽게 만들기

평균값 필터

영상의 특정 좌표값을 주변 픽셀들의 그레이스케일 값들의 산술 평균 값으로 설정하는 필터

밝은색은 어두워지고 어두운색은 밝아지고 함


가중평균값 필터

평균값 필터의 일종

필터마스크의 가운데 위치한 픽셀에 가중치를 더 주는 방법


가우시안 함수

1차원 가우시안 함수를 이용해서 2차원 가우시안 함수도 만들 수 있다.

정도가 세질수록 중심값의 가중치가 작아지고 영향을 받는 픽셀이 늘어나고 점점 뿌얘짐


영상 날카롭게 만들기

언샤프 마스크 필터

입력영상 : 가중평균값 필터를 사용해서 부드럽게 만든영상

뺄셈연산 : 입력영상 - 가중 평균값 필터 결과영상

결과영상 : 입력영상 + 뺄셈결과 영상


라플라시안 필터

영상의 2차 미분을 활용한다.


하이부스트 필터

알파가 1이면 언샤프 마스크필터랑 동일하다.

알파값으로 밝은 값들은 더 밝게 해주는 것인듯


잡음 생성

균일 분포

0부터 RAND_MAX까지의 유사 임의 정수를 생성한다.

정상분포

평균이 0이고 표준편차가 1인 가우시안 분포


소금&후추 잡음

입력영상의 임의의 좌표픽셀 값을 0이나 255로 설정하는 잡음


잡음 제거 - 비선형 필터

미디언 필터

입력영상의 (x,y) 좌표 주변 픽셀값들의 값들을 오름 / 내림 차순으로 정렬하여 그 중앙에 있는 픽셀값을 사용한다. (경계선 뭉개짐!)


경계선 보전 잡음 제거

경계선 정보는 살리고 잡음만 제거하는 것 → 비등방성 확산 필터

차이가 많이난다는건 가장자리라는 거니까 나도 많이 변하자! 하는 거임


9장 영상의 기하학적 변환

영상의 이동변환

영상을 특정 크기만큼 가로 또는 세로 방향으로 이동시키는 변환


영상의 크기변환

영상의 크기를 원본영상보다 크게 또는 작게 만드는 변환

순방향 매핑 : 빈 홀이 생기는데 이걸 역방향 매핑으로 해결한다.

역방향 매핑 : x,y값이 실수형으로 계산되는 문제가 생긴다.

→ 보간법을 이용해서 해결하자

보간법

실수 좌표 상에서의 픽셀값을 결정하기 위해 주변 픽셀값을 이용하여 값을 추정하는 방법


영상의 회전 변환

영상을 특정 각도만큼 회전시키는 변환

코마싸싸코..

특수각은 sin cos 안쓰고도 가능하다.


영상의 대칭 변환

식은 안외워도 될듯.


10장 주파수 공간에서의 영상처리

주파수 공간의 이해

1차원 데이터에 대한 이산 푸리에 변환 (DFT)

입력 신호를 sin 함수와 cos 함수를 기저 함수로 사용하여 주파수 공간으로 변환

DFT가 u고 IDFT가 x임

실수로 구성됨


2차원 영상의 푸리에 변환

결과는 복소함수로 표현됨

행과 열단위로 수식을 분리해서 개선할 수 있다


영상의 푸리에 변환

  1. 최대 그레이스케일 값이 255가 되도록 선형 반환
  2. 로그 반환
  3. 시프트 연산


고속 푸리에 변환 (FFT)

푸리에 변환 공식에서 반복되는 연산을 없앰으로써 푸리에 변환 계산 속도를 향상시키는 알고리즘

입력데이터의 개수가 2의 승수일 때에만 가능하다.

짝수 번째 데이터들과 홀수 번째 데이터들을 이용해서 K개의 푸리에 변환 결과를 얻으면 나머지 K개의 푸리에 변환 결과는 복잡한 연산 없이도 구할 수 있다!

일반 이산푸리에연산이 N^2번의 곱셈이 필요했다면 고속푸리에 변환은 N번의 곱셈과 덧셈 연산이 필요하다.


주파수 공간에서의 필터링

저역 통과 필터 : 영상의 주파수 성분중에서 저주파에 해당하는 성분만 통과시키는 필터

차단주파수보다 낮으면 1 높으면 0

고역 통과 필터 : 영상의 주파수 성분중에서 고주파에 해당하는 성분만 통과시키는 필터

차단주파수보다 높으면 1 낮으면 0


10-1장 Signals and FS/FS

Signal


Digitization

정수던 실수던 한정된 값으로 바꾸기 위해 축을 따라서 sampling 하는 것


주파수 공간에서의 필터링

low pass pilter : 주파수 낮은 애들만 통과시킨다.

값이 급하게 변한다 = 고주파수 성분이 포함되어 있다

고주파 성분을 날려버렸으니까 blur 처리된 영상이 나온다.


푸리에 변환

푸리에 변환은 신호의 주기성, 시간의 연속성 등에 따라 변환식의 형태가 나누어진다.

Time-Frequency Uncertainty Principle

Sampling Rate 가 고정되어 있을 때 N을 증가시키면 Bandwidth는 변화가 없고

Frequency Resolution이 좋아진다.


500 Hz로 샘플링한다고 가정할때

최대주파수는 나이키스트 정리에 의해서 500/2 = 250 Hz

1000개의 sample로 FFT를 한다고 하면

구간은 1000/500 = 2초

1000개의 주파수 대역을 얻는다고 하면

실제는 실수신호이므로 1000/2인 500개의 주파수 대역을 얻는다

주파수 해상도는

Sampling Rate / N = 260Hz / 500개 = 0.5Hz


따라서 0.5Hz보다 작은 주파수 대역에 대하여 이야기 할 수 없다.

2초보다 작은 시간구성의 특성에 대하여 이야기 할 수 없다.

주파수 해상도를 높이기 위해 2000개의 샘플을 묶어서 처리하면

260Hz / 2000개 = 0.13Hz

0.13Hz보다 작은 주파수 대역에 대하여 이야기 할 수 없다. (주파수 해상도가 늘어났음)