인공지능관련/이미지 프러세싱

윤곽선 드러내기.

학위논문통계 2016. 12. 14. 12:47

 

 

 

1.

 

지난번에 윤곽선 드러내기에서 gradient를 사용한 결과를 보여 주었습니다. 디지털 이미지 (x,y)위치에서 이미지 값을 f, 즉, f(x,y)라고 하죠. 그럼 (x,y)위치에서 gradient는

 

 

gradient(x,y)=[df/dx, df/dy]

=[f(x+1,y)-f(x,y), f(x,y+1)-f(x,y)]

 

 

로 정의됩니다. 실제로 이걸 적용할 때는 위에서 구한 Gradient 벡터의 거리를 구해서 합니다.

 

다음 그림은 인공지능에 나오는 cnn 책에 나오는 예입니다. 개의 윤곽선을 찾는 예입니다. 오로지 수직(세로) 윤곽선만 찾았습니다. 이렇게 윤곽선만 파악해서 동물 이미지가 어떤 동물인지 판단한다는 것이죠.

 

 

 

 

 

2. Laplacian

 

3rd 판에는 Laplace operator를 집중적으로 설명하고 있네요. gradient나 Laplacian operator, 또는 curl, divergence 등은 매우 비슷한 수학 개념인데 일반 사회과학이나 상경대쪽에서는 거의 나오지 않습니다. 다만 통계학에서 수치해석 문제로 gradient는 자주 나오는 개념입니다.

 

물리학이나 공학에서는 매우 중요한 개념으로 알고 있습니다. 전자장이나 유체역학 등에 자주 쓰이는 개념으로 알고 있습니다. 사실 이런 모형은 현실에서도 자주 보입니다. 학부 물리학과나 공학 전공하시는 학생분들은 H.M. Schey "Div, Grad, Curl, and all that"이라는 책을 권유하고 싶습니다. 굉장히 쉽게 설명한 책입니다.

 

    

저는 물리 전공도 아니고 통계학에 거의 나오지 않아 잠깐 읽어 봤습니다.

 

 

하여간 Laplacian은 다음과 같이 정의됩니다.

 

 

 

   

이걸 디지털 버전으로 바꾸면

 

 

 

 

이것은 각 (x,y) 위치의 픽셀값에다가 다음의 3*3 마스크를 취한 것입니다. 즉 각 픽셀에 convolution을 적용한 것입니다.

 

0

1

0

1

-4

1

0

1

0

 

 

그래서 Laplacian이 수학적으로 복잡한 것 같지만 오히려 적용하기는 편합니다.

 

 

 

 

3. 윤곽선 드러내기 작동의 특징

 

윤곽선 드러내기를 위해 미분을 한다든지, 이차 미분을 한다든지 하는데 본질적으로는 옆에 있는 픽셀 값에서 빼기를 하는 것입니다. 이 빼기를 하면 어떻게 될까요.

 

일단 x축으로만 이미지 값을 보죠.

 

 

값이 (253, 255)라고 하죠. 그러면 완전히 흰색에 가깝습니다. 여기서 빼기를 하면 2가 되죠. 그러면 미분하면 완전 검정색에 가깝습니다. 만약 이미지 값이 (0, 2)라고 하죠 이 경우도 빼기를 하면 2가 되어 거의 검정색입니다. 만약 값이 (0, 30)으로 확 변해서 윤곽선이라고 하죠. 그럼 빼기를 하면 30이 되고 이 경우도 완전 검정색은 아니지만 검정색에 가까운 회색이 됩니다. 그래서 gradient나 Laplacian을 적용하면 윤곽선은 회색에 가까운 반면 배경 이미지는 거의 검정색으로 나오는 단점이 있습니다.

 

 

이 경우 거의 검정색 계열로 나온 윤곽선 이미지를 처음에 나온 히스토그램 균등 적용을 적용해 새로 스케일을 짜는 방법이 있습니다. 그러나 통상 이 방법으로도 윤곽선을 살리되 기존의 원 이미지를 보존하려는 의도대로는 되지 않습니다.

 

그래서 쓰는 방법이

 

최종 이미지=원 이미지+ 윤곽선 이미지

 

 

이런 식으로 윤곽선을 살리되 원 이미지에 가깝게 복원하는 방법입니다. 이게 디자인하는 분야에서는 자주 사용하는 방법이라 합니다.

 

아래 그림을 한번 보죠.

 

 

 

 

맨 위 이미지가 원 이미지이고 왼쪽 위가 Laplacian을 적용한 이미지로 이게 너무 새까맣게 나오니까 척도조절을 하였습니다. 그게 위쪽 오른쪽 이미지입니다. 윤곽선을 보이지만 원 이미지를 전혀 찾아 볼 수 없죠. 그래서 아래 그림은 원 이미지+윤곽선 이미지를 해서 배경은 원 이미지가 살아 나도록 한 것입니다.

 

 

 

 

