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σ2x′2+γy′2​]⋅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σ2x′2+γy′2​]⋅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σ2x′2+γy′2​]⋅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更新】

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

  1. 【youcans 的 OpenCV 例程200篇】186.图像金字塔之拉普拉斯金字塔

    OpenCV 例程200篇 总目录-202205更新 [youcans 的 OpenCV 例程200篇]186.图像金字塔之拉普拉斯金字塔 图像金字塔是一种以多分辨率来解释图像的结构,常用于图像分割. ...

  2. 【youcans 的 OpenCV 例程200篇】185.图像金字塔之高斯金字塔

    OpenCV 例程200篇 总目录-202205更新 [youcans 的 OpenCV 例程200篇]185.图像金字塔之高斯金字塔 6. 图像金字塔 图像金字塔是一种以多分辨率来解释图像的结构,常 ...

  3. 【youcans 的 OpenCV 例程200篇】144. 基于灰度形态学的纹理分割

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

  4. 【youcans 的 OpenCV 例程200篇】146. 基于灰度形态学的复杂背景图像重建

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

  5. 【youcans 的 OpenCV 例程200篇】143. 基于灰度形态学的粒度测定

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

  6. 【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法

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

  7. 【youcans 的 OpenCV 例程200篇】157. 霍夫变换直线检测

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

  8. 【youcans 的 OpenCV 例程200篇】152. 边缘检测之 LoG 算子

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

  9. 【youcans 的 OpenCV 例程200篇】150. 边缘检测梯度算子

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

最新文章

  1. 给力!斩获 GitHub 14000 Star,两周创办开源公司获数百万美元融资
  2. 微软宣布Azure Functions正式支持Java
  3. Script:优化crs_stat命令的输出
  4. 推荐介绍一项新的工程技术:[威胁建模]的相关系列文章《威胁建模Web 应用程序》...
  5. 42.虚拟内存如何设置:
  6. powerbuilder+2个dw联动_千元级小众表,只知道DW就out了,这5个英国品牌一样精致百搭...
  7. IT运维管理人员轻松管理桌面终端
  8. 为什么Java中只有值传递?
  9. linux lib lib64 区别,lib,lib32,lib64,libx32和libexec之间的区别
  10. 基类使用私有数据_C++作业之多继承与虚基类
  11. js -- 时间转年月日
  12. cef在android中使用_关于富文本在Android中的应用以及遇到的坑
  13. 论 静态方法@staticmethod 类方法@classmethod @property属性
  14. ubuntu上解决evolution邮箱附件为dat格式
  15. java常见面试微服务_微服务面试一般问什么?java微服务面试题以及答案整理
  16. 华为事件鸿蒙系统,科技大事件 迎接华为鸿蒙车机系统的到来
  17. 掘地求生是什么游戏 把主播都逼疯的玩个锤子是什么游戏-李廷学
  18. 基于snowfall的玫瑰花瓣飘落效果
  19. 计算机组成原理测试题——第5章 输入输出系统(上)(2)
  20. Android SELinux开发入门指南之如何增加Java Binder Service权限

热门文章

  1. linux usb驱动教学视频教程,详解linux usb host驱动编写入门
  2. 32位计算机系统安装教程,win732位光盘安装教程
  3. 多动症影响的不只是孩子的成绩!
  4. 飘零网络验证-商业版3和金盾版1.5-研究中
  5. 2-6-RHEL6.5搭建vsftpd服务器案例分析与总结(Red Hat Enterprise Linux Server6.3)@树袋飘零...
  6. 代小程序实现业务之代码管理
  7. FPGA 处理视频SDRAM带宽计算
  8. 带瀑布流的电钢琴_让人人都能学会弹钢琴——零基础入门的智能电钢琴 POP Piano...
  9. 百度云心里的声音加长版
  10. J2ME实现手机振动器