opencv实战项目十八:Gabor滤波器提取布料纹理

news2024/9/29 1:20:04

文章目录

  • 前言
  • 一、Gabor简介
  • 二、cv2.getGaborKernel()
  • 三,效果:

前言

在计算机视觉和图像处理领域,纹理分析一直是一个热门且富有挑战性的话题。纹理,作为图像中的一种重要视觉特征,不仅承载着丰富的视觉信息,而且在许多实际应用中扮演着关键角色,如物体识别、场景分类、图像检索等。为了有效地提取和描述图像中的纹理信息,研究者们提出了多种算法和工具,其中Gabor滤波器因其独特的优势而备受关注。
Gabor滤波器,一种基于正弦和余弦函数的线性滤波器,以其在空域和频域中同时具有局部化的特性而著称。它能够模拟人类视觉系统中的简单细胞感受野,因此在纹理分析和特征提取方面表现出色。本文将带您深入了解Gabor滤波器的工作原理,并探讨如何利用它来提取图像中的纹理特征。

一、Gabor简介

Gabor滤波器是一种强大的线性滤波器,它在图像处理和计算机视觉领域被广泛用于纹理分析和特征提取。它得名于物理学家Dennis Gabor,其设计灵感来源于人类视觉系统的感知特性。Gabor滤波器能够同时在空间域和频率域中实现局部化,这使得它在捕捉图像中的局部结构和纹理细节方面表现出色。
Gabor滤波器是一种复数滤波器,其基本形式是高斯函数与正弦或余弦函数的乘积。数学上,它可以表示为:
在这里插入图片描述

其中:
x 和 y 是图像中的空间坐标。
λ 是滤波器的波长,决定了滤波器的频率响应。
θ 是滤波器的方向,表示滤波器响应的方向。
ψ 是相位偏移,通常设置为0。
σ 是高斯函数的标准差,控制着滤波器的空间扩展。
γ 是空间纵横比,决定了滤波器椭圆形状的拉伸程度。

注:Gabor滤波器以其独特的局部性、方向性和多尺度性而著称,它能够在空间域和频率域中同时实现局部化,从而在图像中的特定位置提取特定频率的纹理信息;通过改变滤波器的方向参数θ,Gabor滤波器能够提取不同方向的纹理特征,增强了对图像纹理方向性的识别能力;此外,通过调整波长λ和标准差σ,Gabor滤波器能够在不同的尺度上分析纹理,从而全面地捕捉图像中的纹理细节。

二、cv2.getGaborKernel()

cv2.getGaborKernel 是OpenCV库中的一个函数,它用于生成Gabor滤波器的内核,以下是关于 cv2.getGaborKernel 函数的详细介绍:
kernel = cv2.getGaborKernel(ksize, sigma, theta, lambda, gamma, psi, ktype)
参数说明:

ksize:一个元组,表示滤波器内核的大小,格式为 (width, height)。通常,这个值是奇数,以确保有一个中心像素。
sigma:高斯函数的标准差,控制了Gabor函数的空间扩展。较大的值会导致滤波器在空间上更加扩展。
theta:Gabor滤波器的方向角度,表示滤波器响应的方向。它的单位是弧度,通常取值范围是 [0, pi)。
lambda:Gabor滤波器的波长,它决定了滤波器的频率响应。较小的值对应于较高的频率,可以捕捉更细小的纹理特征。
gamma:空间纵横比,决定了滤波器椭圆形状的拉伸程度。值越大,椭圆形状越扁。
psi:相位偏移,通常设置为0,但可以调整以改变滤波器的相位响应。
ktype:内核类型,通常设置为 cv2.CV_32F,表示内核数据类型为32位浮点数。

返回值:

返回一个Gabor滤波器的内核,它可以用于 cv2.filter2D 函数来对图像进行卷积操作。

使用案例:

import cv2
import numpy as np

# 创建一个Gabor滤波器
# 参数包括:ksize(滤波器大小),sigma(高斯的标准差),theta(滤波器方向),lambda(波长),gamma(空间纵横比),psi(相位偏移)
ksize = 11 # 滤波器大小
sigma = 1  # 高斯标准差

