살군의 보조기억 장치

Another memory device…

영상처리에서 미분과 convolution 의 관계

leave a comment »

보통 엣지edge를 찾거나 할 경우, 기본적으로 미분한 결과를 사용한다. 근데 왜 영상처리에서 미분이 convolution 이 되는 것일까? 갑자기 의문이 들었다. 물론 단순하게 “영상처리에서의 미분은 필터링filtering이고 필터링은 곧 convolution 이다”라고 생각하고 그냥 받아들이면 되지만 그냥 받아들이기엔 뭔가 찜찜하다. 이번 글에서는 왜 영상처리의 미분이 convolution 이 되었는지에 대해 수학적으로 한번 파고들어 보겠다.

편미분partial derivative 가능한 2차원 이미지 F(x,y)가 있을때, 이 함수의 편미분은 (1) 처럼 정리할 수 있다.

\dfrac{\partial F(x,y)}{\partial x} = \lim\limits_{\Delta x \rightarrow 0}^{} \dfrac{F(x + \Delta x, y) - F(x,y)}{\Delta x} (1)

물론 \Delta x는 미소변위이다. 디지털 영상처리의 영역에서 본다면 \Delta x = 1이 가능한 최소값이 된다. 이를 이용해서 (1) 을 좀 더 일반화 시키면,

\dfrac{\partial F(x,y)}{\partial x} \bigg\rvert_{x=i, y=j} \approx f(i+1, j) - f(i,j) (2)

(2) 를 코드로 바꿔보면 아래와 쓸 수 있다.

int g[2] = {1, -1};

for (i=istart; i<=iend; i++)
{
    h[i][j] = 0;
    for (a=0; a<=1; a++)
        h[i][j] += g[a]*f[i+a][j];
}

위 코드는 사소한 문제가 있다. 예를들어 f[iend +1][j] 같이 실제 이미지보다 더 큰 부분의 경우에 대한 프로그램적인 처리가 필요하지만, 이 부분은 이번 글에서의 요점이 아니기 때문에 생략하기로 한다. 이제 위의 코드를 좀 더 일반화 시켜서 g 가 임의의 필터가 되고 2차원 처리가 가능하도록 변경하면,

for (j=jstart; j<=jend; j++)
{
    for (i=istart; i<=iend; i++)
    {
        h[i][j] = 0;
        for (a=astart; a<=aend; a++)
            for (b=bstart; b<=bend; b++)
                h[i][j] = g[a][b]*f[i-a][j-b];
    }
}

위의 코드에서 +a 가 -a 로 바뀐 부분은 마스크mask인 g 와 이미지 f 와의 상관관계를 생각하면 쉽게 이해할 수 있다. 왜 이렇게 바꿨냐하면, 위의 코드를 다시 일반화된 수식으로 풀어쓰면 convolution 이 됨을 쉽게 확인할 수 있기 때문이다.

h(i,j) = \sum\limits_{a=a_{start}}^{a_{end}} \sum\limits_{b=b_{start}}^{b_{end}} g(a,b)f(i-a, j-b) (3)

자!!! 이렇게 해서 convolution 이 나왔다. 수식으로 풀면 (2) 에서 (3) 으로 바로 일반화 시킬 수도 있지만… 이러면 나도 이해가 안되기 때문에…;;;

정리하면, 미분과 convolution 의 문제가 아니라 2차원 영상처리에서 어떠한 필터를 적용하고자 한다면 2D convolution 을 하면 된다는 것을 수식으로 알 수 있다. 미분을 하고싶다면 필터 g 를 미분할 수 있는 coefficient 로 사용하면 되고 가우시안gaussian 필터링을 하고싶다면 g 에 가우시안 필터 계수를 넣으면 되는 것이다.

참고
Advertisements

Written by gomiski

2014/05/13 at 4:48 am

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: