转载请注明:http://www.cppblog.com/polly-yang/

一.房屋检测小结

一开始,直接用LSD(Line Segment Detector)检测VHR(Very High Resolution)遥感卫星图像中的房屋,效果很屎。效果很屎的主要原因是因为存在各种干扰,概括下来,主要有:
      1. 道路。道路干扰性强主要是因为道路呈现各种形态,弯曲,笔直,宽度不一。同时还有桥梁也影响检测率,桥梁附近呈现较好的阴影效果和Line Segment,会干扰几何检测方法。
      2.森林或农田。利用LSD检测Line Segment的时候,由于LSD原理限制,在森林或农田区域,会形成较多的Line Segment,影响几何检测方法。
      3.房屋本身。实际VHR遥感图像中,房屋形态较多,大小差异较大,且有的呈现不规则的形状,有的成像后,边缘模糊,不利于产生较好的LSD结果。
      4.遮挡。主要是被森林遮挡,屋顶形状不完整,不利于设计算法判别。
      6.光照不均,屋顶自身纹理。光照不均和屋顶自己纹理不均匀,都会加大VHR中物体的检测难度。

二.Gabor 滤波器简介(部分资料来自维基百科)

在图像处理领域,Gabor滤波器是一个用于边缘检测的线性滤波器。Gabor滤波器的频率和方向表示接近人类视觉系统对于频率和方向的表示,并且它们常备用于纹理表示和描述。在空域,一个2维的Gabor滤波器是一个正弦平面波和高斯核函数的乘积。Gabor滤波器是自相似的,也就是说,所有Gabor滤波器都可以从一个母小波经过膨胀和旋转产生。实际应用中,Gabor滤波器可以在频域的不同尺度,不同方向上提取相关特征。

三.Gabor滤波器公式化定义

公式中:

λ:正弦函数波长;

θ:Gabor核函数的方向

ψ:相位偏移

σ:高斯函数的标准差

γ: 空间的宽高比(这个没太理解)

