2021. 9. 23. 13:05 자기개발/OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝
7장 필터링
7장. 필터링
7.1 영상의 필터링
7.1.1 필터링 연산 방법
영상 처리에서 필터링(filtering)이란 영상에서 원하는 정보만 통과시키고 원치 않는 정보는 걸러 내는 작업입니다.
영상의 필터링은 보통 마스크(mask)라고 부르는 작은 크기의 행렬을 이용합니다. 마스크는 필터링의 성격을 정의하는 행렬이며 커널(kernel), 윈도우(window)라고도 부르며, 경우에 따라서는 마스크 자체를 필터라고 부르기도 합니다.
고정점은 현재 필터링 작업을 수행하고 있는 기준 픽셀 위치를 나타내고, 대부분의 경우 마스크 행렬 정중앙을 고정점으로 사용합니다.
(x, y) 좌표에서 마스크 연산을 통해 결과 영상의 픽셀 값 g(x, y)를 구했으면, 다음에는 마스크를 한 픽셀 옆으로 이동하여 (x+1, y) 좌표에 다시 마스크 연산을 수행하고 그 결과를 g(x+1, y)에 저장합니다. 이 과정을 영상 전체 픽셀에 대해 수행하면 필터링이 완료됩니다.
OpenCV는 영상의 필터링을 수행할 때, 영상의 가장자리 픽셀을 확장하여 영상 바깥쪽에 가상의 픽셀을 만듭니다. 이때 영상의 바깥쪽 가상의 픽셀 값을 어떻게 설정하는가에 따라 필터링 연산 결과가 달라집니다. OpenCV 필터링 연산에서 기본적으로 사용하는 가장자리 픽셀 확장 방법을 그림 7-3에 나타냈습니다.
엠보싱이란 직물이나 종이, 금속판 등에 올록볼록한 형태로 만든 객체의 윤곽 또는 무늬를 뜻하며, 엠보싱 필터는 입력 영상을 엠보싱 느낌이 나도록 변환하는 필터입니다.
7.2 블러링: 영상 부드럽게 하기
블러링(blurring)은 마치 초점이 맞지 않은 사진처럼 영상을 부드럽게 만드는 필터링 기법이며 스무딩(smoothing)이라고도 합니다.
7.2.1 평균값 필터
다양한 크기의 평균값 필터 마스크를 그림 7-6에 나타냈습니다. 그림 7-6에서 왼쪽 그림은 3×3 크기의 평균값 필터 마스크이고, 오른쪽 그림은 5×5 크기의 평균값 필터 마스크입니다.
7.2.2 가우시안 필터
평균값 필터보다 자연스러운 블러링 결과를 생성하는 가우시안 필터(Gaussian filter)에 대해 설명합니다. 가우시안 필터는 가우시안 분포(Gaussian distribution) 함수를 근사하여 생성한 필터 마스크를 사용하는 필터링 기법입니다.
가우시안 분포는 평균과 표준 편차에 따라 분포 모양이 결정됩니다. 다만 영상의 가우시안 필터에서는 주로 평균이 0인 가우시안 분포 함수를 사용합니다. 평균이 0이고 표준 편차가 σ인 1차원 가우시안 분포를 함수식으로 나타내면 다음과 같습니다.
가우시안 분포를 따르는 2차원 필터 마스크 행렬을 생성하려면 2차원 가우시안 분포 함수를 근사해야 합니다. 2차원 가우시안 분포 함수는 x와 y 두 개의 변수를 사용하고, 분포의 모양을 결정하는 평균과 표준 편차도 x축과 y축 방향에 따라 따로 설정합니다. 평균이 (0, 0)이고 x축과 y축 방향의 표준 편차가 각각 σx, σy인 2차원 가우시안 분포 함수는 다음과 같이 정의됩니다.
OpenCV에서 가우시안 필터링을 수행하려면 GaussianBlur() 함수를 사용합니다. GaussianBlur() 함수 원형은 다음과 같습니다.
getGaussianKernel() 함수는 표준 편차가 sigma인 1차원 가우시안 분포 함수로부터 ksize×1 크기의 필터 마스크 행렬을 생성하여 반환합니다. ksize는 (8sigma + 1)보다 같거나 크게 지정하는 것이 좋습니다. 이 행렬의 원소에 저장되는 값은 다음 수식을 따릅니다.
7.3 샤프닝: 영상 날카롭게 하기
샤프닝은 초점이 잘 맞은 사진처럼 사물의 윤곽이 뚜렷하고 선명한 느낌이 나도록 영상을 변경하는 필터링 기법입니다.
7.3.1 언샤프 마스크 필터
블러링이 적용되어 부드러워진 영상을 활용하여 반대로 날카로운 영상을 생성한다는 것이죠. 여기서 블러링이 적용된 영상, 즉 날카롭지 않은 영상을 언샤프(unsharp)하다고 말하기도 합니다. 이처럼 언샤프한 영상을 이용하여 역으로 날카로운 영상을 생성하는 필터를 언샤프 마스크 필터(unsharp mask filter)라고 합니다.
7.4 잡음 제거 필터링
7.4.1 영상과 잡음 모델
신호 처리 관점에서 잡음(noise)이란 원본 신호에 추가된 원치 않은 신호를 의미합니다. 영상에서 잡음은 주로 영상을 획득하는 과정에서 발생하며, 디지털 카메라에서 사진을 촬영하는 경우에는 광학적 신호를 전기적 신호로 변환하는 센서(sensor)에서 주로 잡음이 추가됩니다.
디지털 카메라에서 카메라 렌즈가 바라보는 장면을 원본 신호 s(x, y)라고 하고, 여기에 추가되는 잡음을 n(x, y)라고 표현한다면 실제로 카메라에서 획득되는 영상 신호 f(x, y)는 보통 다음과 같이 표현합니다.
7.4.2 양방향 필터
1998년 토마시(C. Tomasi)가 제안한 양방향 필터(bilateral filter)는 에지 성분은 그대로 유지하면서 가우시안 잡음을 효과적으로 제거하는 알고리즘입니다[Tomasi98]. 양방향 필터 기능은 OpenCV 라이브러리 초기 버전부터 포함되어 있어서 많은 사람들이 사용하고 있습니다.
양방향 필터는 다음 공식을 사용하여 필터링을 수행합니다.
앞 수식에서 f는 입력 영상, g는 출력 영상, 그리고 p와 q는 픽셀의 좌표를 나타냅니다. fp와 fq는 각각 p점과 q점에서의 입력 영상 픽셀 값이고, gp는 p점에서의 출력 영상 픽셀 값입니다. Gσs와 Gσr는 각각 표준 편차가 σs와 σr인 가우시안 분포 함수입니다. S는 필터 크기를 나타내고, Wp는 양방향 필터 마스크 합이 1이 되도록 만드는 정규화 상수입니다. 양방향 필터 수식은 매우 복잡해 보이지만 가만히 살펴보면 두 개의 가우시안 함수 곱으로 구성된 필터입니다.
7.4.3 미디언 필터
미디언 필터(median filter)는 입력 영상에서 자기 자신 픽셀과 주변 픽셀 값 중에서 중간값(median)을 선택하여 결과 영상 픽셀 값으로 설정하는 필터링 기법입니다.
'자기개발 > OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝' 카테고리의 다른 글
6장 영상의 산술 및 논리 연산 (0) | 2021.09.12 |
---|---|
5장 영상의 밝기와 명암비 조절 (0) | 2021.09.12 |
4장 OpenCV 주요 기능 (0) | 2021.09.06 |
3장 OpenCV 주요 클래스 (0) | 2021.09.05 |
1장 컴퓨터 비전과 영상의 이해, 2장 OpenCV 설치와 기초 사용법 (0) | 2021.08.27 |