신호처리의 한 분야인데 영상을 대상으로 하는 것.
Pixel : 영상의 기본단위. 화소라고도 한다.
Bitmap : 픽셀 값들을 2차원 배열로 만든 것
Image Resolution : 픽셀의 갯수
Aspect Ratio : 한 이미지의 가로/세로 크기비
half-tone printing : 아날로그 인쇄에서 쓰던거..
Cornea(각막) : 눈의 외부를 보호한다.
Iris(홍채) : 동공의 크기를 조절해서 눈으로 들어가는 빛의 양을 조절한다.
Lens(수정체) : 초점을 맞춘다
Forvea : 시야의 중심에 위치해 있다. 정밀한 인식을 가능하게 한다.
Retina(망막) : 상이 맺히는 곳. 뇌에서 사물을 지각하게 한다.
Cone(원추세포, 추체) : 색에 반응한다. red, green, blue 구별가능
중심에 분포하고 있다.
→ 가장자리는 색보는 능력이나 디테일 능력 떨어짐
Rod(간상세포, 간체) : 밝기에 반응한다.
망막 전역에 분포하는데 가운데에는 별로 없음
Blind Spot : 신경다발의 통로… 상이 맺히지 않는다.
변화의 차이를 50%일 경우 인식 할 수 있는 빛의 세기의 차이 비
Mach band effect
: 사람이 인지하는 빛의 세기는 실제 intensity만 가지고 계산할 수 없다.
아날로그 신호를 디지털 신호로 변환하는 프로세스
Sampling(표본화) : Digitization of coordinate
Nyquist Theorem
: 좌표상의 양자화를 어떻게 할까?
→ 보존하려는 최대 주파수의 2배로 sampling 해야해
Quantization(양자화) : Digitization of amplitude
크기를 조절하는 것
Saturation : 값이 더 올라갔어야 되는데 못 올라가고 잘린 것
dp : 1인치 공간에서 점을 몇 개 가져갈 수 있는지!
Sampling rate ↓ resolution ↓ 격자하나의 크기↑
비트맵 : 윈도우즈에서 영상을 표현하기 위해 사용되는 윈도우즈 GDI 오브젝트
→ 영상을 2차원 array로 표현하는 것 (픽셀 값으로 표현)
벡터그래픽 : 점 선 면등의 기본적인 도구를 이용해서 그림을 그리는 것
→ 영상을 선의 방정식으로 표현
윈도우즈 GDI : 윈도우즈에서 화면 및 프린터 출력을 위해 사용되는 도구들
(펜, 브러쉬, 비트맵, 폰트…)
장치 의존 비트맵(DDB) : 출력장치의 설정에 따라 출력이 다르게 나타나는 것
장치 독립 비트맵(DIB) : 출력장치가 달라지더라도 항상 정상적인 형태로 출력되는 비트맵
BMP 파일은 윈도우즈 환경에서 비트맵을 DIB의 형태로 저장한 파일포맷
비트맵파일헤더
- 비트맵인포헤더
- 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바이트 단위로 정렬된다.
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
이 순서로 진행..
pallete라고도 부름!
8bit color index를 24bit color information으로 매핑해준다.
영상내의 모든 픽셀 값을 하나하나 반전시키는 것
$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으로 값을 조정해주어야 한다.
지수법칙변환 : 모니터, 프린터 등은 지수법칙의 특성을 갖는다.
출력값은 입력값의 감마승한 값에 비례한다.
감마값이 증가할 수록 입력값을 올려도 밝아지지 않다가 어느순간부터 급속도로 밝아진다.
히스토그램 : 도수분포표를 그래프로 나타낸 것
가로축이 계급 (변수의 구간) , 세로축이 도수
영상 내에서 각 그레이스케일 값에 해당하는 픽셀의 개수를 함수의 형태로 나타낸 것
정규화된 히스토그램 : 각 픽셀의 개수를 영장 전체 픽셀 개수로 나누어준 것
해당 그레이스케일 값을 갖는 픽셀이 나타날 확률
영상의 히스토그램을 그레이스케일 전 구간에서 골고루 나타나도록 해주는 것
한 쪽에 치우친 히스토그램을 균등한 분포를 가진 히스토그램으로 바꿔줌
히스토그램을 벽 쪽으로 밀어 붙인 다음 다시 당겨서 균등한 분포를 가지게 할 수 있다는 이론
밀어붙인다 : Black(히스토그램 값 0)을 찾아서 뺄셈 연산을 수행한다.
255를 제외한 나머지 부분을 0~1로 만든다.
당긴다 : 0~255 값을 가지도록 고르게 분포시켜서 0~1 값을 가지게 한다.
새로운 명암값 =
255 * (기존 명암값 - 왼쪽에 존재하는 최소값) / (오른쪽에 존재하는 최대값 - 왼쪽에 존재하는 최소값)
히스토그램 스트레칭은 한쪽이나 중앙으로 치우친 히스토그램을 가진 영상을 개선하는데 적용한다.
히스토그램 평활화는 빈약한 히스토그램 분포를 가진 영상에 적용한다.
서로 상호보완적인 관계이기때문에 스트레칭하고 평활화 해도 됨!
덧셈연산 : $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같은 손실이 있는 포맷에서는 값이 날아가서 불가능하다.
필터링
영상에서 특정 주파수 성분을 제거하는 작업
영상의 픽셀 값을 그대로 이용해서 영상에서 원하는 정보만을 걸러내는 영상처리 기법
마스크를 이용하는 방법
→ 마스크 연산시 원본 영상의 복사본을 만들어 픽셀 값을 참조해야 한다.
최외곽 픽셀 처리방법
평균값 필터
영상의 특정 좌표값을 주변 픽셀들의 그레이스케일 값들의 산술 평균 값으로 설정하는 필터
밝은색은 어두워지고 어두운색은 밝아지고 함
가중평균값 필터
평균값 필터의 일종
필터마스크의 가운데 위치한 픽셀에 가중치를 더 주는 방법
가우시안 함수
1차원 가우시안 함수를 이용해서 2차원 가우시안 함수도 만들 수 있다.
정도가 세질수록 중심값의 가중치가 작아지고 영향을 받는 픽셀이 늘어나고 점점 뿌얘짐
언샤프 마스크 필터
입력영상 : 가중평균값 필터를 사용해서 부드럽게 만든영상
뺄셈연산 : 입력영상 - 가중 평균값 필터 결과영상
결과영상 : 입력영상 + 뺄셈결과 영상
라플라시안 필터
영상의 2차 미분을 활용한다.
하이부스트 필터
알파가 1이면 언샤프 마스크필터랑 동일하다.
알파값으로 밝은 값들은 더 밝게 해주는 것인듯
균일 분포
0부터 RAND_MAX까지의 유사 임의 정수를 생성한다.
정상분포
평균이 0이고 표준편차가 1인 가우시안 분포
소금&후추 잡음
입력영상의 임의의 좌표픽셀 값을 0이나 255로 설정하는 잡음
미디언 필터
입력영상의 (x,y) 좌표 주변 픽셀값들의 값들을 오름 / 내림 차순으로 정렬하여 그 중앙에 있는 픽셀값을 사용한다. (경계선 뭉개짐!)
경계선 보전 잡음 제거
경계선 정보는 살리고 잡음만 제거하는 것 → 비등방성 확산 필터
차이가 많이난다는건 가장자리라는 거니까 나도 많이 변하자! 하는 거임
영상을 특정 크기만큼 가로 또는 세로 방향으로 이동시키는 변환
영상의 크기를 원본영상보다 크게 또는 작게 만드는 변환
순방향 매핑 : 빈 홀이 생기는데 이걸 역방향 매핑으로 해결한다.
역방향 매핑 : x,y값이 실수형으로 계산되는 문제가 생긴다.
→ 보간법을 이용해서 해결하자
실수 좌표 상에서의 픽셀값을 결정하기 위해 주변 픽셀값을 이용하여 값을 추정하는 방법
최근방 이웃 보간법 : 가장 가까운 위치에 있는 픽셀의 값을 참조
빠르고 구현하기 쉽지만 계단현상이 생긴다.
양선형 보간법 : 실수 좌표를 둘러싸고 있는 네 개의 픽셀값에 가중치를 곱한 값들의 선형합으로 결과영상의 픽셀값을 구한다.
비교적 빠른편이며 계단현상도 감소한다.
다만 Edge부분은 급속도로 값이 변하는데 얘는 Edge부분도 완만하게 함
3차 회선 보간법 : 실수 좌표를 둘러싸고 있는 16개의 픽셀 값에 3차 함수를 이용한 가중치를 부여하여 결과 영상 픽셀의 값을 계산하는 것
가로로 4번 세로로 1번 3차 회선 보간법 수행
Edge부분이 살아있고 덜 뿌옇다
영상을 특정 각도만큼 회전시키는 변환
코마싸싸코..
특수각은 sin cos 안쓰고도 가능하다.
식은 안외워도 될듯.
1차원 데이터에 대한 이산 푸리에 변환 (DFT)
입력 신호를 sin 함수와 cos 함수를 기저 함수로 사용하여 주파수 공간으로 변환
DFT가 u고 IDFT가 x임
실수로 구성됨
2차원 영상의 푸리에 변환
결과는 복소함수로 표현됨
행과 열단위로 수식을 분리해서 개선할 수 있다
푸리에 변환 공식에서 반복되는 연산을 없앰으로써 푸리에 변환 계산 속도를 향상시키는 알고리즘
입력데이터의 개수가 2의 승수일 때에만 가능하다.
짝수 번째 데이터들과 홀수 번째 데이터들을 이용해서 K개의 푸리에 변환 결과를 얻으면 나머지 K개의 푸리에 변환 결과는 복잡한 연산 없이도 구할 수 있다!
일반 이산푸리에연산이 N^2번의 곱셈이 필요했다면 고속푸리에 변환은 N번의 곱셈과 덧셈 연산이 필요하다.
저역 통과 필터 : 영상의 주파수 성분중에서 저주파에 해당하는 성분만 통과시키는 필터
차단주파수보다 낮으면 1 높으면 0
고역 통과 필터 : 영상의 주파수 성분중에서 고주파에 해당하는 성분만 통과시키는 필터
차단주파수보다 높으면 1 낮으면 0
analog signal :
음파의 세기가 어떻게 변하는지를 시간축으로 늘려놓은것.
시간축상에서 연속적
범위내의 어떤 값이든 가질 수 있다.
continuous-time signal :
amplitude 값은 상관없구 time 축에서만 연속적인 신호
discrete-time signal :
amplitude 값은 상관없구 time 축에서만 불연속적인 신호
값들의 sequence로 표현 가능하다.
digital signal :
시간축의 특정한 점에서만 값이 존재하고 amplitude 축에서도 가질 수 있는 값의 범위가 한정되어있다.
time = space
정수던 실수던 한정된 값으로 바꾸기 위해 축을 따라서 sampling 하는 것
low pass pilter : 주파수 낮은 애들만 통과시킨다.
값이 급하게 변한다 = 고주파수 성분이 포함되어 있다
고주파 성분을 날려버렸으니까 blur 처리된 영상이 나온다.
푸리에 변환은 신호의 주기성, 시간의 연속성 등에 따라 변환식의 형태가 나누어진다.
FS (푸리에 급수) : 연속시간, 주기
함수가 반드시 주기적이어야 한다는 제약조건이 있다.
FT (푸리에 변환) : 연속시간, 비주기
푸리에 급수의 약점을 보완하기 위해 제안된 적분변환이다.
주기를 무한대로 보내서 비주기함수를 변환한 것.
시간영역의 함수를 주파수영역의 함수로 바꾸어 생각하는 것
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보다 작은 주파수 대역에 대하여 이야기 할 수 없다. (주파수 해상도가 늘어났음)