凌顺
凌顺

目录

OpenCV Python 使用实数Gabor滤波器处理图像

本示例使用的OpenCV版本是:OpenCV 4.1.1
运行Python的编辑器:Jupyter notebook 6.0.0

实现目的

学会如何构建一个实数Gabor的滤波器,用于检测已知方向的边缘。

file

实现代码

1,加载需要的库和显示图像

import cv2
import numpy as np
import matplotlib.pyplot as plt
import math  #加载math库

# 加载图片并转换为0-1之间数值float32格式
img = cv2.imread('dog.png',0).astype(np.float32) / 255
plt.imshow(img, cmap='gray')

2,创建一个实数Gabor滤波器内核

kernel = cv2.getGaborKernel((21, 21), 5, 1, 10, 1, 0, cv2.CV_32F)
kernel /= math.sqrt((kernel * kernel).sum())

3,应用滤波器处理图像

filtered = cv2.filter2D(img, -1, kernel)

4,显示结果

plt.figure(figsize=(10,10))
plt.subplot(131)
plt.axis('off')
plt.title('image')
plt.imshow(img, cmap='gray')
plt.subplot(132)
plt.title('kernel')
plt.imshow(kernel, cmap='gray')
plt.subplot(133)
plt.axis('off')
plt.title('filtered')
plt.imshow(filtered, cmap='gray')
plt.tight_layout()
plt.show()

file

程序说明

Gabor滤波器是一种线性滤波器,其核心是二维高斯余弦调制的高斯滤波器。使用cv.getGaborKernel函数可以定义内核,它接受内核大小、高斯标准差、波的方向、波长、空间比和相位等参数。Gabor滤波器的一个有用领域是检测已知方向的边缘。

cv2.getGaborKernel 的具体使用方法
https://docs.opencv.org/4.1.1/d4/d86/group__imgproc__filter.html#gae84c92d248183bd92fa713ce51cc3599