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

OpenCV 例程200篇 总目录-202205更新


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


6.5 Gabor 滤波器

Gabor 变换是一种加窗短时傅里叶变换,以高斯函数作为短时傅里叶变换的窗函数,因此可以在频域不同尺度、不同方向上提取特征。

Gabor 函数对频率和方向表达与人类视觉响应非常类似,且对图像的亮度变化、对比度变化、姿态变化都具有较强鲁棒性。Gabor 滤波器常用于边缘提取,对纹理识别和分离的效果很好;可以用于表达图像局部特征, 在视觉领域中经常被用来作图像的预处理 。

在空间域将正弦函数与高斯函数进行卷积,就得到 Gabor 滤波器,其数学表达形式为:

g(x,y)=exp[−x′2+γy′22σ2]⋅exp[i(2πx′λ+ψ)]g(x,y) = exp[- \frac{x'^2+\gamma y'^2}{2 \sigma ^2}] \cdot exp[i(2 \pi \frac{x'}{\lambda}+\psi)] g(x,y)=exp[2σ2x2+γy2]exp[i(2πλx+ψ)]

实数部分:
g(x,y)=exp[−x′2+γy′22σ2]⋅cos[(2πx′λ+ψ)]g(x,y) = exp[- \frac{x'^2+\gamma y'^2}{2 \sigma ^2}] \cdot cos[(2 \pi \frac{x'}{\lambda}+\psi)] g(x,y)=exp[2σ2x2+γy2]cos[(2πλx+ψ)]

虚数部分:
g(x,y)=exp[−x′2+γy′22σ2]⋅sin[(2πx′λ+ψ)]g(x,y) = exp[- \frac{x'^2+\gamma y'^2}{2 \sigma ^2}] \cdot sin[(2 \pi \frac{x'}{\lambda}+\psi)] g(x,y)=exp[2σ2x2+γy2]sin[(2πλx+ψ)]

式中各参数的含义为:
x′=xcosθ+ysinθy′=−xsinθ+ycosθx' = x cos \theta + y sin \theta\\y' = - x sin \theta + y cos \theta\\ x=xcosθ+ysinθy=xsinθ+ycosθ

λ\lambdaλ,滤波器核函数中正弦函数的波长,像素数,大于2,小于图像尺寸的 1/5。
ψ\psiψ,滤波器核函数中正弦函数的相位偏移,角度,-180~180度。0度时白条为中心,180度时黑条为中心。
θ\thetaθ,滤波器核函数中平行条带的倾斜角度,0~360度。
γ\gammaγ,空间纵横比,核函数形状的椭圆率,γ=1\gamma=1γ=1 时为圆形,γ<1\gamma<1γ<1 时在条纹的平行方向伸长,通常取 0.5。
σ\sigmaσ,滤波器核函数中高斯函数的标准差。
bbb,滤波器的半响应空间频率带宽,通常取 1.0,此时 σ/λ=0.56\sigma / \lambda = 0.56σ/λ=0.56。带宽越小,标准差越大,平行条纹数量越多。

Gabor 滤波器的冲激响应是高斯函数与复指数函的乘积,达到时频测不准关系的下界,因此是兼顾信号在时频域的最优分辨率。

Gabor 滤波的基本思想是,不同纹理具有不同的中心频率及带宽,Gabor 滤波器是带通滤波器,只允许特定频率的纹理通过,因而可以分析和提取纹理特征。

Gabor 滤波器可以提取不同方向和不同尺度的特征,通常选择若干尺度和方向进行组,建立 Gabor 滤波器组。

基于 Gabor 滤波器的特征提取的实现步骤:
(1)将输入图像按空间位置分为 3×3(9块)和 4×4(16块)的图像块;
(2)选择若干尺度和方向,如 5尺度4方向,建立 Gabor 滤波器组;
(3)Gabor 滤波器组与每个图像块在空域卷积,每个图像块得到 20 个滤波器输出;
(4)将每个图像块的 24个Gabor 滤波输出,“浓缩” 为一个 24×1 的列向量作为该图像块的纹理特征。

OpenCV 中提供的 cv.getGaborKernel() 函数可以生成 Gabor 滤波器核。


1.95: Gabor 带通滤波器

    # 1.95: 基于 Gabor 带通滤波器的特征提取# 构造 Gabor 滤波器组GaborFilters = []size = [5, 7, 9, 11, 15]  # Gabor 滤波器尺寸lamda = np.pi / 2.0  # 正弦函数波长for i in range(4):theta = i * np.pi/4  # 平行条带倾斜角度,0°,45°,90°,135°for k in range(5):ksize = (size[k], size[k])  # Gabor 滤波器尺寸kernel = cv2.getGaborKernel(ksize, 1.0, theta, lamda, 0.5, 0, ktype=cv2.CV_32F)kernel /= kernel.sum()GaborFilters.append(kernel)# 读取图像img = cv2.imread("../images/Fractal02.png", flags=1)# Gabor 滤波plt.figure(figsize=(10, 7))res = []  # 滤波结果for i in range(len(GaborFilters)):accum = np.zeros_like(img)for kern in GaborFilters[i]:fimg = cv2.filter2D(img, cv2.CV_8UC1, kern)accum = np.maximum(accum, fimg, accum)res.append(np.asarray(accum))plt.subplot(4, 5, i + 1), plt.axis('off')plt.imshow(cv2.cvtColor(accum, cv2.COLOR_BGR2RGB))plt.tight_layout()plt.show()

在这里插入图片描述



(本节完)


版权声明:

OpenCV 例程200篇 总目录-202205更新
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/124970610)

Copyright 2022 youcans, XUPT
Crated:2022-5-25


欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中

【youcans 的 OpenCV 例程200篇】185.图像金字塔之高斯金字塔
【youcans 的 OpenCV 例程200篇】186.图像金字塔之拉普拉斯金字塔
【youcans 的 OpenCV 例程200篇】187.由拉普拉斯金字塔还原图像
【youcans 的 OpenCV 例程200篇】188.基于拉普拉斯金字塔的图像融合
【youcans 的 OpenCV 例程200篇】189.基于掩模的拉普拉斯金字塔图像融合
【youcans 的 OpenCV 例程200篇】190.基于图像分割的图像融合
【youcans 的 OpenCV 例程200篇】191.基于图像分割的金字塔图像融合
【youcans 的 OpenCV 例程200篇】192.Gabor 滤波器组的形状
【youcans 的 OpenCV 例程200篇】193.基于Gabor 滤波器的特征提取
更多内容,请见:
【OpenCV 例程200篇 总目录-202206更新】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java设置行显示复选框_java spring cheakbox复选框怎么行或者列删除添加

展开全部你好&#xff01;使用原62616964757a686964616fe78988e69d8331333431353366生js实现&#xff0c;还是可以使用其他框架&#xff1f;我这里有个基于jquery的实现&#xff1a;$(document).ready(function(){function Info(id, name, birthday, workDate, skill, experien…

MyEclipse生成常用方法

我们使用Eclipse工具开发的时候&#xff0c;有很多的代码我们是不用写的&#xff0c;我们可以直接生成我们想要的方法&#xff0c;那么怎么生成我们经常使用的方法呢&#xff1f;&#xff1f;&#xff1f; 首先打开我们的MyEclipse工具 到代码编辑页面&#xff0c;在已经定义好…

【youcans 的 OpenCV 例程200篇】194.寻找图像轮廓(cv.findContours)

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】194.寻找图像轮廓&#xff08;cv.findContours&#xff09; 1. 轮廓 轮廓是一系列相连的像素点组成的曲线&#xff0c;代表了物体的基本外形。轮廓常用于形状分析和物体的检测和识别。 边缘检测根据灰度的…

java线程池执行器_Java线程池ThreadPoolExecutor的使用

Java线程池ThreadPoolExecutor的使用ThreadPoolExecutor就是我们用来实现线程的一个执行器&#xff0c;它实现了Excutor和ExecutorService接口。Excutor接口只定义了一个方法就是execute用来执行任务。ExecutorService继承于Excutor并添加了一些其他的执行任务的方法和管理线程…

密码强度显示

使用HTML,CSS及JS实现注册功能中密码强度的显示&#xff0c;根据输入的密码判断并显示用户输入密码的强度等级是高还是低等。 效果演示 代码演示 html内容 <div class"container"><div class"userName-wrapper"><label for"userN…

【youcans 的 OpenCV 例程200篇】195.绘制图像轮廓(cv.drawContours)

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】195.绘制图像轮廓&#xff08;cv.drawContours&#xff09; 1. 轮廓 轮廓是一系列相连的像素点组成的曲线&#xff0c;代表了物体的基本外形。轮廓常用于形状分析和物体的检测和识别。 边缘检测根据灰度的…

java终结方法_Java终结任务:Callable和Future

在这里首先介绍下Callable和Future&#xff0c;我们知道通常创建线程的2种方式&#xff0c;一种是直接继承Thread&#xff0c;另外一种就是实现Runnable接口&#xff0c;但是这两种方式创建的线程不返回结果&#xff0c;而Callable是和Runnable类似的接口定义&#xff0c;但是通…

【youcans 的 OpenCV 例程200篇】196.图像的矩和不变矩(cv.moments)

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】196.图像的矩和不变矩&#xff08;cv.moments&#xff09; 2. 轮廓的特征描述 在对实际图像进行轮廓查找时&#xff0c;得到的轮廓数量很多。获取轮廓后&#xff0c;通常基于轮廓的特征进行筛选、识别和处…

Spring boot 项目目录结构详解

对SpringBoot项目目录进行分层显示能够使我们的开发思路更加的明确&#xff0c;代码内容更加清晰易懂&#xff0c;下面向大家讲解一下项目目录结构。 代码层的结构 根目录&#xff1a;com.springboot 1.工程启动类(ApplicationServer.java)置于com.springboot.build包下 2.实…

【youcans 的 OpenCV 例程200篇】197.轮廓的基本特征

OpenCV 例程200篇 总目录-202205更新 文章目录【youcans 的 OpenCV 例程200篇】197.轮廓的基本特征2. 轮廓的特征描述2.2 轮廓的面积、周长、质心和近似多边形2.2.1 轮廓的面积2.2.2 轮廓的周长2.2.3 轮廓的质心2.2.4 轮廓的近似2.2.5 轮廓的凸包&#xff08;凸壳&#xff09;例…

Idea 项目导入

我们在刚开始使用新的开发工具IDEA的时候会遇到我们想要导入一个外部项目却不知从何下手&#xff0c;下面我就教给大家如何使用IDEA导入一个外部的项目。 Idea 导入 外部项目 1.点击 file — new 2.打开路径地址&#xff0c;选择需要导入的项目 3.选择创建—next 4.默认—…

【youcans 的 OpenCV 例程200篇】198.基于不变矩的形状相似性检测

OpenCV 例程200篇 总目录-202206更新 【youcans 的 OpenCV 例程200篇】198.基于不变矩的形状相似性检测 3. 基于不变矩检测的图像识别 形状匹配也称为形状相似度检测&#xff0c;用于比较两个形状或两个轮廓。 函数 cv2.matchShapes() 基于 Hu 不变矩检测两个形状之间的相似度…

spring boot 如何修改默认端口号和context path

创建了SpringBoot项目之后进行运行&#xff0c;当我们需要使用游览器进行访问的时候要输入端口号&#xff0c;那麽我们如何来修改这个端口号呢&#xff1f;&#xff1f;&#xff1f; 1.在src/main/resources目录下新建文件application.properties&#xff0c;并进行配置,来重写…

【youcans 的 OpenCV 例程200篇】199.轮廓的外接边界框

OpenCV 例程200篇 总目录-202206更新 【youcans 的 OpenCV 例程200篇】199.轮廓的外接边界框 文章目录【youcans 的 OpenCV 例程200篇】199.轮廓的外接边界框2. 轮廓的特征描述2.3 轮廓的外接边界框2.3.1 轮廓的垂直矩形边界框2.3.2 轮廓的最小矩形边界框2.3.3 轮廓的最小外接圆…

单级联动

想要实现联动的效果首先我们要知道什么是单机联动&#xff0c;所谓的单级联动就是点击输入框的时候&#xff0c;下面会出现多个单级联动的列表供你选择自己所要选择的数据。 我们使用html写主题内容&#xff0c;使用CSS添加样式&#xff0c;使用Jquery实现联动等相关的事件和效…

【youcans 的 OpenCV 例程200篇】200.轮廓的基本属性

OpenCV 例程200篇 总目录-202206更新 文章目录【youcans 的 OpenCV 例程200篇】200.轮廓的基本属性2.4 轮廓的基本属性2.4.1 轮廓的宽高比&#xff08;Aspect Ratio&#xff09;2.4.2 轮廓的面积比&#xff08;Extent&#xff09;2.4.3 轮廓的坚实度&#xff08;Solidity&#…

mysql c api example_The MySQL C API 编程实例

在网上找了一些MYSQL C API编程的文章&#xff0c;看了后认为还是写的不够充分&#xff0c;依据自己经验写了这篇《The MySQL C API 编程实例》&#xff0c;希望对须要调用到MYSQL的C的API的朋友有所帮助&#xff0c;附例中的环境为RedHat在这篇文章里&#xff0c;我们将学会怎…

【youcans 的 OpenCV 例程200篇】结束语

【youcans 的 OpenCV 例程200篇】总目录 【youcans 的 OpenCV 例程200篇】结束语 【youcans 的 OpenCV 例程】真的写到了 200篇&#xff0c;迎来了“结束语”。 本系列原名【OpenCV 例程 100篇】&#xff0c;从 2021年 11月开始写作&#xff0c;原计划每天写一篇&#xff0c;写…

java aspose 导出word_使用aspose.word 第三方的插件实现导出word

#region 生成的excel文件命名和确保文件的唯一性Random rd new Random();DateTime dtime DateTime.Now;string Filename "培训需求表" dtime.Year.ToString() dtime.Month.ToString() dtime.Day.ToString() dtime.Hour.ToString() dtime.Minute.ToString() …

智能家居(1)行业发展分析

1 智能家居系统 智能家居是基于物联网技术&#xff0c;由硬件系统、软件系统、云计算平台构成一个家庭生态圈&#xff0c;为用户提供安全、便利、舒适的家居生活环境。 具体而言&#xff0c;智能家居以住宅为单位、以家庭生活为背景&#xff0c;以综合布线技术、网络通信技术…