Post

컴퓨터비전(2) - image filtering

image filtering

컴퓨터에서 image는 2차원 배열로 주어진다고 했습니다. 1칸을 1 pixel로 생각할 수 있습니다. 아무튼 2차원 배열 속에, 여러가지 정보를 담고 있습니다. 0을 흑백, 255를 흰색이라고 생각하고, 흑백 사진을 예시로 생각해보겠습니다.

image

위 그림처럼 이미지가 표현됩니다.

흑백 이미지라면 하나의 pixel에 이미지의 흑백 강도(=밝기, intensity, grayscale) 값을 가질 것이고, 색이 있는 사진이라면 하나의 pixel에 hexa 코드로 나타낼 수 있는 RGB 값을 갖게 될것입니다.

1
f[pos_x][pos_y]=0~255 value or f[pos_x][pos_y]=[R(pos_x, pos_y),G(pos_x, pos_y),B(pos_x, pos_y)]

2차원 배열로 표현되는 이미지를 f라고 하겠습니다. f의 내부 값을 알고 있으므로, 적절한 kernel(g)을 잘 합성하거나, 이미지에 값을 조작한다면 기존의 이미지의 성질은 유사한, 색이나 흑백 강도가 바뀐 새로운 이미지를 얻을 수 있지 않을까요?

어떤 f라는 흑백 이미지가 존재합니다. 이 이미지의 모든 픽셀에 20의 값을 더한 2차원 배열을 g(kernel이 아닙니다!)라고 하겠습니다. 결과를 보기에 앞서, pixel에는 이미지의 밝기값을 저장하고, 이를 통해 이미지를 표현합니다. 모든 pixel 값이 20만큼 증가했다면, 밝기 값이 변할 것이라고 추측 가능합니다.

결과를 보려면 클릭하세요.

image

noise

이미지는 항상 노이즈가 존재할 수 밖에 없습니다. 일단 픽셀에 저장되어 있는 값을 변경하기 앞서, 이미지 노이즈를 먼저 제거해보자는 것입니다. 그래야 이미지에서 정보를 더 잘 추출할 수 있지 않을까요?

mean filtering

제일 간단한 방법으로는 노이즈 제거를 위해, 주변 값(이웃들)로부터 값을 얻어오자는 것입니다. 이를 Mean filtering이라고 합니다. 생각해야 할 요소는, 내가 고려할 이웃들의 크기가 고려 요소가 됩니다.

image

주변 값들을 가지고 pixel 값을 결정하기에 mean filtering을 거친다면 뭔가 주변값들과 동화되어 있는 이미지를 얻을 것 같습니다. 이는 주변과 잘 어우러지지만, 뭔가 주변 경계가 명확해보이지 않을 듯 해보입니다.

결과를 보려면 클릭하세요.

왼쪽이 filtering 전, 오른쪽이 후 입니다.
image

이러한 mean filtering은 주변 이웃들이 괜찮다면, 좋은 결과를 불러올 것입니다. 하지만 현실 세계에서는 다양한 노이즈가 있기에, 딱히 좋은 방법은 아닌 것 같습니다. 다른 방법을 살펴봅시다.

가우시안 필터

요약 : mean filter는 동일한 가중치를 부여하기에 -> 멀리 떨어져 있는 pixel도 동일한 영향을 준다. 하지만 가우시안 필터는 : 다른 가중치를 부여해서 멀리 떨어진 pixel에는 약간 영향을 주도록 함.

This post is licensed under CC BY 4.0 by the author.