lambda_ = 3  # 波长
gamma = 0.5  # 空间纵横比
psi = 0     # 相位偏移

# 生成Gabor滤波器
kernel = cv2.getGaborKernel((ksize, ksize), sigma, np.pi/2 , lambda_, gamma, psi, ktype=cv2.CV_32F) #90 度 提取垂直方向纹理
kernel2 = cv2.getGaborKernel((ksize, ksize), sigma, 0, lambda_, gamma, psi, ktype=cv2.CV_32F) #0 度 提取水平方向纹理
# 读取图像
image = cv2.imread(r'F:\cv_traditional\img.png', cv2.IMREAD_GRAYSCALE)

# 确保图像和滤波器大小匹配
if image is not None:
    # 应用滤波器
    filtered_image = cv2.filter2D(image, cv2.CV_8UC3, kernel)
    filtered_image2 = cv2.filter2D(image, cv2.CV_8UC3, kernel2)
    # 显示原始图像和滤波后的图像
    cv2.imshow('Original Image', image)
    cv2.imshow('filtered_image', filtered_image)

    cv2.imshow('filtered_image2', filtered_image2)
    # 等待按键后退出
    cv2.waitKey(0)
    cv2.destroyAllWindows()
else:
    print("Error: Image not found.")

三,效果:

原图:
在这里插入图片描述

水平方向纹理:
在这里插入图片描述

垂直方向纹理:
在这里插入图片描述

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

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

相关文章

关于BitConverter.GetBytes取得的值是反的问题

