본문 바로가기
컴퓨터 과학

이미지 처리 요약

by pagehit 2021. 4. 22.
반응형

이미지(image)는 2차원의 신호(signal). 이미지 처리는 이 신호를 처리하는 것. 결국 신호처리와 연관된다.

정보를 나타내는 양이 신호. 예를 들어, 시간에 대한 1차원 신호로 음성(voice)이 있다. 공간에 대한 2차원 데이터가 이미지.

디지털 신호는 아날로그 신호를 이산적으로 샘플링한 것. 따라서 디지털 신호가 분석하기 쉽고, 정확도가 떨어진다.

이미지 필터는 선형적(linear)인 것과 비선형(non-linear)으로 나뉜다. 여기서 필터(filter)는 합성곱(convolution) 연산을 하는 convolution filter를 의미한다.

선형 필터(linear filter)의 대표적인 예는 mean filter이다. mean filter는 계수(coefficient)를 모두 1로 두고, 필터의 전체 픽셀 수로 나눈다. 전체 픽셀 수로 나누는 이유는 pixel intensity가 커지는 것을 조정하기 위해서이다. 계수를 1이 아닌 수로 정해 weighted mean filter를 만들 수 있으며, 이때 나누는 수는 total weight으로 한다. mean filter의 장점은 noise를 제거한다, image를 밝게 만든다, 정도이다. 단점은 blur 이미지를 만들며, spatial resolution이 감소한다.

비선형 필터의 대표 예는 median filter. sliding window에 포함되는 pixel 중 중앙값을 선택한다. 검은색과 흰색 점이 나타나는 salt-and-pepper noise와 impulse noise를 제거하는데 효과적.

max filter는 이미지의 밝은 부분을 향상시킨다.

min filter는 반대로 어두운 부분은 enhance.

일차, 이차 도함수(derivative)를 이용하면 edge detection이 가능하다. edge는 intensity가 변하는 부분이며, intensity의 변화는 일차, 이차 도함수로 측정 가능. (이미지의 intensity는 명암으로 간주, 즉 intensity가 강하면, 큰 값이면, 하얀색 밝다로 생각) edge가 있는 부분은 intensity가 급격히 변하는 부분 → 예를 들어 intensity가 증가 → 일차 도함수(first derivative)가 양수이며 edge에서 가장 큼 → edge 이전 부분에서 일차 도함수 증가하므로 이차 도함수는 양수 → edge 지난 부분부터 일차 도함수 감소하므로 이차 도함수는 음수 → 이차 도함수는 edge에서 0 → 이를 zero crossing이라함.

first derivative filter의 대표 예는 sobel filter.

-1 -2 -1
0 0 0
1 2 1
-1 0 1
-2 0 2
-1 0 1

위는 수평, 수직선을 찾기 위한 sobel filter, mask. sobel filter 계수의 합은 0, 이는 상수 픽셀은 도함수 필터의 영향을 받지 않음을 의미. derivative filter는 추가적인 noise를 발생시키므로 2와 -2를 사용해 smoothing 하게 만들어 줌.

 

또 다른 일차 도함수 필터는 Prewitt filter.

-1 -1 -1
0 0 0
1 1 1

 

-1 0 1
-1 0 1
-1 0 1

sobel filter와 같이 계수의 합이 0이지만 sobel filter 만큼 noise를 줄이지 못 함.

 

또 다른 edge detection filter는 canny filter(canny edge detector). 세 개의 인자 standard deviation, threshold 2개가 필요. (1) image smoothing을 위해 Gaussian filter 사용 (2) edge pixel의 중요한 특징은 gradient의 크기가 maximum이라는 것. 이를 위해 각 픽셀에 대한 gradient의 magnitude와 direction theta 값을 계산해야 함. (3) edge point에서 first derivative의 magnitude는 최대, 이 점을 ride pixel이라 부름. ride pixle을 얻고 나머지 부분을 0으로 만드는 것을 non-maximal suppression이라 부름. (4) 두 개의 threshold는 low threshold와 high threshold. high threshold 보다 큰 ride pixel 값을 strong edge pixel, low와 high 사이는 weak edge pixel이라 함. (5) weak edge pixel은 strong edge pixel과 8-connected 됨.

 

