当前位置: 首页 > article >正文

3DGabor滤波器实现人脸特征提取

import cv2
import numpy as np

# 定义 Gabor 滤波器的参数
kSize = 31  # 滤波器核的大小
g_sigma = 3.0  # 高斯包络的标准差
g_theta = np.pi / 4  # Gabor 函数的方向
g_lambda = 10.0  # 正弦波的波长
g_gamma = 0.5  # 空间纵横比
g_psi = np.pi / 2  # 相位偏移

# 生成 Gabor 滤波器核
kernel = cv2.getGaborKernel((kSize, kSize), g_sigma, g_theta, g_lambda, g_gamma, g_psi, ktype=cv2.CV_32F)

# 读取多波段图像
image = cv2.imread('1.png', cv2.IMREAD_UNCHANGED)

# 获取图像的波段数
num_bands = image.shape[2] if len(image.shape) == 3 else 1

# 初始化处理后的多波段图像
filtered_image = np.zeros_like(image, dtype=np.float32)

# 遍历每个波段
for band in range(num_bands):
    # 提取当前波段
    band_image = image[:, :, band] if len(image.shape) == 3 else image

    # 应用 Gabor 滤波器
    filtered_band_image = cv2.filter2D(band_image, cv2.CV_32F, kernel)

    # 将处理后的波段放回结果图像中
    if len(image.shape) == 3:
        filtered_image[:, :, band] = filtered_band_image
    else:
        filtered_image = filtered_band_image

# 将处理后的图像转换为合适的数据类型
filtered_image = np.clip(filtered_image, 0, 255).astype(np.uint8)

# 显示结果
if num_bands == 3:
    cv2.imshow('Original Image', image)
    cv2.imshow('Filtered Image', filtered_image)
else:
    for band in range(num_bands):
        cv2.imshow(f'Original Band {band + 1}', image[:, :, band] if len(image.shape) == 3 else image)
        cv2.imshow(f'Filtered Band {band + 1}', filtered_image[:, :, band] if len(image.shape) == 3 else filtered_image)

# 保存结果
cv2.imwrite('filtered_multiband_image.png', filtered_image)

# 等待按键,然后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

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


http://www.kler.cn/a/500196.html

相关文章:

  • TypeScript 爬虫项目实战:抓取豆瓣电影 Top 250(TypeScript简单应用)
  • Unity Burst详解
  • 【“软件工程”基础概念学习】
  • 下载导出Tomcat上的excle文档,浏览器上显示下载
  • 使用sqlplus的easy connect时如何指定是链接到shared server还是dedicated process
  • Swagger学习⑰——@Link注解
  • Golang 设计模式
  • 自动化测试框架playwright 常见问题和解决方案!
  • Caffeine核心设计图解
  • SQL-leetcode-584. 寻找用户推荐人
  • 网络安全行业规划,零基础如何入门网络渗透?
  • 拥抱HarmonyOS之高效使用DevEco
  • 中阳智能量化交易模型:科技驱动的投资革命
  • linux网络 | https前置知识 | 数据加密与解密、数据摘要
  • 继续坚持与共勉
  • openstack下如何生成centos9 centos10 和Ubuntu24 镜像
  • Linux 免杀
  • leetcode 483. 最小好进制
  • 《Opencv》图像的旋转
  • Android车机DIY开发之学习篇(五)默认应用修改
  • 【网络安全 SOC】痛苦金字塔 Pyramid Of Pain
  • python中无法引入pil怎么解决
  • Openstac持久存储之块存储cinder
  • 机器学习之决策树的分类树模型及决策树绘制
  • [sparkstreaming]java.lang.NoSuchMethodError:错误以及更改