본문 바로가기

IT

OpenCV 필터링: 블러, 가우시안, 미디언 필터 사용법

이미지 필터링은 OpenCV에서 노이즈 제거, 엣지 강조, 부드러운 효과 적용 등 다양한 처리에 자주 사용되는 기술입니다

 

OpenCV 필터링

필터링이란 무엇인가요?

이미지 필터링은 픽셀 주변의 값을 평균 내거나 강조해서 이미지를 부드럽게 만들거나 노이즈를 줄이는 처리 방식이에요.

영상 처리에서는 이미지 품질 향상이나 전처리 단계로 자주 사용돼요.

 

OpenCV에서는 다양한 필터 함수들이 제공되며,

이 중 가장 많이 쓰이는 게 블러(Blur), 가우시안 필터(GaussianBlur), 미디언 필터(MedianBlur)입니다.

각각 특징과 쓰임새가 조금씩 다르기 때문에 목적에 맞게 선택해야 해요.

 

평균 블러(Blur): 간단하고 빠른 흐림 효과

cv::blur() 또는 cv::boxFilter()는 가장 기본적인 블러 필터로,

지정한 커널 크기 내의 평균값으로 픽셀을 대체해 이미지를 부드럽게 만들어줘요.

속도가 빠르고 간단한 흐림 효과를 줄 때 좋아요.

 

cv::Mat img = cv::imread("sample.jpg");
cv::Mat blurred;
cv::blur(img, blurred, cv::Size(5, 5));  // 5x5 커널로 평균 블러

 

하지만 가장자리에 아티팩트가 생기기 쉽고, 고급 노이즈 제거엔 적합하지 않아요.

 

가우시안 블러(GaussianBlur): 부드럽고 자연스러운 흐림

cv::GaussianBlur()는 픽셀 주변을 가우시안 분포 가중치로 평균하는 방식이에요.

중앙 픽셀에 가까울수록 더 많은 비중을 주기 때문에 자연스럽게 흐려지고,

특히 카메라 노이즈 제거, 엣지 전처리 등에서 자주 사용돼요.

 

cv::GaussianBlur(img, blurred, cv::Size(7, 7), 1.5);

 

여기서 세 번째 인자는 커널 크기, 네 번째 인자는 시그마(σ)로 흐림의 강도를 조절할 수 있어요.

이미지가 자연스럽게 부드러워지며, 디테일을 너무 날려버리는 걸 방지해줘요.

 

미디언 필터(MedianBlur): 소금-후추 노이즈에 강력

cv::medianBlur()는 주변 픽셀의 중앙값을 선택해서 픽셀을 대체하는 방식이에요.

특히 salt & pepper 같은 점 형태의 잡음에 매우 효과적이며, 엣지를 유지하면서 노이즈를 제거할 수 있어요.

cv::medianBlur(img, blurred, 5);  // 커널 크기는 홀수여야 함

 

다만 계산 비용이 높고, 커널이 너무 크면 이미지가 뭉개질 수 있으니 적절한 크기 선택이 중요해요.

얼굴 인식 전처리, 디지털 문서 정리에 자주 사용돼요.

 

필터링 전후의 이미지를 비교하여 자동으로 최적의 커널 크기

필터링 전후의 이미지를 비교하여 최적의 커널 크기를 자동으로 찾으려면,

주관적인 ‘좋은 품질’ 대신 수치 기반의 평가 지표를 사용하는 것이 좋아요.

대표적으로 PSNR(Peak Signal-to-Noise Ratio)이나 SSIM(Structural Similarity Index)을 이용해

필터링 전 이미지와 필터링 후 이미지를 비교한 뒤,

가장 높은 유사도를 보이는 커널 크기를 선택할 수 있어요.

 

 

PSNR이 높을수록 원본에 가까운 결과라는 뜻이니,

흐림 효과는 유지하면서도 이미지 품질을 최대한 보존하는 커널 크기를 자동으로 결정할 수 있죠.

 

이외에도 SSIM을 활용하면 구조적 유사도까지 반영할 수 있고,

객체 검출이 목적이라면 후속 알고리즘 정확도를 기반으로 커널을 최적화하는 방식도 활용 가능해요.

 

이 블로그의 내용을 대화 형식인 음성으로 들으면서 정리하면, 보다 쉽게 이해할 수 있을 거예요.
다운받아 들어보세요~

OpenCV 필터링 블러, 가우시안, 미디언 필터 사용법_138.mp3
3.85MB