대학원 일기

Guided Filtering 본문

Image processing/OpenCV

Guided Filtering

대학원생(노예) 2022. 3. 26. 20:48

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의 자세한 연산과정은 아래 링크를 참고하면 된다.

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

 

[계산사진학] 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 적용 후>

Dehaze image

 

 

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

 

Comments