이미지에 저역 통과 필터(Low-pass Filter)를 적용하면 블러 효과를 얻을 수 있습니다. 저역 통과 필터는 이미지에서 고주파 성분(노이즈, 에지 등)을 제거하는 역할을 합니다.
양방향 필터(Bilateral Filtering)는 OpenCV가 제공하는 대표적인 블러링 기법 중 하나로, 다음과 같은 특징을 가지고 있습니다.
- 노이즈를 효율적으로 제거합니다
- 이미지의 에지(edge)를 선명하게 유지합니다
- 다른 필터에 비해 처리 속도가 느린 편입니다
bilateralFilter() 메서드의 매개변수
OpenCV에서는 Imgproc 클래스의 bilateralFilter() 메서드를 사용하여 이미지에 양방향 필터를 적용할 수 있습니다. 이 메서드는 다음과 같은 매개변수를 받습니다.
- 원본 이미지와 결과 이미지를 나타내는 두 개의
Mat객체 - 픽셀 이웃(pixel neighborhood)의 지름을 나타내는 정수 값
- 색 공간(color space)과 좌표 공간(coordinate space)에서의 필터 시그마(sigma) 값을 나타내는 두 개의 정수 변수
- 사용할 경계(border) 유형을 나타내는 정수 값
예제 코드
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class BilateralFilterExample extends Application {
public void start(Stage stage) throws IOException {
// OpenCV 핵심 네이티브 라이브러리 로드
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// 이미지 데이터 읽기
String file ="D:\\Images\\window.jpg";
Mat src = Imgcodecs.imread(file);
// 결과를 저장할 목적지 행렬 생성
Mat dst = new Mat(src.rows(), src.cols(), src.type());
// 양방향 필터 적용
Imgproc.bilateralFilter(src, dst, 25, 75, 75, Core.BORDER_DEFAULT);
// 행렬을 JavaFX WritableImage로 변환
Image img = HighGui.toBufferedImage(dst);
WritableImage writableImage= SwingFXUtils.toFXImage((BufferedImage) img, null);
// ImageView 설정
ImageView imageView = new ImageView(writableImage);
imageView.setX(10);
imageView.setY(10);
imageView.setFitWidth(575);
imageView.setPreserveRatio(true);
// Scene 객체 설정
Group root = new Group(imageView);
Scene scene = new Scene(root, 595, 400);
stage.setTitle("Bilateral Filter Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}입력 이미지

실행 결과
위 프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

출력 이미지를 보면 노이즈는 부드럽게 제거되면서도 창문의 윤곽선 같은 에지 부분은 선명하게 유지되는 것을 알 수 있습니다. 이것이 바로 양방향 필터가 가우시안 블러 같은 일반적인 블러링 기법과 차별화되는 핵심 장점입니다. 다만 픽셀마다 주변 영역을 반복적으로 계산하기 때문에 처리 속도가 느리다는 점은 감안하여 실시간 처리가 필요한 경우에는 필터 크기(diameter) 값을 조절하는 것이 좋습니다.