Image blurring
Peponi │ 4/15/2025 │ 7m
Image blurring
Peponi
1. Introduction
이미지 블러링은 이미지에 나타나는 세부 정보를 부드럽게 하는 효과를 가져온다. 수학적으로는 주로 컨볼루션을 통해 구현되며, 이미지의 각 픽셀 값은 주변 픽셀 값과의 가중 평균으로 대체된다. 커널의 크기에 따라 블러 효과의 강도가 달라지게 되며, 커널의 크기가 클수록 더 강한 효과를 얻을 수 있다.
이미지 블러링을 수행하여 얻을 수 있는 대표적인 효과는 다음과 같다.
- 노이즈 제거 : 이미지의 노이즈를 줄여 깨끗한 영상을 얻을 수 있다.
- 세부 정보 감소 : 특정 세부 정보를 흐리게 하여 역동성, 인물 강조 등의 효과를 얻을 수 있다.
- 시각적 효과 : 애니메이션, 깊이와 같은 효과를 부여할 수 있다.
이 문서에서는 OpenCVSharp4에서 제공하는 다양한 이미지 블러링 메서드에 대한 사용 방법 및 예시를 간략하게 알아본다.
실습에 사용할 이미지는 다음과 같다.

2. Blur
Mat.Blur()
는 이미지 블러링을 수행할 수 있는 가장 기초적인 방법이다. 평균 블러링이 수행되어 이미지의 세부 사항이 부드러워짐과 함께 노이즈 감소 효과를 얻을 수 있다.
private void Blur(Mat image)
{
// 커널 내 픽셀 값에 대한 평균 블러링 수행
using var blurred = image.Blur(new OpenCvSharp.Size(3, 3));
}
3. BoxFilter
Mat.BoxFilter()
의 경우 기본적으로 Mat.Blur()
와 유사하며 경계 처리 방법 등의 추가 기능이 제공되어 상세한 blurring 처리가 가능하다.
private void BoxFilter(Mat image)
{
// 기본 Blur와 유사하고, 경계 처리 방법 등의 추가 기능 제공
using var blurred = image.BoxFilter(-1, new OpenCvSharp.Size(3, 3));
}
4. Filter2D
Mat.Filter2D()
는 커널을 설정 후 이미지에 대해 correlation 연산을 수행한다. 블러링, 샤프닝 등에 활용할 수 있으며 여기서는 블러링을 수행하는 예시를 알아본다.
private void Filter2D(Mat image)
{
// 아래 커널에 지정할 공간 크기만큼 배열 할당
// 블러 또는 샤프닝 효과를 얻는데 사용 가능하며 커널 설정에 따라 평균값, 가우시안 등이 적용된다.
// 모든 가중치를 동일하게 부여하여 평균 블러링을 적용하는 예시
float[] weight = [ 1/9f, 1/9f, 1/9f,
1/9f, 1/9f, 1/9f,
1/9f, 1/9f, 1/9f ];
using var kernel = Mat.FromPixelData(3, 3, MatType.CV_32FC1, weight);
using var blurred = image.Filter2D(-1, kernel);
}
5. Gaussian blur
Mat.GaussianBlur()
는 가우시안 커널을 이용하여 블러링을 수행한다. 이미지의 노이즈를 줄이고 부드럽게 만드는 데 사용되며, 엣지 검출 또는 전처리에 자주 활용된다.
private void GaussianBlur(Mat image)
{
// 가우시안 함수를 이용하여 이미지 블러링
// 너무 심하게 적용하는 경우 엣지 훼손 가능성 있음
// sigmaX and Y : 해당 축 방향 표준편차 (0 : 자동), 값이 커질수록 더 많이 블러링
using var blurred = image.GaussianBlur(new OpenCvSharp.Size(3, 3), 0);
}
6. Median blur
Mat.MedianBlur()
는 커널 내의 픽셀 중 중간값으로 픽셀 값이 대체되어 소금-후추 잡음 특징이 있는 이미지를 처리하는 데 특히 유용하다.
private void MedianBlur(Mat image)
{
// 커널 내의 픽셀 중 중간값으로 픽셀 대체
// 노이즈를 제거하는 것에 유용함
// 소금-후추 잡음 (노이즈로 인한 비정상 픽셀값) 처리에 탁월함
using var blurred = image.MedianBlur(3);
}
7. Bilateral filter
Mat.BilateralFilter()
는 인접 픽셀의 값 (거리, 색상) 을 고려하여 블러링을 수행한다. 가우시안 필터가 두 번 적용되어 노이즈를 줄이면서도 엣지를 보존하는 데 효과적이다 (소금-후추 잡음을 제거하는 데도 활용될 수 있다). 다만 필터가 두 번 적용됨에 따라 연산 시간이 많이 소요될 수 있어 강도를 적절하게 설정할 필요가 있다.
private void BilateralFilter(Mat image)
{
// 인접 픽셀의 값 (거리, 색상) 을 고려하여 블러링 수행
// 노이즈를 줄이면서 엣지를 보존하는 기법
// 지름 d를 음수로 지정하면 sigmaSpace (공간 거리의 표준 편차) 에 따라 자동 설정됨
// sigmaColor 값이 클수록 색상 차이가 큰 픽셀도 연산에 포함됨
// sigmaSpace 값이 클수록 더 멀리 떨어진 픽셀도 연산에 포함됨
using var blurred = image.BilateralFilter(-1, 105, 15);
}