Non Local Means Filter

1 개요

이미지 큰 영역의 유사한 픽셀의 평균값을 통해 이미지의 노이즈를 줄이는 알고리즘입니다.

2 알고리즘 상세 설명

Non Local Means Filter는 특정 픽셀과 유사한 픽셀의 평균값을 통해 denoising을 진행합니다. 특정 픽셀과 유사한 픽셀이 가까운 영역에 있지 않을 수 있으므로, 이미지의 큰 영역을 탐색합니다. 유사도 계산을 위해 각 픽셀 주변의 윈도우 영역을 비교합니다.

u^i(p)=1qB(p,r)w(p,q)qB(p,r)ui(q)w(p,q)\large \hat{u}_{i}(p) = \frac{1}{\sum_{q \in B(p,r)}{w(p,q)}}\sum_{q \in B(p,r)}{u_i(q)w(p,q)}

가중치 w(p,q)w(p,q)는 패치 영역 내의 squared Euclidean distance, d2d^2을 통해 연산합니다. 이를 통해 각 픽셀값은 유사한 픽셀의 평균으로 복원됩니다.

d2(B(p,f),B(q,f))=1n(2f+1)2i1njB(0,f)(ui(p+j)ui(q+j))2\large d^2(B(p,f), B(q,f)) = \frac{1}{n(2f + 1)^2}{\sum^{n}_{i \in 1}}{\sum_{j \in B(0,f)}{(u_i(p + j) - u_i(q + j))^2}}

가중치 연산을 위해 지수 커널을 사용합니다.

w(p,q)=emax(d22σ2,0)h2\large w(p,q) = e^{-\frac{max(d^2-2\sigma^2, 0)}{h^2}}

Gaussian Noise Image Destination Image
Gaussian Noise Image Destination Image
Fig. 동작 예시 (Sigma: 0.2)

CNonLocalMeansFilter nonLocalMeansFilter;

CFLImage fliSourceImage;
nonLocalMeansFilter.SetSourceImage(fliSourceImage);

nonLocalMeansFilter.SetPatchKernel(3);
nonLocalMeansFilter.SetWindowKernel(7);

nonLocalMeansFilter.SetSigma(0.2);
nonLocalMeansFilter.SetH(0.4);

nonLocalMeansFilter.SetPaddingMethod(EPaddingMethod_DecreasingKernel);

nonLocalMeansFilter.Execute();
CNonLocalMeansFilter nonLocalMeansFilter = new CNonLocalMeansFilter();

CFLImage fliSourceImage = new CFLImage();
nonLocalMeansFilter.SetSourceImage(ref fliSourceImage);

nonLocalMeansFilter.SetPatchKernel(3);
nonLocalMeansFilter.SetWindowKernel(7);

nonLocalMeansFilter.SetSigma(0.2);
nonLocalMeansFilter.SetH(0.4);

nonLocalMeansFilter.SetPaddingMethod(EPaddingMethod.DecreasingKernel);

nonLocalMeansFilter.Execute();

3 파라미터 설정 및 사용 방법