일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 활성화 함수
- 파이썬 경사하강법
- 딥러닝
- 자바 영화 api
- 디자인 패턴
- 인공지능
- 대학원 급여
- 딥러닝 실험 깃 버전관리
- MLP
- 의료 ai 대학원 월급
- 코딩테스트
- python
- Dehaze
- 인공지능 깃 버전관리
- 영화 api
- 정규화
- C# 프로젝트
- 디자인패턴
- 머신러닝
- 통계학
- API
- 대학원 월급
- 자바
- pandas
- 백준
- DCP
- 로스트아크
- 경사하강법
- 자바 프로젝트
- 파이썬
- Today
- Total
대학원 일기
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
'Image processing > OpenCV' 카테고리의 다른 글
OpenCV-모폴로지(Morphology) 연산 (침식, 팽창, 열림, 닫힘, 그래디언트, 탑햇, 블) (0) | 2022.02.09 |
---|