second derivative filter는 derivative의 derivative를 구해야 하므로 계산량 많아짐. edge detection에 사용.

Laplacian filter는 가장 유명한 second derivative filter. derivative filter는 image에 noise를 추가 함. second derivative는 그에 따라 추가로 noise가 발생.


픽셀의 값은 빛의 intensity를 나타냄.

보통 gray scale image는 8 bits per pixel. 256개의 shade가 존재.

color image는 보통 24 or 16 bits per pixel.

CMYK(cyan, magenta, yellow, black) color model은 프린터에서 주로 사용.

cyan(0, 255, 255), magenta(255, 0, 255), yellow(255, 255, 0)

Convert coloer image into grayscale image

두 가지 방법 있음: Average method / Weighted mothod or luminosity method

Average method는 간단함: Grayscale = (R + G + B) / 3, 이 방법은 grayscale로 바뀌기 보다 black image로 바뀌는 경향 있음. 각각의 색은 각자 다른 wavelength를 가지고 이미지를 형성하는데 각자 다른 기여를 하므로 각 색이 어느 정도 기여하는지를 반영하여 평균을 내야하지만 평균을 내면 모두 같은 기여를 하게 만드므로 black image를 만듬. 이를 해결한 방법이 luminosity method.

Weighted method: grayscale = 0.3R + 0.59G + 0.11B

빨간색은 세 가지 색중 더 많은 파장을 가짐. 초록색의 파장은 가장 적고, 초록색은 눈에 soothing effect를 줌. 즉 빨간색의 기여는 줄여야 하고, 초록색의 contribution은 늘여야 함.

Sampling

아날로그 신호(continuous)를 디지털 신호(digital)로 바꿔야 함: Sampling과 Quantization.

x축을 digital화 하는 것을 sampling, amplitude를 디지털로 바꾸는 것은 quantization.

sampling을 많이 할수록 image quality가 좋아지며 noise는 제거된다.

이미지를 샘플링하면 픽셀이 된다.

upsampling = zooming = 픽셀의 양을 늘림 = 이미지를 더 자시헤 봄 = oversampling

sampling과 zooming의 차이점: sampling은 시그널에서 이루어지고, zooming은 digital image에서 이뤄짐.

Zooming

pixel replication(nearest neighbor interpolation) / zero order hold method / zooming K times

(1) pixel replication(neares neighbor interpolation) : 줌이 될수록 이미지가 흐려지는 단점이 있음.

(2) zero order hold: 두 개의 인접 요소 더해 2로 나눠 두 요소 사이에 둔다. (1)번에 비하면 흐린 이미지를 만들지 않음. 2의 제곱수로 동작하는 단점이 있음. 즉 2배 4, 8, 16, 32배로 동작해서 6배와 같은 줌은 동작하지 못함.

(3) K-Times zooming: 두 개의 인접 요소를 선택해 큰 값에서 작은 값을 뺀다. 이 결과를 zooming factor K로 나눈다. 이 값(output)을 작은 값에 더해 두 요소 사이에 둔다. output을 한번 더 더해서 나오는 결과를 바로 옆에 또 둔다. 이를 k-1번 반복.

15 30 15 -> 15 20 25 30 20 25 15

마지막 과정에서 삽입된 값을 오름차순으로 정렬해 대칭이 되도록 만든다.

어떤 배수의 줌도 가능하다는 장점이 있다.(이는 pixel replication algorithm도 마찬가지) 이미지가 잘 흐려지지 않는다. 마지막 과정에서 정렬을 해야하므로 computation cost를 높인다.

Spatial resolution

spatial resolution은 pixel resolution으로 결정할 수 없는 image의 clarity(선명함)를 말해준다.

