먼저 Gσs(||p-q||) 함수는 두 점 사이의 거리에 대한 가우시안 함수로서, 앞서 7.2.2절에서 설명한 가우시안 필터와 완전히 같은 의미로 동작합니다. 반면에 Gσr(|fp-fq|) 함수는 두 점의 픽셀 값 차이에 의한 가우시안 함수입니다. Gσr(|fp-fq|) 함수는 두 점의 픽셀 밝기 값의 차이가 적은 평탄한 영역에서는 큰 가중치를 갖게 만듭니다. 반면에 에지를 사이에 두고 있는 두 픽셀에 대해서는 |fp-fq| 값이 크게 나타나므로 상대적으로 Gσr(|fp-fq|)는 거의 0에 가까운 값이 됩니다. 이로 인해 에지 근방에서는 가우시안 블러링 효과가 거의 나타나지 않고 에지가 보존됩니다.
양방항 필터 수식이 픽셀 값의 차이에 의존적이기 때문에 양방향 필터 마스크는 영상의 모든 픽셀에서 서로 다른 형태를 갖게 됩니다. 즉, 모든 픽셀 위치에서 주변 픽셀과의 밝기 차이에 의한 고유의 필터 마스크 행렬을 만들어서 마스크 연산을 수행해야 합니다. 이는 일반적인 가우시안 블러링이 모든 위치에서 일정한 가우시안 마스크 행렬을 사용하는 것과 차이가 있습니다. 그러므로 양방향 필터는 가우시안 블러링보다 훨씬 많은 연산량을 필요로 합니다.
OpenCV에서는 bilateralFilter() 함수를 이용하여 양방향 필터를 수행할 수 있습니다. bilateralFilter() 함수 원형은 다음과 같습니다.
void bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType = BORDER_DEFAULT); |
|
• src |
입력 영상. 8비트 또는 실수형, 1채널 또는 3채널 영상 |
• dst |
출력 영상. src와 같은 크기, 같은 타입을 갖습니다. |
• d |
필터링에 사용할 이웃 픽셀과의 거리(지름). 양수가 아닌 값(예를 들어 -1)을 지정하면 sigmaSpace로부터 자동 계산됩니다. |
• sigmaColor |
색 공간에서의 가우시안 필터 표준 편차 |
• sigmaSpace |
좌표 공간에서의 가우시안 필터 표준 편차 |
• borderType |
가장자리 픽셀 확장 방식 |