Guided Filtering
Guided Filtering
Guided Filtering은 Edge Aware Image Filtering으로 이미 알고 있는 영상을 바탕으로 input되는 영상을 부드럽게 만들어준다.
Guided Filter
Guided Filter에서 필요한 파라미터(parameter)는 $p$(input image), $I$(Guide image), $r$(kernel size), $eps$(strength)가 필요하다.
- $p$: input image로 noise가 있는 image
- $I$: Guide image로 $p$와 같은 깔끔한 영상
- $r$: blurring 할 때의 커널 사이즈($r \times r$)
- $eps$: regularization term의 strength 조절
Guided Filter 방식
Guided Filter는 부드럽게 만들 영상인 $p$를 Guide 영상인 $I$를 통해 서로 같은 edge 정보로 output 영상인 $q$를 얻는다. 즉, $I$에 있는 edge 정보를 기반으로 $p$에 있는 noise를 제거한다.
Guided Filter의 핵심은 Guided Patch $I$에 linear transformation($y = ax + b$)을 적용하여 output patch $q$를 얻는 것이다.
$q = a \times I + b$
위 식에서 a와 b는 input image와 같은 edge를 공유하는 guided image를 통해 쉽게 정의할 수 있다.
Guided Filter의 자세한 연산과정은 아래 링크를 참고하면 된다.
[계산사진학] Edge Aware Image Filtering - Guided Filtering
Edge aware filter 중 가장 대표적인 bilateral filter를 알아보았다. 이번에는 다른 방법인 guided image filtering에 대해서 알아보려고 한다. Guided filter는 마찬가지로 edge aware filter이며 bilate
velog.io
Guided Filter Code
Guided Filter 코드는 위 pseudo code를 바탕으로 python으로 작성했다. (r = 60, eps = 0.0001)
def Guidedfilter(image, p, r, eps): # Haze image(Guide, I), transmission(input), kernel size, strength
blur_factor = (r, r)
# cv2.blur(src, kernel size)
mean_I = cv2.blur(image, blur_factor) # I blurring
mean_p = cv2.blur(p, blur_factor) # p blurring
corr_I = cv2.blur(image*image, blur_factor) # I * I blurring
corr_Ip = cv2.blur(image*p, blur_factor) # I * p blurring
var_I = corr_I - mean_I * mean_I # variance
cov_Ip = corr_Ip - mean_I * mean_p # covariance
a = cov_Ip / (var_I + eps)
b = mean_p - a * mean_I
mean_a = cv2.blur(a, blur_factor)
mean_b = cv2.blur(b, blur_factor)
q = mean_a * image + mean_b # linear transformation: q = a*I + b
return q
Result - 안개 제거(Dark Channel Prior)
-----dark channel 연산 후-----
<Guided Filter 적용 전>![]() |
<Guided Filter 적용 후>![]() |
Reference
https://velog.io/@claude_ssim/%EA%B3%84%EC%82%B0%EC%82%AC%EC%A7%84%ED%95%99-Edge-Aware-Image-Filtering-Guided-Filtering