Spatial resolution can be defined as the smallest discernible detail in an image.

같은 크기의 이미지만 spatial resolution을 비교할 수 있다.

spatial resolution을 측정하는 방법: dots per inch(DPI) / lines per inch / pixels per inch

(1) pixel per inch = pixel density: 모바일 기기에서 사용

(2) dots per inch(DPI): 프린터에서 사용. 하나의 픽셀을 인쇄할 때 많은 점을 찍어야할 수 도 있음. 프린터는 CMYK를 사용하기 때문.

(3) lines per inch: lines of dots per inch

Gray level resolution

resolution = pixel의 총 수

gray level resolution은 이미지에서 gray level이나 shade의 변화를 의미. 즉 pixel당 bit의 수에 해당함.

BPP(bits per pixel): 이미지에서 서로 다른 색의 숫자는 color의 depth(bpp)에 의존적임.

gray level resolution = k bits per pixel

Quantization

sampling은 x축에 대해, quantization은 y축에 대해

https://www.tutorialspoint.com/dip/concept_of_quantization.htm

gray level을 줄여 어느 정도 수준에 도달하면 contouring 효과가 나타난다. 즉 quatinzation을 더 할 수록 contouring 효과가 나타나며, quantization을 덜 할 수록 contouring 효과는 줄어든다.

Dithering

dithering: 픽셀을 무작위로 정렬해 실제로 나타나지 않는 색의 illusion을 만드는 것.

quantization을 많이 해 level 2의 gray scale image를 더 자세히(detail) 나타내기 위해서 dithering을 수행.

Historam

히스토그램의 어떤 것의 빈도수(frequency)를 나타내는 그래프. 전체 데이터 세트 중에서 어떤 데이터가 나타나는 빈도수를 보여준다.

이미지에서의 히스토그램: pixel intensity value의 빈도수를 나타낸다.

만약 이미지가 grayscale이면 x축은 gray level intensity를 나타내고, y축은 해당 밝기의 빈도수를 나타낸다.

히스트그램을 이용해 brightness와 contrast를 조절할 수 있다.

Brightness

image matrix에서 pixel value 값을 조절해 밝기를 조절할 수 있다.

Contrast

contrast는 이미지에서 pixel intensity 값의 가장 큰 값과 작은 값의 차이.

Histogram Sliding은 히스토그램을 오른쪽이나 왼쪽으로 이동시키는 것이다. 히스토그램 슬라이딩을 통해서 밝기(brightness)를 조절할 수 있다. 이미지 행렬의 픽셀 값에 특정 값을 더하거나 빼서 히스토그램을 슬라이딩 시킬 수 있다.

contrast를 enhance하는 방법에는 두 가지가 있다: histogram stretching과 histogram equalization

(1) histogram stretching

$$g(x, y) = \frac{f(x, y) - min}{max - min} \times 2^{bpp}$$

여기서 max는 maximum pixel intensity

histogram stretching을 이용하면 대비를 항상 향상시킬 수 있지만, 몇몇 경우에 동작하지 않음: 이미 이미지의 pixel intensity에 0과 255 값이(끝과 끝의 값이) 존재하는 경우.

Introduction to probability

PMF = probability mass function: 데이터 세트에서 각 데이터가 발생하는 빈도의 확률

CDF = cumulative distributive function: PMF로 계산된 값을 cumulative sum, 이렇게 계산한 값은 단조 증가한다.

(2) histogram equalization

PMF와 CDF를 이용한다. 이미지에서 모든 픽셀 값을 동등하게 만든다. PMF를 이용해 각 픽셀 값의 확률을 계산하고, CDF를 이용해 누적합을 계산한 뒤, CDF에 level을 곱해 새로운 픽셀 intensity를 찾는다. 이 새로운 값을 이전 값들에 매핑시켜 히스토그램 equalization을 한다.

histogram equalization 과정을 다시 정리: 모든 픽셀에 대해 PMF 구함 / gral level에 대해 CDF를 구함 / 