4. 대각선 윤곽 드러내기

 

아래쪽 왼쪽은 단순히 x, y 방향으로만 Laplacian을 적용한 것이고 아래쪽 오른쪽은 대각선 방향으로도 Lalpacian을 적용한 것입니다. 대각선 윤곽도 마찬가지입니다. 대각선 방향으로 두 번 차분하면 됩니다. 이 경우 사용하는 마스크는 다음과 같습니다.

 

  

위 왼쪽이 x,y 방향으로 Laplacian을 적용한 것이고, 위 오른쪽이 x,y 방향뿐만 아니라 대각선 방향의 윤곽선도 파악하기 위해 대각선 방향도 Laplacian을 적용한 경우 마스크입니다. 간단히 계산해보면 나옵니다. 대각선 방향에 있는 픽셀값을 두번 빼면 됩니다. 아래쪽 마스크는 위의 마스크에다 기호를 바꾼 것입니다. 현장에서는 관례적으로 이렇게 기호를 바꿔 많이 한다고 하네요.

 

아직도 마스크를 씌운다는 것을 잘 이해가 안되면 다음을 보시기 바랍니다. 원 이미지와 마스크를 원소별로 곱하기 한 다음 원 이미지 중앙에 있는 이미지 값 대신 원이미지*마스크한 원소를 전부 더한 값으로 대체를 하면 됩니다. 이게 convolution 작용입니다. 이걸 원 이미지 모두 픽셀에 대해 적용을 하면 됩니다. 

 

원 이미지

마스크

원이미지*마스크

결과

0

1

1

0

1

0

0

1

0

1

1

0

1

-4

1

1

-4

0

-2

0

0

1

0

1

0

0

0

0

 

 

 

 

 

원래 행렬 곱하기는 두 가지가 있습니다. 마스크를 씌우는 경우처럼 원 이미지의 행렬과 마스크 행렬의 원소별로 곱하기 하는 경우입니다. 이것 말고 행렬 이론에서 많이 사용하는 곱하기가 있습니다. 이것 개념상 복합함수라고 하나요 그런 개념입니다. 즉 f(g), 이런 개념입니다.

 

 

 

 

5. gradient와 Laplacian의 차이

 

앞에서 언급한 바와 같이 Laplacian이 수식이 복잡한 것 같지만 딥 러닝의 CNN에서 많이 사용하는 마스크 취하는 모습으로 나오기 때문에 수학적으로 편리합니다. 실제 작용한 결과를 보면 gradient는 윤곽선이 두껍게 나오는 방면 Laplacian은 윤곽선이 gradient보다 예민하게 파악하는 경향이 있습니다. 아래 그림을 보죠.

 

 

 

   

위 그림은 x 축 방향으로 이미지 값을 배열한 것입니다. 보면 평평한 지역, 완만한 기울기 지역, 다시 평평한 지역, 그리고 급 경사 지역으로 크게 4 가지로 나눠지죠. 두 번째는 이미지 값과 그리고 gradient와 Laplacian을 작용해서 나온 값이고 세 번째 그림이 이걸 그림으로 그린 것입니다. 까만 원은 gradient 경우이고 흰 네모는 Laplacian입니다.

 

일단 Laplacian이 급경사인 지점을 훨씬 잘 파악하고 있고, 5에서 -5로 값이 확 떨어지고 두 점을 연결하면 원점을 지나게 됩니다. 즉 zero crossing 현상이 일어납니다. 또 완만한 경사의 경우 gradient는 완만한 경사 지역 전체를 윤곽선으로 파악하고 있는 반면 Laplaciand의 완만한 경사 시작 지역과 끝 지역을 원 픽셀 크기의 윤곽선으로 파악합니다.

 

 

 

 

 

 

6. 응용

 

인터넷을 검색해 보니 다음과 같은 응용이 있네요. 인터넷 몰에서 소비자가 자기가 원하는 스타일의 옷 이미지를 올리면 그 스타일에 맞는 옷을 추천하는 기능인 것 같습니다. 자세한 설명이 안 나와서 모르겠지만 아래쪽 칼라 사진 제일 위쪽에 소비자가 올린 원하는 옷 스타일이고 그 아래 사진들이 여기에 맞춰 추천한 옷인 것 같습니다.

 

위쪽의 음영 이미지는 이런 추천 작업을 하기 위해 먼저 옷의 윤곽선을 파악하는 작업을 한 것이고요. 다음 그림을 보시죠.

 

 

 

'인공지능관련 > 이미지 프러세싱' 카테고리의 다른 글

윤곽선 드러내기1  (0) 2016.12.07
스무딩2  (0) 2016.12.01
이미지 스무딩1  (0) 2016.11.30
화질 개선1  (0) 2016.11.29
이미지프로세싱1  (0) 2016.11.21