Frequency domain filtering
머신비전, 영상처리 분야의 Frequency domain filtering에 대해 알아보겠습니다.
이번에는 numpy 라이브러리의 FFT (Fast Fourier Transform)을 이용하였습니다.
1. 절차
이미지에 대해서, Frequecy domain filtering의 절차는 아래와 같이 진행됩니다.
https://pt.slideshare.net/ASHI14march/enhancement-in-frequency-domain/3
Enhancement in frequency domain
Slide 3 of 42 of Enhancement in frequency domain
www.slideshare.net
2. Python 구현
사용한 라이브리러는 다음과 같습니다.
Input 이미지는 아래와 같습니다.
FFT를 다음과 같이 실행합니다.
FFT shift를 이용하여
zero-frequency component를 가운데로 옮겨줍니다.
이를 filtering하기 위해서,
사용한 이상적인 low, high-pass filter는 다음과 같습니다.
http://faculty.salina.k-state.edu/tim/mVision/freq-domain/freq_filters.html#low-pass-filters
17.8. Frequency Domain Filters — Machine Vision Study Guide
17.8. Frequency Domain Filters Whereas convolution is used to evaluate filters in the spatial domain, filtering is implemented in the frequency domain by multiplication. The image in the frequency domain is multiplied by the filter’s frequency response i
faculty.salina.k-state.edu
저는 가운데로부터 일정한 거리(반지름)에 있는 부분을
filtering할 수 있도록 함수를 만들었습니다.
위의 함수를 이용하여
low-pass filter를 적용하면 아래의 결과를 얻습니다.
inverse FFT shift와 inverse FFT를 적용하여
아래와 같은 최종 결과를 얻을 수 있습니다.
기존 이미지와 비교하면, 그림이 약간 blur되었음을 알 수 있습니다.
반지름을 20으로 줄여 결과를 보면,
확실히 blur된 것을 확인할 수 있습니다.
이번에는 high-pass filter를 적용해보겠습니다.
위에 만들었던 함수를 다시 이용하면 다음과 같습니다.
이에 대해서,
다시 inverse FFT shift와 inverse FFT를 적용하여
최종 결과를 얻을 수 있습니다.
원본 이미지와 비교하면,
edge부분을 보여줌을 알 수 있습니다.
해당소스는 아래의 링크에서 보실 수 있습니다.
https://github.com/jstar0525/MachineVision/tree/main/07%20Frequency%20domain%20filtering
jstar0525/MachineVision
Machine Vision Algorithm. Contribute to jstar0525/MachineVision development by creating an account on GitHub.
github.com