https://www.tutorialspoint.com/dip/histogram_equalization.htm

Gray level transformation

(1) linear: identity transformation / negative transformation

(2) logarithm = log transformation: $s = c\log(r+1)$, 어두운 픽셀(0에 가까운 픽셀)은 확장 되고, 높은 픽셀 값들은 compress된다.

(3) power-law: $s = cr^{\gamma}$, gamma transformation이라고도 한다. 디스플레이 장치마다 이미지를 표시할때 각기 다른 intensity를 가지므로 장치마다 다른 gamma correction을 가진다.

$s = cr^{1/2.5}$와 같이 수정한다.

Convolution

convolution을 통해 blurring, sharpening, edge etection, noise reduction을 달성할 수 있다.

mask = filter = spatial filter: 두 가지 종류의 필터가 존재한다, linear filter(smoothing filter)와 frequency domain filter

blurring에 사용되는 필터: box filter, weighted average filter

zooming을 하면 픽셀 수가 증가하지만, blurring은 픽셀 수를 증가시키지 않는다.

blurring: mean filter, weighted average filter, gaussian filter

(1) mean filter = box filter = average filter: 홀수여야함, 모든 요소의 합은 1, 모든 요소의 값은 같아야 함. mask의 크기가 커질수록 blur 효과가 더 나타난다.

(2) weighted average filter: 필터의 중심이 더 많은 기여를 하도록 weight을 준다, 이를 통해 blur를 컨트롤할 수 있다. (1)과 마찬가지로 요소는 홀수배여야 하고, 모든 요소 합은 1이어야 하며, 가운데 요소는 다른 요소보다 커야한다.

Edge detection

prewitt operator, sobel operator, robinson compass masks, krisch compass masks, laplacian operator가 있음.

(1) prewitt operator: 수직선과 수평선을 인식

-1 0 1
-1 0 1
-1 0 1

위는 vertical edge를 감지한다. 가운데 coloumn이 0이므로, 수직선을 인식. 이는 가운데 열이 0이므로, 왼쪽과 오른쪽 픽셀 값의 차이를 계산한다(derivative), 이렇게 edge intensity를 증가시킨다.

-1 -1 -1
0 0 0
1 1 1

위는 horizontal edge를 인식, 가운데 행읜 0이므로 이미지 원래의 값을 포함하지 않으며, 위와 아래 픽셀의 세기를 계산한다. 따라서 intensity의 차이를 증가시키고, edge가 잘 보이도록 만든다.

(2) sobel operator: derivate mask임, 수평선과 수직선을 인식, prewitt operator와 비슷하다.

-1 0 1
-2 0 2
-1 0 1

마찬가지로 왼쪽과 오른쪽 픽셀의 intensity 차이를 계산한다. prewitt operator와 달라진점은 첫 번재, 세 번째 열의 -2와 2이다. 이 값이 edge region 주변 픽셀의 weight을 주어, edge intensity를 증가시킨다.

-1 -2 -1
0 0 0
1 2 1

prewitt operator와 비교하면 더 많은 edge를 찾아내고, 더 잘 보이게 만든다. -2와 2의 숫자를 바꿔 더 많은 weight을 줄수 있다. sobel operator는 고정돠 coefficient를 가지지 않는다.

(3) Robinson compass mask: direction mask임, 하나의 mask로 8개의 방향으로 rotate시키면서 각 방향에 대한 선을 인식. derivative mask의 일종임.

하나의 마스크를 이용해 8개의 방향(북, 북서 ,서, 남서, 남 ,남동, 동, 북동쪽)으로 회전시킴.

-1 0 1
-2 0 2
1 0 1

위는 북쪽 방향 마스크

0 1 2
-1 0 1
-2 -1 0

위는 북서쪽 방향 마스크

 

(4) Krisch compass mask: derivative mask임, 모든 방향의 선을 인식 

Robinson과의 차이점: Kirsch는 하나의 표준 마스크를 가지고, 필요에 따라 마스크를 변화시킨다.

