OpenCV 中的 Gabor 滤波器是一种图像处理技术,它可以通过对图像进行 Gabor 滤波来提取图像的纹理特征。在 OpenCV 中,可以使用 cv2.getGaborKernel() 函数来生成 Gabor 滤波器,使用 cv2.filter2D() 函数来对图像进行滤波。
使用 cv2.getGaborKernel() 函数的基本语法如下:
kernel = cv2.getGaborKernel(ksize, sigma, theta, lambd, gamma, psi, ktype)
其中,ksize 是滤波器的大小,sigma 是高斯函数的标准差,theta 是滤波器的方向,lambd 是波长,gamma 是空间纵横比,psi 是相位偏移,ktype 是滤波器的数据类型。
以下是两个示例说明:
示例一:使用 Gabor 滤波器提取图像纹理特征
要使用 Gabor 滤波器提取图像纹理特征,可以使用以下代码:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg', 0)
# 定义 Gabor 滤波器参数
ksize = 31
sigma = 5
theta = np.pi / 4
lambd = 10
gamma = 0.5
psi = 0
ktype = cv2.CV_32F
# 生成 Gabor 滤波器
kernel = cv2.getGaborKernel((ksize, ksize), sigma, theta, lambd, gamma, psi, ktype)
# 对图像进行滤波
filtered = cv2.filter2D(img, cv2.CV_8UC3, kernel)
# 显示图像
cv2.imshow('image', img)
cv2.imshow('filtered', filtered)
cv2.waitKey()
cv2.destroyAllWindows()
这将读取名为 image.jpg 的图像,并使用 Gabor 滤波器提取图像的纹理特征。最终结果将在窗口中。
示例二:使用 Gabor 滤波器进行人脸识别
要使用 Gabor 滤波器进行人脸识别,可以使用以下代码:
import cv2
import numpy as np
from sklearn.datasets import fetch_lfw_people
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载人脸数据集
lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(lfw_people.data, lfw_people.target, test_size=0.2, random_state=0)
# 定义 Gabor 滤波器参数
ksize = 31
sigma = 5
theta = np.pi / 4
lambd = 10
gamma = 0.5
psi = 0
ktype = cv2.CV_32F
# 生成 Gabor 滤波器
kernel = cv2.getGaborKernel((ksize, ksize), sigma, theta, lambd, gamma, psi, ktype)
# 对训练集进行滤波
X_train_filtered = []
for i in range(X_train.shape[0]):
img = X_train[i].reshape((50, 37))
filtered = cv2.filter2D(img, cv2.CV_8UC3, kernel)
X_train_filtered.append(filtered.flatten())
X_train_filtered = np.array(X_train_filtered)
# 对测试集进行滤波
X_test_filtered = []
for i in range(X_test.shape[0]):
img = X_test[i].reshape((50, 37))
filtered = cv2.filter2D(img, cv2.CV_8UC3, kernel)
X_test_filtered.append(filtered.flatten())
X_test_filtered = np.array(X_test_filtered)
# 训练 SVM 模型
clf = SVC(kernel='linear', C=0.1)
clf.fit(X_train_filtered, y_train)
# 预测测试集
y_pred = clf.predict(X_test_filtered)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
这将加载人脸数据集,并使用 Gabor 滤波器进行人脸识别。最终结果将输出准确率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Opencv 使用Gabor滤波器进行特征提取 - Python技术站