图像处理:Gabor滤波器简介以及python实现
在图像处理中,以Dennis Gabor命名的Gabor滤波器是一种用于纹理分析的线性滤波器,本质上是指在分析点或分析区域周围的局部区域内,分析图像中是否存在特定方向的特定频率内容。Gabor滤波器的频率和方向表示被许多当代视觉科学家认为与人类视觉系统的频率和方向表示相似。它们被发现特别适合于纹理表征和辨别。
在空间域,二维Gabor滤波器是由正弦平面波调制的高斯核函数(见Gabor变换)。
一些作者声称,哺乳动物大脑视觉皮层中的简单细胞可以用Gabor函数来模拟。因此,用Gabor滤波器进行图像分析被一些人认为类似于人类视觉系统中的感知。
定义
它的脉冲响应由正弦波(二维Gabor滤波器的平面波)乘以高斯函数定义。
由于Gabor滤波器脉冲响应的乘法卷积性质(卷积定理),其傅里叶变换等于谐波函数(正弦函数)的傅里叶变换与高斯函数的傅里叶变换的卷积。滤波器有一个实分量和一个虚分量表示正交方向。这两个分量可以组成一个复数,也可以单独使用。
在这个公式中,
这五个参数分别表示正弦因子的波长,Gabor函数的法线到平行条纹的方向,为相位偏移,高斯的sigma标准差,空间长宽比,Gabor函数支持的椭圆度。小波空间
Gabor滤波器与Gabor小波直接相关,因为它们可以被设计为许多膨胀和旋转。然而,一般情况下,对Gabor小波不进行展开,因为展开需要计算双正交小波,这可能非常耗时。因此,通常会创建一个由各种尺度和旋转的Gabor滤波器组成的滤波器组。滤波器与信号卷积,形成所谓的Gabor空间。
上图Gabor滤波器在中文OCR中的应用演示。4个方向显示在右边0°,45°,90°和135°。原始的图片和所有四个方向的叠加显示在左边。图像特征提取
一组不同频率和方向的Gabor滤波器可能有助于从图像中提取有用的特征。在离散域中,二维Gabor滤波器由:
其中B和C是待确定的归一化因子。
二维Gabor滤波器在图像处理中有着丰富的应用,特别是在纹理分析和分割的特征提取方面。f定义了在纹理中寻找的频率。通过改变theta,我们可以寻找面向特定方向的纹理。通过改变sigma,我们改变了支持或被分析图像区域的大小。2-D Gabor滤波器在图像处理的应用
在图像处理中,Gabor特征是识别的理想选择。在文档图像处理中,Gabor特征是识别多语言文档中单词的脚本的理想选择由于文本具有丰富的高频成分,而图片本质上相对平滑,不同频率和不同方向的Gabor滤波器已被用于从复杂文档图像(包括灰色和彩色)中定位和提取纯文本区域。它还被应用于面部表情识别。Gabor滤波器在模式分析中也得到了广泛的应用。例如,它已被用于研究脊柱多孔海绵状小梁内的指向性分布。Gabor空间在光学字符识别、虹膜识别和指纹识别等图像处理应用中非常有用。特定空间位置的激活之间的关系在图像中的物体之间非常不同。此外,重要的激活可以从Gabor空间中提取,以创建一个稀疏的对象表示。上例子
这个代码有以下步骤(1)读图片(2)构造gabor不同方向的卷积核(3)进行gabor滤波
import cv2,os
import numpy as np
import matplotlib.pyplot as pltdef get_img(input_Path):img_paths = []for (path, dirs, files) in os.walk(input_Path):for filename in files:if filename.endswith(('.jpg','.png')):img_paths.append(path+'/'+filename)return img_paths#构建Gabor滤波器
def build_filters():filters = []ksize = [7,9,11,13,15,17] # gabor尺度,6个lamda = np.pi/2.0 # 波长for theta in np.arange(0, np.pi, np.pi / 4): #gabor方向,0°,45°,90°,135°,共四个for K in range(6):kern = cv2.getGaborKernel((ksize[K], ksize[K]), 1.0, theta, lamda, 0.5, 0, ktype=cv2.CV_32F)kern /= 1.5*kern.sum() # 这里不是很理解filters.append(kern)plt.figure(1)#用于绘制滤波器for temp in range(len(filters)):plt.subplot(4, 6, temp + 1)plt.imshow(filters[temp])plt.show()return filters#Gabor特征提取
def getGabor(img, filters):res = [] #滤波结果for i in range(len(filters)):# res1 = process(img, filters[i])accum = np.zeros_like(img)for kern in filters[i]:fimg = cv2.filter2D(img, cv2.CV_8UC1, kern)accum = np.maximum(accum, fimg, accum)res.append(np.asarray(accum))#用于绘制滤波效果plt.figure(2)for temp in range(len(res)):plt.subplot(4, 6, temp+1)plt.imshow(res[temp], cmap='gray' )plt.show()return res #返回滤波结果,结果为24幅图,按照gabor角度排列if __name__ == '__main__':# input_Path = './content'filters = build_filters()# img_paths = get_img(input_Path)# for img in img_paths:img = cv2.imread('/Users/guoyuhang/Documents/GitHub/process_result/land_image/2018Su_44471_clip.tif')getGabor(img, filters)
待gabor滤波的原图:
gabor不同方向不同尺寸的核:
经过gabor滤波的结果图:
图像处理:Gabor滤波器简介以及python实现相关推荐
- gabor滤波器简介
在经过一天的浏览csdn,博客园后,总算是对gabor滤波器有了一个大概的了解,所以趁还热着,赶紧记录一下. 写的话,先给自己梳理下要写什么吧: 1. 什么是gabor滤波器,公式定义 2. gabo ...
- 2021-08-07 Gabor滤波器简介以及简单应用
Gabor滤波器(Gabor Filter) 文章目录 Gabor滤波器(Gabor Filter) 简介 Gabor滤波器的不同参数 Gabor滤波器的简单应用(python) 简介 Gabor滤波 ...
- gabor滤波器 opencv 实现
转载请注明:http://www.cppblog.com/polly-yang/ 一.房屋检测小结 一开始,直接用LSD(Line Segment Detector)检测VHR(Very High R ...
- python实现Gabor滤波器-skimage(一)
什么是Gabor滤波器? Gabor滤波器是一种由正弦波调制的高斯核线性滤波器.Gabor滤波器的频率和方向表示与人类视觉系统相似.Gabor滤波器组通常用于计算机视觉和图像处理.特别适用于边缘检测和 ...
- Python OpenCV实现Log Gabor滤波器(由LGHD描述符扩展)
引言 笔者在研究红外图像与可见光图像配准时接触到了很多描述符,其中关于LGHD描述符的Log Gabor滤波器很有意思,与大家分享 LGHD(Log-Gabor Histogram Descripto ...
- python实现gabor滤波器提取纹理特征 提取指静脉纹理特征
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8989836.html 参考博客:https://blog.csdn.net/xue_wenyu ...
- gabor滤波 matlab,图像处理 – 使用matlab应用Gabor方程创建Gabor滤波器
我试图创建一个Gabor过滤器.我们都知道这种滤波器比任何其他滤波器更复杂,因为它具有更复杂的特征,例如具有不同的尺度和方向. Gabor滤波器的等式是: 为了创建具有特定比例和方向的Gabor滤波器 ...
- Gabor滤波简介与Opencv中的实现及参数变化实验
声明:本篇文章为转载,目的是便于以后查找学习 Gabor滤波是一种非常常见的特征提取算法,在人脸识别等领域有着很广泛的应用,在这里我主要介绍一下Gabor滤波器的公式及Opencv下的代码实现,以及我 ...
- OpenCV Gabor滤波器实现纹理提取与缺陷分析
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一:Gabor滤波器介绍 Gabor滤波器是OpenCV中非常强大 ...
最新文章
- 组合特征(四)linearsvm-tfidf(word)+lr-tfidf(article)
- gdb set写text/code段错误的解决办法
- 【深度学习】谷歌工程师万字好文:我们为何追求高性能深度学习?如何实现?...
- Direct2D (13) : 画刷之 ID2D1BitmapBrush
- 机器学习-斯坦福:学习笔记7-最优间隔分类器问题
- 【干货】微信小程序如何让view标签中内容居中
- freeMark模板导出word
- 一只潜力十足的专业电竞游戏鼠标——HyperX巨浪RGB电竞鼠标
- mongodb数据检索大全
- html5课程总结500字,体育课心得体会500字(精选6篇)
- 三阶魔方CFOP还原方法图解
- python 抓取网页数据
- docker 镜像瘦身工具 docker-slim
- ceph-deploy源码分析(三)——mon模块 转
- ASCII 碼: 转义字符,正则表达式,特殊字符,模式匹配
- 谷歌浏览器(Chrome)查看http报文headers信息
- c++ union学习
- 集合间的映射和集合的势
- 数据库复习——单表使用where子句和分组(groud by)筛选查询(or、and、like、isnull)
- undeclared identifier的几种可能