-3 -3 5
-3 0 5
-3 -3 5

위는 북쪽방향 마스크

-3 5 5
-3 0 5
-3 -3 -3

위는 북서쪽 방향 마스크(North West Direction Mask)

만약 북서쪽 방향 edge가 없는 이미지에 북서쪽 방향 마스크를 적용한다면, 비효율적이다.

 

(5) Laplacian operator: second order derivative mask임, positive laplacian과 negative laplacian으로 나뉨, 

방향에 따라 edge를 찾는 것이 아니라, inward edge와 outward edge를 찾는다.

(5)-1 positive laplacian operator

마스크의 중심은 음수, 코너는 0. positive laplacian operator는 image에서 outward edge를 감지.

0 1 0
1 -4 1
0 1 0

(5)-2 negative laplacian operator

마스크의 중심은 양수, 코너는 0, 나머지는 -1. negative laplacian operator는 inward edge를 감지.

0 -1 0
-1 4 -1
0 -1 0

라플라시안 연산자는 천천히 변하는 gray level 부분을 deemphasize함. edge는 grayish하게 만들고, 다른 discontinuity는 dark background로 만든다. 같은 이미지에 positive와 negative laplacian operatro 둘 모두를 적용시킬 수 없다. 

이미지에 positive를 적용해서 나온 결과를 원래 이미지에서 빼면 sharpened image를 얻을 수 있다.

이미지에 negative를 적용해 나온 결과를 원래 이미지에 더하면 sharpened image를 얻을 수 있다.

 

Sharpening은 blurring과 반대, sharpening은 edge content를 increase시킴, edge detection으로 edge를 찾아 이미지에 추가하면 sharpening됨.

이미지도 결국 signal이고, 시그널의 변화는 differentiation을 이용해 계산한다. 이렇게 edge detection이 가능하다. 따라하 derivative mask라고 부른다.

derivative mask는 다음의 속성을 지닌다: 마스크에는 반대 부호가 존재, 마스크의 합은 0과 같다, weight이 클수록 많은 edge를 감지한다.

 

Introduction to frequency domain

이때까지는 이미즈를 spatial domain으로 다뤘다. 즉, 이미지의 픽셀 값으로 다루었다.

반면 frequency domain은 spatial domain에서 픽셀 값이 변하는 rate으로 다룬다.

과정: input image => frequency distribution => processing => inverse transformation => output image(spatial domain) / 먼저 이미지를 transform 하여 frequency distribution으로 만든다.

transform이라 불리는 수학 연산자를 이용해 신호를 time domain에서 frequency domain으로 변환할 수 있다.

이때 사용하는 연산자는: fourier series, fourier trnasformation, laplace transform, z transform

여기서는 fourier series와 fourier transformation을 다룬다.

frequency component를 두 가지로 나눈다: high frequency component(이미지에서 edge에 대응), low frequency component(이미지에서 smooth region에 대응)

 

Fourier series: 주기적인 신호(periodic signal)는 사인과 코사인의 합으로 나타낼 수 있다. 이때 sine과 cosine은 weight으로 곱해짐. 즉, 신호는 sine과 cosine이며, 서로 조화를 이룸

이미지를 frequency domain으로 변환하기 위한 식 하나와, 출력된 결과를 다시 spatial domain으로 돌리기 위한 식 하나, 총 두개가 필요.

(1) fourier series

$$F(u,v)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}f(x,y)e^{-j2\pi(ux+vy)}dxdy$$

inverse 식은 아래와 같음

$$f(x,y)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}F(u,v)e^{j2\pi(ux+vy)}dudv$$

(2) fourier transform

non-periodic signal의 curve 아래의 면적은 사인과 코사인의 적분으로 표현할 수 있으며, 이때 사인과 코사인에 weight이 곱해진다. fourier transform은 image compression(JPEG)과 filtering, image 분석에 많이 사용됨.

Fourier series는 periodic signal에 적용되고, Fourier transform은 non periodic signal에 적용된다.

