예를 들어 σx=σy=1.0인 2차원 가우시안 마스크로 영상을 필터링하는 것은 σ=1.0인 1차원 가우시안 마스크를 가로 방향과 세로 방향으로 각각 생성하여 두 번 필터링하는 것과 같습니다. 실제로 σ=1.0인 1차원 가우시안 함수로부터 1×9 가우시안 마스크 행렬은 다음과 같습니다.
그러므로 행렬 g를 이용하여 필터링을 한 번 수행하고, 그 결과를 다시 g의 전치 행렬인 gT를 이용하여 필터링하는 것은 2차원 가우시안 필터 마스크로 한 번 필터링하는 것과 같은 결과를 얻을 수 있습니다. 이 경우 픽셀 하나에 대해 필요한 곱셈 연산 횟수가 18번으로 감소하며 연산량이 크게 줄어듭니다.
OpenCV에서 가우시안 필터링을 수행하려면 GaussianBlur() 함수를 사용합니다. GaussianBlur() 함수 원형은 다음과 같습니다.
void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT); |
|
• src |
입력 영상. 다채널 영상은 각 채널별로 블러링을 수행합니다. |
• dst |
출력 영상. src와 같은 크기, 같은 타입을 갖습니다. |
• ksize |
가우시안 커널 크기. ksize.width와 ksize.height는 0보다 큰 홀수이어야 합니다. ksize에 Size()를 지정하면 표준 편차로부터 커널 크기를 자동으로 결정합니다. |
• sigmaX |
x 방향으로의 가우시안 커널 표준 편차 |
• sigmaY |
y 방향으로의 가우시안 커널 표준 편차. 만약 sigmaY = 0이면 sigmaX와 같은 값을 사용합니다. 만약 sigmaX와 simgaY가 모두 0이면 ksize의 width와 height 값으로부터 표준 편차를 계산하여 사용합니다. |
• borderType |
가장자리 픽셀 확장 방식 |