영상처리

아주 간단한 Box filter 구현 /C++/openCV

아무 말하는 감자 2021. 4. 15. 00:42

티스토리 코드 복붙이 안되어서 메모장에 쓴 거 캡쳐해서 올림.

코드 필요하시면 댓글 다시길. 복붙 해드릴테니. (답이 늦을 수 있음 주의)

 

이 코드는 img와 kernel을 곱한 거임.

sum에는 결과적으로 img2의 한 픽셀을 중심으로 그 neighbor들이 kernel과 곱해져 다 더해진 값에 kenel의 합을 나눈 값이 앞선 img2의 한 픽셀에 들어감.

이 과정을 img2의 모든 픽셀의 값을 다 계산할 때까지 반복.

kernel이 곱해질 neighbor가 부족한 경우(제일 윗줄[0][], 제일 아랫줄[img.height][],제일 왼쪽 줄[][0], 제일 오른쪽 줄[][img.width]), padding을 통해 해결. (위 코드에선 max()로 padding) 

 

밑 사진을 보면, 이해가 더 쉬울 듯.

 

 

 

*Mat kernel은 box filter니까 1.0f가 21*21 형태로 있는 걸로 만들었음!

만들면서, kernel의 합을 미리 나눠줌. (linear 하잖아요.)

그 코드는 지워버린 듯, 담에 기억나면 쓰러오겠음.

 

 

kernel in box filter, but here, 21*21;