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

스무딩2

학위논문통계 2016. 12. 1. 07:37

 

 

1.

 

제가 옛날에 본 책은 2ed이고 인터넷에 돌아다니는 pdf판은 3ed인데 내용은 많이 보강된 것 같은데 그림의 예는 오히려 옛날 판이 더 나은 것 같습니다.

 

 

 

2.

 

일단 smoothing 작업은 화면 이미지에 있는 잡음을 없애려는 것이 목적입니다. 이런 반면 우리가 화면에서 인식하려는 물체의 윤곽선마저 죽일 수 있습니다.

 

노이즈라는게 원래 자연스런 이미지의 변화에 중간에 갑자기 툭 튀어져 나온 것이기 때문에 주변의 이미지 값과 특이하게 다르다는 특징이 있습니다. 이런 현상은 화면 물제의 윤곽선도 같은 특징을 가지고 있습니다. 그래서 노이즈를 제거하려면 윤곽선도 죽어 버리는 특징이 있습니다.

 

 

스무딩하는 방법은 간단합니다. 화면 특정 픽셀의 값 대신 그 주변(neighborhood)의 픽셀 값의 평균으로 대체를 하는 것입니다. 가장 간단한 3*3 평균 마스크를 한다면

 

 

 

1/9

1/9

1/9

1/9

1/9

1/9

1/9

1/9

1/9

0

0

0

0

0

0

0

0

1

0

1

0

1

0

.

.

.

.

.

0

1

1

1

0

0

0

.

6/9

4/9

.

.

0

0

1

0

0

1

0

.

.

.

.

.

0

0

1

1

1

0

0

.

.

.

.

.

0

1

0

0

1

0

0

.

.

.

.

.

0

0

0

0

0

0

0

 

 

 

 

위 그림에서 5*5 흑백 이미지의 (2,2) 위치의 픽셀은 평균 마스크를 취하면

원 이미지의 회색 칠한 행렬과 중간에 있는 마스크 행렬을 원소별로 행렬 곱하기를 해서 더하면 됩니다. 즉 평균을 구하면 됩니다. 물론 흑백 이미지 이기 때문에 최종적으로 반올림을 해서 0과 1로 바꿔야 합니다.

 

 

구한 이미지의 값을 b(2,2)라고

 

b(2,2)=1/9*1+1/9*0+1/9*1+1/9*1+1/9*1+1/9*1+1/9*0+1/9*1+1/9*0=6/9=>1

 

 

만약 (2,3) 위치의 이미지의 경우

 

b(2,3)=1/9*0+1/9*1+1/9*0+1/9*1+1/9*1+1/9*0+1/9*1+1/9*0+1/9*0=4/9=>0

 

이 마스크를 취할 경우 이미지 변에 있는 픽셀은 마스크를 취할 수 없습니다. 이럴 경우 이미지 외곽에 가상의 이미지를 만듭니다. 3*3인 경우 한 칸식 더 만들면 되고 5*5인 경우 두 칸식 더 만듭니다. 이런걸 패딩이라 합니다. 통상 0 값을 많이 넣는데 상황에 따라 달라 질 수 있겠지요.

 

알파고의 경우 일반적인 이미지랑 달리 바둑의 변이 중요한 역할을 하는데 이 경우 처리할 때 많은 시간이 걸렸을 거라 봅니다.

 

 

 

 

3.

 

 

이런 작업의 특징은

 

1) 마스크의 크기가 클수록 화면이 더 희미해집니다. 즉 모자이크 효과가 커집니다. 다음의 그림은 그 예입니다. 왼쪽 제일 위 이미지가 원 이미지이고 오른쪽 제일 마지막 이미지가 마스크 크기가 가장 큰 경우입니다.

 

 

 

 

 

 

위와 같이 화면이 흐려지면 앞에서 이야기 한 것처럼 물체의 윤곽선이 죽어 버릴 수가 있습니다. 이를 해결하기 위해 문지방(threshold)을 정하는 방법이 있습니다. 즉 어떤 cut-off 값을 지정하는 방법입니다. 여기도 두 가지 방법이 있습니다.

 

 

하나는 평균 마스크 작업을 할 때 문지방을 설정하는 방법이고 평균 마스크를 한 이미지를 가지고 문지방을 설정하는 방법입니다.

 

 

첫째 방법은 각 픽셀에서 평균 마스크 작업을 할 때 마스크한 픽셀값이 원 이미지 픽셀값과 크게 차이가 안 나면 마스크한 픽셀값을 쓰고 차이가 많이 나면 원 픽셀값을 쓰는 방법입니다.

 

그럼 윤곽선이 있는 경우 그 지점에서 주변 픽셀값과 차이가 많이 나기 때문에 평균 마스크를 취해도 원 이미지와 값이 어느 정도 차이가 난다는 것이죠. 그래서 이런 작업을 할 때 시행착오를 겪어야 합니다. 즉 어느 정도 크기의 마스크를 취할 지, cut-off 값을 어느 정도로 줘야 할 지 노가다 작업을 해야 한다는 것이죠.

 

인공지능을 너무 맹신하지 마세요. 모든 경우를 다 알아채고 알아서 다해 주는 경우는 없습니다. 자신의 분야의 특수한 환경과 물체는 본인이 가장 잘 알고 그렇기 때문에 본인이 어느 정도 수 작업을 해야 한다는 것이죠.

 

 

 

두 번째 작업은 일단 마스크 작업을 해서 스무딩한 이미지를 구합니다. 그런 다음 구한 이미지에서 어떤 특정 값을 정해 그 값 이상과 이하로 구별한다는 것이죠. 아래 그림이 예입니다.

첫째가 원 이미지고 두 번째가 평균 스무딩한 이미지이고 세 번째가 25% 선에서 짤라 그 이상은 255, 즉 흰색으로 처리한 이미지입니다.

 

 

 

 

 

2)

 

두 번째 특징은 평균을 하기 때문에 유별난 값, 즉 이상치의 영향을 크게 받습니다. 예를 들어 데이터가 (10, 10, 10, 10, 10, 10, 10, 10, 10000)라면 10이 9개고 10000이 하나입니다. 그러면 평균을 하면 1090이 되어 버립니다. 이런 예는 소득 평균 낼 때 많이 나타나죠. 즉 분포가 정규분포같이 대칭형이 되어야 하는데 한쪽으로 치우치면 평균이 그 집단의 대표적인 특성을 잘 설명하지 못하게 되는 것입니다.

 

또 마스크를 취할 때 주변에 노이즈가 많으면 그 노이즈의 영향을 많이 받습니다.

 

 

이럴 경우 평균 대신 중앙값을 많이 씁니다. 그래서 중앙값 필터링을 하면 됩니다. 그러면 화질이 상당히 많이 좋아집니다. 하여간 그래도 통계학에서 중앙값대신 평균값을 많이 쓰는 이유는 일부를 제외하고 대칭형 분포가 많고 또 평균이 수학적으로 매우 편리하고 이론적으로도 탁월한 성격이 있기 때문입니다. 예를 들어 표본 수가 많아지면 원래 분포가 어떤 모양이라도 평균은 정규분포로 갑니다.

 

 

아래는 평균 마스크를 취한 경우와 평균 값을 쓴 경우입니다. 첫 번째는 원 이미지이고 두 번째가 평균 마스크한 이미지고 세 번째가 중앙값을 취한 경우입니다. 이미지의 위 부분만 보시면 화질이 많이 개선된 것을 알 수 있습니다.

 

 

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

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