Gabor filter的demo的OpenCV的实现
http://en.wikipedia.org/wiki/Gabor_filter
网络上有一些介绍:
http://blog.****.net/jinshengtao/article/details/17797641
http://blog.****.net/yao_zhuang/article/details/2532279
http://blog.163.com/[email protected]/blog/static/171861983201172091718341/
目前已有matlab的实现和c++的实现,其中c++的实现可以用在opencv中,需要包含一个头文件和一个cpp实现文件。
这里要说明一下,opencv-3.0源码中已经自带了Gabor filter的实现,有兴趣可以去看看,就在gabor.cpp里,不过这个实现比较简单,只提取了Gabor filter的实部作为卷积核,而前面那个c++版本的文件里,实现了提取Gabor filter的虚部和模作为卷积核。
下面以lena图像为例,给出沿四个方向使用Gabor filter的效果。代码如下:
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("../data/lena.jpg");
namedWindow("srcImage", WINDOW_AUTOSIZE);
imshow("srcImage", srcImage);
Mat gaborKernel = getGaborKernel( Size(31,31), 4.0, CV_PI/4, 10.0, 0.5, 0, CV_32F );
Mat dstImage;
filter2D(srcImage,dstImage,srcImage.depth(),gaborKernel);
namedWindow("dstImage",WINDOW_AUTOSIZE);
imshow("dstImage",dstImage);
waitKey(0);
return 0;
}
这是lena原图。
这是代码运行的效果:沿左上角-右下角方向的Gabor滤波。
这是沿左下角-右上角方向的Gabor滤波的效果。
这是沿垂直方向的Gabor 滤波的效果。
这是沿水平方向的Gabor滤波的效果。