Discrete Fourier transform

sinusoid의 Fourier 항은 다음 세 가지를 포함: Spatial Frequency, Magnitude, Phase

Spatial frequency는 image의 brightness와 연관, sinusoid의 magnitude는 contrast와 연관, phase는 color information

2차원 discrete Fourier transform의 식은 아래와 같음

$$F(u,v)=\frac{1}{MN}\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)e^{-j2\pi(ux/M+vy/N)}$$

discrete Fourier transform은 Fourier transform을 샘플링한 것이다, 즉 이미지를 나타내는 샘플을 포함한다. 위 식에서 $f(x,y)$는 이미지를 나타내며, $F(u,v)$는 discrete Fourier transform을 나타낸다.

2차원 inverse discrete Fourier transform 식은 아래와 같다.

$$f(x,y)=\sum_{u=0}^{M-1}\sum_{v=0}^{N-1}F(u,v)e^{j2\pi(ux/M+vy/N)}$$

inverse discrete Fourier transform은 Fourier transform을 image를 돌린다.

Convolution Theorem

frequency domain과 spatial domain의 관계를 Convolution theorem으로 설명할 수 있다.

spatial domain에서의 convolution은 frequency domain에서의 filtering과 같다.

frequency domain에서 filtering은 다음과 같음: image => Fourier transform => filtering => inverse fourier transform => image

필터링 과정: (1) spatial domain의 이미지를 contrast를 증가시키던지 brightness를 변화시켜주는 pre-process과정 (2) 이미지의 discrete Fourier transfomr을 취함 (3) discrete Fourier transform의 중심을 맞춰줌 (4) Fourier transform과 filter function을 곱해 filtering 적용 (5) DFT를 center에서 corner로 다시 shift (6) inver discrete Fourier transform을 적용해 frequency domain에서 spatial domain으로 돌림 (7) post-processing(optional)

frequency domain에서의 filter 개념은 convolution에서 mask 개념과 같음.

흔히 쓰이는 filter: ideal highpass filter, ideal low pass filter, Gaussan high pass filter, Gausian low pass filter

High pass filter vs Low pass filter

blurring mask: 마스크의 모든 값은 양수, 모든 값의 합은 1, blurring mask를 적용하면 edge content는 감소함, 마스크 사이즈가 커질수록 smoothing 효과가 강해짐, low pass filter라고도 부름

derivative mask: 마스크의 값은 양수 또는 음수, 마스크의 모든 값의 합은 0, edge content는 증가, mask size가 커질수록 edge content는 증가, high pass filter라고도 부름

high pass frequency component는 edge를 말하며, low pass frequency component는 smooth region을 말한다.

Gaussian Low pass와 Gaussian high pass filter는 ideal low pass and high pass filter에서 나타나는 문제인 ringing effect을 줄여준다. ringing effect이 일어나는 이유는 어떤 지점에서 하나의 색이 다른 색으로의 transition을 정확하게 정의할 수 없기 때문에 나타난다.

Introduction to color space

(1) RGB

(2) CMYK

$$\begin{bmatrix}C\\M\\Y\end{bmatrix} = \begin{bmatrix}255\\255\\255\end{bmatrix} - \begin{bmatrix}R\\G\\B\end{bmatrix}$$

(3) Y'UV

luma(Y'), chrominance(UV)

(4) Y'CbCr

luma(Y'), blue difference chroma(Cb), red difference chroma component(Cr)

JPEG, MPEG 압축에 사용, Y'UV는 아날로그이고, Y'CbCr은 디지털임

Introduction to JPEG Compression

JPEG(Joint photographic experts group) compression은 lossy or lossless compression임, 결국 어떤 data는 잃음

image compression: 데이터를 효율적인 형태로 저장, 전송 / compression은 lossy or lossless

JPEG lossy compression에 대해 알아봄.

JPEG compression을 계산하기 위한 standard matrix가 있음, 이 행렬을 Luminance matrix라 함.

반응형

댓글