2차원 웨이블릿 변환은 이미지의 다양한 주파수 성분을 분리하여 필터링하거나 노이즈 제거를 수행하는 데 매우 효과적이다. 웨이블릿 기반 이미지 필터링 및 노이즈 제거는 이미지의 해상도를 손상시키지 않으면서 노이즈 성분을 제거하거나 특정 주파수 대역을 필터링하는 데 널리 사용된다. 본 장에서는 2차원 웨이블릿 변환을 활용하여 이미지 필터링과 노이즈 제거의 이론적 배경 및 응용 방법을 소개하겠다.
2차원 웨이블릿 변환을 활용한 노이즈 제거
노이즈 제거를 위해 2차원 웨이블릿 변환을 적용하면 고주파 성분에 포함된 노이즈를 효과적으로 감쇠시킬 수 있다. 이를 위해 이미지 \mathbf{I}에 웨이블릿 변환을 적용하여 노이즈 성분과 신호 성분을 분리한 뒤, 노이즈 성분을 제거하고 신호를 복원하는 방식으로 진행된다.
웨이블릿 변환을 통한 계수 분해
웨이블릿 변환을 통해 이미지 \mathbf{I}는 다음과 같이 저주파 성분 \mathbf{A}와 고주파 성분들 \mathbf{H}, \mathbf{V}, \mathbf{D}로 분해된다.
여기서: - \mathbf{A}: 저주파 성분(approximation), 이미지의 주요 구조를 담고 있는 성분 - \mathbf{H}: 수평 고주파 성분(horizontal detail), 수평 방향의 세부 정보를 포함 - \mathbf{V}: 수직 고주파 성분(vertical detail), 수직 방향의 세부 정보를 포함 - \mathbf{D}: 대각선 고주파 성분(diagonal detail), 대각선 방향의 세부 정보를 포함
이와 같은 성분 분해를 통해 이미지의 중요한 정보를 보존하면서 노이즈 성분을 줄일 수 있다.
임계값 필터링 (Thresholding) 기법
노이즈 제거를 위해 주로 사용하는 방법은 웨이블릿 계수에 임계값 필터링을 적용하는 방식이다. 임계값 필터링은 소프트 임계값(soft thresholding)과 하드 임계값(hard thresholding)으로 구분되며, 이를 통해 작은 값을 가지는 노이즈 성분을 제거한다.
하드 임계값 (Hard Thresholding)
하드 임계값 방법은 웨이블릿 계수가 일정한 임계값 T보다 작을 경우 해당 계수를 0으로 설정하는 방식이다. 하드 임계값 함수는 다음과 같이 정의된다.
이 방식은 특정 계수를 완전히 제거하여 노이즈를 억제하지만, 임계값 근처에서의 불연속성으로 인해 아티팩트가 발생할 수 있다.
소프트 임계값 (Soft Thresholding)
소프트 임계값 방법은 하드 임계값과 달리 임계값 이하의 계수를 0으로 설정할 뿐만 아니라, 임계값 이상인 계수도 일정 값을 감소시키는 방식이다. 소프트 임계값 함수는 다음과 같이 정의된다.
소프트 임계값 방식은 노이즈를 부드럽게 억제하며, 아티팩트 발생을 줄이는 장점이 있다.
노이즈 제거 과정의 예시
- 웨이블릿 변환 적용: 입력 이미지 \mathbf{I}에 웨이블릿 변환을 적용하여 저주파 성분 \mathbf{A}와 고주파 성분 \mathbf{H}, \mathbf{V}, \mathbf{D}를 추출한다.
- 임계값 필터링: 고주파 성분 \mathbf{H}, \mathbf{V}, \mathbf{D}에 대해 선택된 임계값 T를 이용하여 필터링을 수행한다.
- 역 웨이블릿 변환: 필터링된 성분들을 합쳐 역 웨이블릿 변환을 적용하여 노이즈가 제거된 이미지를 얻는다.
이 과정을 통해 얻어진 이미지는 원본의 중요한 정보를 유지하면서 노이즈가 크게 감소한 형태로 복원된다.
임계값 설정 방법
임계값 T의 설정은 노이즈 제거 성능에 중요한 영향을 미친다. 일반적으로 임계값은 노이즈의 분산 \sigma와 웨이블릿 변환 레벨에 따라 결정되며, 주로 다음과 같은 방법을 사용한다.
균일 임계값 (Universal Threshold)
균일 임계값은 전체 웨이블릿 계수에 대해 동일한 임계값을 설정하는 방법이다. 이 방식은 Donoho와 Johnstone이 제안한 방식으로, 임계값 T는 다음과 같이 계산된다.
여기서: - \sigma: 노이즈의 표준 편차 - n: 웨이블릿 계수의 개수
이 방식은 대부분의 경우 적절한 노이즈 제거 성능을 보여주지만, 세부 정보가 손실될 수 있다.
계층별 임계값 (Level-Dependent Threshold)
계층별 임계값은 웨이블릿 변환의 각 레벨에 따라 다른 임계값을 설정하는 방법이다. 주로 저주파 성분에 대해 낮은 임계값을 설정하고, 고주파 성분에 대해서는 더 높은 임계값을 설정하여 노이즈를 더욱 효과적으로 제거한다.
이 방식의 대표적인 예로 Stein의 불편 리스크 추정 (SURE, Stein’s Unbiased Risk Estimator) 방식이 있으며, 각 레벨 j에 대해 최적의 임계값 T_j를 결정하여 노이즈를 효과적으로 억제할 수 있다.
주파수 대역별 필터링
웨이블릿 변환은 다중 해상도 분석을 통해 주파수 대역별로 이미지를 분해한다. 이를 통해 각 주파수 대역에 맞춘 필터링이 가능해진다. 예를 들어, 낮은 주파수 대역에 위치한 저주파 성분은 원본 이미지의 중요한 구조적 정보를 포함하고 있으며, 높은 주파수 대역의 고주파 성분은 세부적인 노이즈 성분을 포함할 가능성이 크다.
저주파 성분 필터링
저주파 성분 \mathbf{A}는 이미지의 주요 구조를 포함하며, 대부분의 노이즈 제거 과정에서 유지해야 하는 성분이다. 따라서 저주파 성분에 대한 필터링은 최소화하거나 적용하지 않는 것이 일반적이다.
고주파 성분 필터링
고주파 성분 \mathbf{H}, \mathbf{V}, \mathbf{D}는 주로 노이즈가 포함된 영역이며, 이 영역에 대해 적극적인 필터링을 적용하여 노이즈를 줄일 수 있다. 이를 위해 소프트 또는 하드 임계값 필터링을 적용하며, 필터링 후 노이즈가 억제된 고주파 성분을 역 웨이블릿 변환에 사용한다.
이미지 복원
노이즈 제거가 완료된 후, 저주파 성분 \mathbf{A}와 필터링된 고주파 성분 \mathbf{H}, \mathbf{V}, \mathbf{D}를 결합하여 역 웨이블릿 변환을 수행한다. 이를 통해 노이즈가 제거된 이미지를 얻을 수 있으며, 원본 이미지의 중요한 구조적 정보는 보존되면서 노이즈만 감소된 형태로 복원된다.
예제: 이미지 노이즈 제거
이미지 \mathbf{I}에 대해 웨이블릿 노이즈 제거를 적용하는 C++ 코드 예제는 다음과 같다.
#include <iostream>
#include <opencv2/opencv.hpp>
#include <wavelet_transform_library.hpp> // 가상의 웨이블릿 라이브러리
int main() {
cv::Mat image = cv::imread("noisy_image.jpg", cv::IMREAD_GRAYSCALE);
if (image.empty()) {
std::cerr << "이미지를 불러올 수 없다!" << std::endl;
return -1;
}
// 웨이블릿 변환 수행
auto waveletCoeffs = WaveletTransform::dwt2D(image);
// 임계값 적용 (소프트 임계값 방식)
double threshold = calculateSoftThreshold(waveletCoeffs, sigma);
for (auto &coeff : waveletCoeffs) {
coeff = softThresholding(coeff, threshold);
}
// 역 웨이블릿 변환
cv::Mat denoisedImage = WaveletTransform::idwt2D(waveletCoeffs);
cv::imshow("원본 이미지", image);
cv::imshow("노이즈 제거된 이미지", denoisedImage);
cv::waitKey(0);
return 0;
}
이 코드는 기본적인 웨이블릿 노이즈 제거 과정의 흐름을 보여주며, calculateSoftThreshold
와 softThresholding
함수는 임계값을 계산하고 소프트 임계값 필터링을 적용하는 함수이다.