四.Gabor 滤波器opencv实现代码

  1CGaborFilter::CGaborFilter(float dLambda, float dTheta, float dRatio_S2L, float dGamma, float dPhi)
  2{
  3    Lambda = dLambda;
  4    Theta = dTheta;
  5    sigma = dLambda*dRatio_S2L;
  6    Gamma = dGamma;
  7    Phi = dPhi;
  8    m_pGaborFilter = NULL;
  9    bParam = 1;
 10}
 11
 12
 13CGaborFilter::~CGaborFilter(void)
 14{
 15    cvReleaseMat(&m_pGaborFilter);
 16}
 17
 18void CGaborFilter::Init()
 19{
 20    float dtmp;
 21    int itmp;
 22    if(is_param() == 0)
 23    {
 24        printf("The parameters are not enough!");
 25    }
 26    else
 27    {
 28        dtmp = sqrt(48*pow(sigma,2)+1);
 29        itmp = cvRound(dtmp);
 30        if(itmp%2 == 0)
 31            itmp ++;
 32        GaborWindow.height = GaborWindow.width = 16;
 33        bInit = 1;
 34
 35        create_kernel();
 36    }
 37}
 38
 39void CGaborFilter::Init(float dSigma,float dTheta,float dPhi)
 40{
 41    float dtmp;
 42    int itmp;
 43
 44    sigma = dSigma;
 45    Theta = dTheta;
 46    Phi = dPhi;
 47    Gamma = GAMMA;
 48    Lambda = sigma/RATIO_S2L;
 49    bParam = 1;
 50
 51    dtmp = sqrt(24*pow(sigma,2));
 52    itmp = cvRound(dtmp);
 53    if(itmp%2 == 0)
 54        itmp ++;
 55    GaborWindow.height = GaborWindow.width = itmp;
 56    bInit = 1; 
 57
 58    create_kernel();
 59}
 60
 61void CGaborFilter::Init(float dLambda,float dTheta, float dPhi,float dGamma)
 62{
 63    float dtmp;
 64    int itmp;
 65
 66    Lambda = dLambda;
 67    Theta  = dTheta;
 68    Phi    = dPhi;
 69    Gamma  = dGamma;
 70    sigma  = Lambda * RATIO_S2L;
 71    bParam = 1;
 72
 73    dtmp = sqrt(24*pow(sigma,2));
 74    itmp = cvRound(dtmp);
 75    if(itmp%2 == 0)
 76        itmp ++;
 77    GaborWindow.height = GaborWindow.width = itmp;
 78    bInit = 1; 
 79
 80    create_kernel();
 81}
 82
 83void CGaborFilter::create_kernel()
 84{
 85    float tmp1,tmp2,xtmp,ytmp,re;
 86    int i,j,x,y;
 87
 88    if(is_init() == 0)
 89        printf("The parameters haven't been initialed!");
 90
 91
 92    else{
 93
 94
 95        m_pGaborFilter = cvCreateMat(GaborWindow.height,GaborWindow.width,CV_32FC1);
 96        for(i= 0; i< GaborWindow.height; i++)
 97            for(j = 0; j< GaborWindow.width; j++)
 98            {
 99                x = j - GaborWindow.width/2;
100                y = i - GaborWindow.height/2;
101
102
103                xtmp = (float)x*cos(Theta) - (float)y*sin(Theta);
104                ytmp = (float)x*sin(Theta) + (float)y*cos(Theta);
105
106                tmp1 = exp(-(pow(xtmp,2)+pow(ytmp*Gamma,2))/(2*pow(sigma,2)));
107                tmp2 = cos(2*PI*xtmp/Lambda + Phi);
108                // int p=sizeof(float);
109                re   = tmp1*tmp2;
110                cvSetReal2D((CvMat*)m_pGaborFilter,i,j,re);
111
112            }
113            bKernel = 1;
114    }
115}
116
117IplImage * CGaborFilter::get_Image()
118{
119    if(is_kernel() == 0)
120    {
121        printf("The filter hasn't bee created!");
122    }
123    else
124    {
125        IplImage *pImg = cvCreateImage(GaborWindow,IPL_DEPTH_32F,1);
126        IplImage *pImgU8 = cvCreateImage(GaborWindow,IPL_DEPTH_8U,1);
127        CvMat * pMat = cvCreateMat(GaborWindow.height,GaborWindow.width,CV_32FC1);
128
129        cvCopy(m_pGaborFilter,pImg);
130        //pImg->imageData = (char *)pMat->data;
131        cvNormalize((IplImage*)pImg, (IplImage*)pImg,0,255,CV_MINMAX,NULL);
132        cvConvertScaleAbs(pImg,pImgU8,1,0);
133        return pImgU8;
134    }
135}
136
137IplImage * CGaborFilter::do_filter(const IplImage * src)
138{
139    if(is_kernel()==false)
140    {
141        printf("The Gabor Kernel has not been created!");
142    }
143    else{
144
145        IplImage *pDestImage = cvCreateImage(cvSize(src->width,src->height),IPL_DEPTH_8U,1);
146        // IplImage * pGaborImage = get_Imge();
147        // CvMat GaborKernel = cvMat(pGaborImage->height,pGaborImage->width,CV_8U,pGaborImage->imageData);
148        IplImage *tmpImg = cvCloneImage(src);
149        IplImage *tmpGrayImg = cvCreateImage(cvSize(src->width,src->height),IPL_DEPTH_8U,1);
150
151        if(tmpImg->nChannels != 1)
152        {
153            cvCvtColor(tmpImg,tmpGrayImg,CV_BGR2GRAY);
154        }
155        else 
156        {
157            cvReleaseImage(&tmpGrayImg);
158            tmpGrayImg = tmpImg;
159        }
160        CvMat * pGaborKernel = get_Mat();
161
162        cvFilter2D(tmpGrayImg,pDestImage,pGaborKernel,cvPoint((GaborWindow.width-1)/2,(GaborWindow.height-1)/2));
163
164        cvReleaseImage(&tmpImg);
165        return  pDestImage;  
166    }
167}

转载请注明:http://www.cppblog.com/polly-yang/

