Computer Vision

Image filtering

재바기 2023. 4. 5. 15:36
728x90

What is Image?

  • A grid (matrix) of intensity values (보통 0이 black, 255 : white를 의미)
  • 이 map을 intensity(강도) map이라고도 함
  • 이 grid를 pixel이라고 함
  • 이 pixel 하나하나가 intensity value를 가지고 있음

 

Images as functions

이미지는 discrete한 pixel수를 가지고 있다.

 

- Pixel value

  • grayscale/intensity
    • [0, 255]
  • color
    • RGB는 [R, G, B] 즉 빨강 초록 파랑의 3 채널이고, 각각 [0, 255] per channel
    • HSV [H, S, V]: Hue, saturation, value 로 나타낼 수도 있음

Image는 $R^2$에서 $R$ 또는 $R^M$ 으로의 함수 $f$라고 생각할 수도 있다.

  • Grayscale 이라면 :
    • $f(x,y)$는 각 위치 $(x,y)$의 intensity를 의미하며,
  • Color 이면 :
    • $f(x,y)=[r(x,y), g(x,y),b(x,y)]$ 의 $R^3$ 으로 매핑.

 

Image transformations

함수와 마찬가지로, 이미지에도 어떠한 operator를 적용할 수 있다.

그 중에서도 특별한 연산이 있는데, 합성곱 즉 convolution에 대해서 다뤄본다. (linear filtering)

 

Image denoising

 

그렇다면 images에서 noise가 나타나는 이유는 무엇인가?

  • sensor noise
  • Dead pixels
  • Old photographs
  • etc.,

 

그러면 Noise reduction은 어떻게 할 수 있을까?

  • 근처의 pixel은 같은 object일 것이다.
    • 따라서 비슷한 색깔을 가질 것이다.
  • 각 픽셀을 주변 픽셀의 평균으로 대체한다.

 

Mean filtering

하지만 정수를 쓸 것이므로 7이 된다.

 

Kernel의 사이즈가 5가 되면?

마찬가지로 7이다. (반올림)

 

Noise reduction using mean filtering

조금 부드러워지긴 했으나, 선명도가 떨어졌다. (sharpness)

 

Filters

  • Filtering
    • 각 픽셀들이 원래 이미지의 픽셀들의 linear combination이 되는 새로운 이미지를 생성하는 것이다.
  • Why?
    • 좀 더 유용한 information을 얻기 위해
      • edge나 contour같은 특징을 추출
    • image를 enhance하기 위해
      • noise를 감소시키기 위해 blur 처리
      • sharpen하기 위해
    • CNN의 key 연산자이다.

 

Linear filtering

가장 simple한 filtering의 종류: linear filtering (cross-correlation, convolution)

  • 각 픽셀을 neighbor들의 linear combination으로 대체한다. (weighted sum)

 

아래와 같은 틀을 “kernel” 혹은 mask 또는 filter라고 한다.

($10\times0+5\times0+3\times0+4\times0+6\times0.5+1\times0+1\times0+1\times1+8\times0.5=8$)

 

결국 mean filtering은 linear filtering의 일종이다.

$$ Sf=\sum_{i=-1}^1\sum_{j=-1}^1\dfrac{f(m+i,n+j)}{9} $$  

 

하지만 일반적인 linear filtering의 경우는 weight가 있다.

따라서

$$ Sf=\sum_{i=-1}^1\sum_{j=-1}^1w(i,j)f(m+i,n+j) $$

와 같이 되고, 이 때 $w(i,j)$가 kernel 또는 filter matrix의 각 원소가 된다.  

 

그리고 kernel size가 달라질 수도 있다.

따라서 kernel size도 general하게 고려해주면,

$$ Sf=\sum_{i=-k}^k\sum_{j=-k}^kw(i,j)f(m+i,n+j) $$

가 된다. (kernel size는 $2k+1$)  

 

Convolution and cross-correlation

Cross correlation

$$ S[f]=w\otimes f $$

$$ Sf=\sum_{i=-k}^k\sum_{j=-k}^kw(i,j)f(m+i,n+j) $$

(즉 같은 자리에 대응하도록 곱해주고 더해주면 됨)  

 

Convolution

$$ S[f]=w*f $$

$$ Sf=\sum_{i=-k}^k\sum_{j=-k}^kw(i,j)f(m-i,n-j) $$

(행으로, 열로 커널을 각각 뒤집어서 cross-correlation을 하면 더 쉽다.)

Cross-correlation과 convolution은 linearity를 만족한다.  

 

또 다른 중요한 property로 Shift invariance가 있다.

shift가 일어나도 연산의 효과는 다르지 않음을 의미!!

그리고 shift하고 convolution을 하던지, convolution을 하고 shift를 하던 상관이 없음  

 

Sharpening

Sharpening을 수식으로 나타내면 다음과 같다.

$$ \begin{align*}f_{sharp}&=f+\alpha(f-f_{blur})\\&=(1+\alpha)f-\alpha f_{blur}\\&=(1+\alpha)(wf)-\alpha(vf)\\&=((1+\alpha)w-\alpha v)f\end{align} $$

여기서 $f$는 원래 이미지를 의미하고,

$w,v$는 각각 다음과 같은 filter를 의미한다. (좌측부터 순서대로)

따라서 만약 \alpha=1 일 때, sharpening filter는 아래와 같다.

 

Gaussian filter

Mean filter와 달리, nearby pixel은 far-away pixel보다 더 correlated 할 것이라는 가정을 내포하는 filter이다.

따라서, nearby pixel에 더 weight를 많이 준다.

위의 그림은 독립변수가 1개, 2개일 경우의 gaussian distribution을 보여준다.

하지만, kernel은 이산적인 값을 가지기 때문에, 위의 continuous한 값을 가질 수 없다.

따라서, 이에 근사한 값을 가지도록 kernel을 구성해야 한다.

그리고 이처럼 kernel을 구성할 때, gaussian distribution의 앞 계수(factor)는 신경쓰지 않고 kernel의 모든 원소의 합이 1이 되도록 normalize만 해주면 된다.  

 

다음은 gaussian filter를 이미지에 적용한 모습이다.

 

가우시안 필터는 “high-frequency” components를 제거하는 역할을 한다.

즉, low-pass filter 라고도 할 수 있다.  

 

또한, gaussian filter끼리의 convolution의 결과도 gaussian이다.

(즉, $\sigma$의 gaussian kernel을 두 번 적용하는 것은 $\sigma\sqrt2$의 kernel을 한 번 적용하는 것과 결과가 같다.)  

 

Non-linear filters

Thresholding

Thresholding은 필요한 임계값을 임의로 정하여 이미지를 처리하는 것으로, 이미지의 전, 후처리에서 중요한 filter중 하나이다.

$$ g(m,n)=\begin{cases}&255, \quad &f(m,n)>A\\&0&otherwise\end{cases} $$  

 

Rectification

$$ g(m,n)=\max(f(m,n),0) $$

Rectification은 convolutional network의 중요한 component중 하나이다.

(특히 ReLU)  

 

Median filter

Mean은 outlier에 굉장히 민감하게 반응한다.

따라서, mean filtering이 잘 적용이 되지 않는다.  

 

따라서, median(중간값)을 택하여 해당 pixel에 replace해준다.

다음과 같이 speckle noise를 이와 같은 방법으로 처리할 수 있다.

 

728x90