通过百度查询450000转16进制,我们得到的值是6DDD0, 在前面补零之后的值应该是0006DDD0。如下图所示。 实际上我们用BitConverter.GetBytes 方法转换450000为byte[] 的时候, 转换后的值用16进制显示为D0DD0600(因为我这里是一个通讯协议的数据传输前转换&…

回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测

回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测 目录 回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GWO-BP-Adaboost灰…

GMS——利用 ChatGPT 和扩散模型进行制造业革命

概述 论文地址:https://arxiv.org/abs/2405.00958 研究介绍了生成式制造系统(GMS),并表明这些系统能有效管理和协调自主制造资产,提高它们对不同生产目标和人类偏好的响应能力和灵活性。 与传统的显式建模不同&#…

嵌入式Linux学习笔记-Linux基础操作

一、Linux 目录结构 二、文件基础操作 Linux 命令一般由三部分组成,命令 选项 参数。 1、pwd:列出当前所在路径 pwd //列出当前所在目录 2、cd:切换路径 cd /home/boot //切换路径为/home/boot cd .. //返回上一级目录…

鸿蒙(API 12 Beta3版)【自定义界面扫码】

基本概念 自定义界面扫码能力提供了相机流控制接口,可根据自身需求自定义扫码界面,适用于对扫码界面有定制化需求的应用开发。 说明 通过自定义页面扫码可以实现应用内的扫码功能,为了应用更好的体验,推荐同时[接入“扫码直达”…

海信电视与《黑神话 :悟空》合作,大屏端流畅游戏体验如何保障?

上线即巅峰 国产3A游戏引发热潮 近期,首款国产3A游戏《黑神话:悟空》自上线以来,便迅速在各大游戏平台占据热销榜首,其销量及在线人数均刷新历史记录。同时,该游戏在各大社交媒体中也拥有超高讨论度,其精湛…

在Ubuntu24.04上安装多主多从的高可用Kubernetes节点

前言 因为镜像拉取失败,所以好多小伙伴说calico网络插件安装失败。之前写过CentOS7上安装多主节点的Kubernets集群,而CentOS7又停止维护了。所以借着在Ubuntu上安装多主的Kubernetes集群的机会,使用国内镜像安装calico网络插件。 视频教程地…

Git实现代码托管

在电脑端下载git:Git - 安装 Git (git-scm.com) 点击继续下载:一直next即可 下载完毕 winR:cmd 输入:git 不报错即可 登录 gitee账号,根据教程完成内容即可创建成功 !!一定要先登录邮箱账号…

深度学习环境安装与验证指南

目录 1. 项目背景 2. 系统与软件版本 2.1 操作系统与硬件 2.2 软件版本 2.3对应版本 3. 环境配置步骤 3.1 安装 Anaconda 3.2 创建虚拟环境 3.3 安装 CUDA 和 cuDNN 3.3.1 安装 CUDA 11.8 3.3.2 安装 cuDNN 8.6 3.3.3 验证 CUDA 和 cuDNN 安装 3.4 安装 TensorFlo…

国产网卡品牌崛起,做好网络信息安全的“守门人”

在信息技术日新月异的时代背景下,信息安全不仅关乎个人隐私保护,更是国家安全与经济发展的基石。LR-LINK联瑞凭借其前瞻性的视野和深厚的研发实力,成功自主研发出全国产化的FPGA(现场可编程门阵列)网闸隔离卡方案&…

企业园区智慧升级:电子墨水屏标签打造环保高科技工作空间

“双碳”目标和“数字中国”建设推动企业绿色转型。企业园区作为城市数字化的重要组成部分,传统纸质显示方式已不适应数字化转型的需求。墨水屏技术凭借低功耗和信息便捷更新的优势,成为园区数智显示的新方案,助力绿色数字化转型,…

网络科学导论,网络同步与控制

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

swf怎么转换成mp4格式?视频格式转换,就看这2个办法

许多用户在处理多媒体文件时经常遇到的问题swf文件的转换问题。swf文件作为Flash动画的标准格式,曾经在网页设计和互动媒体中占据重要地位。然而,随着技术的发展和Flash的逐渐淘汰,越来越多的用户需要将swf文件转换为更通用的视频格式&#x…

视频中间件:与海康ISC平台级联

视频中间件是一款对各种视频流的接入处理并能通过标准H5接口输出的安防视频管理软件。其设备兼容性、并发性能、接口输出等方面表现突出,方便了行业跨平台、跨系统的第三方系统和应用对接。在很多的应用场景中,不仅仅是提供标准H5接口与其业务系统的互联…

详细解说数据库课程设计mysql

数据库课程设计中,MySQL是一个非常重要的工具,它是一种关系型数据库管理系统(RDBMS),广泛应用于各种规模的项目中。下面,我将详细解说在数据库课程设计中如何使用MySQL进行设计。 1. 理解数据库设计的基本…

STM32f103(固件库)

1.工程创建 新建STM32工程 步骤一:创建工程模板文件1.新建一个文件夹 template 2.在文件夹template里面新建六个文件(1)CMSIS: 存放内核驱动程序和启动引导文件(2)FWLIB:存放库函数文件&#…

使用twilio向手机发短信做监控报警

最近遇到个需求,就是夜班HW希望有个监控系统指标,如果异常就向监控人手机打电话的需求。在考察以后,发现目前由于国内防电信诈骗的原因,所以想要使用云通讯功能必须由企业去申请,但作为一个个人的监控项目来说太大了。…

【MySQL 15】使用 C/C++ 连接数据库

文章目录 🌈 一、引入 MySQL 库⭐ 1. 下载库文件⭐ 2. 上传库文件⭐ 3. 引用库文件⭐ 4. 验证是否引入成功 🌈二、MySQL 接口介绍⭐ 1. 初始化⭐2. 连接数据库⭐ 3. 关闭数据库连接⭐ 4. 设置编码格式⭐ 5. 发送 sql 指令🌙 5.1 向数据库表中…

Ant Design vue 多层for循环form表单自定义校验

数据结构如下&#xff1a;三维数组。 注意&#xff1a;<a-form-model>一定得写在for外面&#xff01;&#xff01;&#xff01;&#xff01; <!-- 弹出框 --> <a-modal:title"title":dialog-style"{ top: 20px }":visible"visible&quo…

日历显示项目

日历显示&#xff1a; //头文件#ifndef __HEAD_DALY_H__ #define __HEAD_DALY_H__#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <stdint.h>uint32_t months[12]; extern bool is_leap(uint32_t …