gabor滤波器 opencv 实现相关推荐

  1. OpenCV Gabor滤波器实现纹理提取与缺陷分析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一:Gabor滤波器介绍 Gabor滤波器是OpenCV中非常强大 ...

  2. 【youcans 的 OpenCV 例程200篇】193.基于Gabor 滤波器的特征提取

    OpenCV 例程200篇 总目录-202205更新 [youcans 的 OpenCV 例程200篇]193.基于Gabor 滤波器的特征提取 6.5 Gabor 滤波器 Gabor 变换是一种加窗 ...

  3. Python OpenCV实现Log Gabor滤波器(由LGHD描述符扩展)

    引言 笔者在研究红外图像与可见光图像配准时接触到了很多描述符,其中关于LGHD描述符的Log Gabor滤波器很有意思,与大家分享 LGHD(Log-Gabor Histogram Descripto ...

  4. Gabor滤波器的特征提取C++实现

    自己项目中用到了Gabor滤波器,于是自己借助Opencv图像库,实现了Gabor滤波器的特征提取,用类的形式将其封装,希望对大家有用>0<. Gabor参数主要是5个尺度,8个方向,共4 ...

  5. gabor 幅值域 matlab,组合局部多通道Gabor滤波器和ICA的人脸描述与识别

    0引言人脸识别是当前人工智能和模式识别的研究热点,广泛应用于身份识别.护照识别.信用卡识别.摄像监视系统等领域.美国"911"事件后,人脸识别技术已经成为反恐的一种重要技术手段.在 ...

  6. 图像算法五:【图像小波变换】多分辨率重构、Gabor滤波器、Haar小波

    matlab设计: 与单纯运用某种自适应算法相比,基于小波分解的自适应滤波算法在收敛速度和稳定性上都有了很大的提高 小波变换: 示意:尺度越大,采用越大的时间窗,尺度越小,采用越短的时间窗,即尺度与频 ...

  7. 2017.06.27—今日总结,指纹识别图像增强提取频率、mask、gabor滤波器

    1.提取频率过程反复看了好几遍,大致过程能看懂,个别地方看不太懂:有些方面仍然需要仔细琢磨: 2. FingerprintGetMask:这个函数的作用是提取出图像中像素点周围相差异常的点,比如:如果 ...

  8. Gabor滤波器特征提取原理讲解及c++实现

    文章目录 Gabor滤波器 复正弦载波 高斯滤波 参数解释 gabor滤波核实现 效果: Gabor滤波器 1946年,Dennis Gabor于在"Theory of communicat ...

  9. Gabor滤波器学习

    本文的目的是用C实现生成Gabor模版,并对图像卷积.并简单提一下,Gabor滤波器在纹理特征提取上的应用. 一.什么是Gabor函数(以下内容含部分翻译自维基百科) 在图像处理中,Gabor函数是一 ...

最新文章

  1. Wireshark运算符!=无法正常工作
  2. 100路监控摄像头需要使用核心交换机吗?
  3. Python之调用JS的方式
  4. 不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置_Excel基础—文件菜单之设置信息...
  5. nfs服务器_Kubernetes集群下部署NFS持久存储
  6. 计算机的限制而被取消win7,win7系统本次操作由于这台计算机限制而被取消的解决方法...
  7. 李雅普诺夫和MIT两个MRAC案例的xcos模型
  8. windows中PLSQL/Developer、Oracle InstantClient的安装与配置
  9. 使用Dockerfile为SpringBoot应用构建Docker镜像
  10. coreseek java_coreseek
  11. App Store审核宝典
  12. 批量将多个 Word 文档合并成一个 Word 文件
  13. 浅谈大学公寓智能用电管理系统方案
  14. numpy的array()函数
  15. Bootstrap 栅栏系统
  16. 网站流量日志数据分析系统与技术架构
  17. Cat Snuke and a Voyage AtCoder - 2660
  18. EBS Form : 消息字典 fnd_message. (转)
  19. 别人群里发优惠券是怎么来的_教你自己发优惠券?
  20. 当前普遍使用的微型计算机硬件,计算机应用基础电大考试试题

热门文章

  1. 互联网面试——WPF面试问题
  2. python数组冒号取值(清晰图解)
  3. 浅谈集合List,Set以及Map集合的特点及区别
  4. 建设数据中心机房主要看这几点,否则被定为劣质机房!!!
  5. 纯C语言实现贪吃蛇游戏(VC6.0)
  6. javascript_javascript吊装
  7. java获取当前年月日(java获取当前年月日时分秒毫秒)
  8. 模型优化之模型融合|集成学习
  9. Java函数的基本知识
  10. cmake详细教程(经验版)