第五章,特征提取检测。介绍了灰度特征、几何特征、形状特征和Gabor特征,对工件缺陷样本图片进行特征提取,提取到部分特征参数,最后进行缺陷检测。修改一下
时间: 2024-05-23 08:10:03 浏览: 135
第五章介绍了工件缺陷检测中常用的特征提取方法,包括灰度特征、几何特征、形状特征和Gabor特征。通过对工件缺陷样本图片进行特征提取,可以得到一些特征参数,这些参数可以用于检测缺陷。特征提取是工件缺陷检测的重要步骤之一,通过提取具有代表性的特征,可以有效地区分正常工件和缺陷工件。最后,我们可以利用机器学习算法或其他分类方法对提取出的特征进行分类和识别,从而实现自动化的工件缺陷检测。
相关问题
编写Python代码工件缺陷检测提取gabor特征
您可以使用OpenCV库来提取Gabor特征,以下是Python代码:
```python
import cv2
import numpy as np
# 定义Gabor滤波器函数
def build_filters():
filters = []
ksize = 9
for theta in np.arange(0, np.pi, np.pi/4):
for lamda in np.arange(np.pi/4, np.pi, np.pi/4):
kern = cv2.getGaborKernel((ksize, ksize), 1.0, theta, lamda, 0.5, 0, ktype=cv2.CV_32F)
kern /= 1.5*kern.sum()
filters.append(kern)
return filters
# 对图像进行Gabor滤波
def process(img, filters):
accum = np.zeros_like(img)
for kern in filters:
fimg = cv2.filter2D(img, cv2.CV_8UC3, kern)
np.maximum(accum, fimg, accum)
return accum
if __name__ == '__main__':
# 加载图像
img = cv2.imread("test.jpg", cv2.IMREAD_GRAYSCALE)
# 构建Gabor滤波器
filters = build_filters()
# 对图像进行Gabor滤波
res = process(img, filters)
# 显示结果
cv2.imshow("Result", res)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个代码中,我们首先定义了一个build_filters函数来生成9个不同方向和4个不同波长的Gabor滤波器,然后定义了一个process函数来对图像进行Gabor滤波。最后,我们加载了一张测试图片test.jpg,调用process函数进行Gabor特征提取并显示结果。你可以根据需要更改图像文件名和参数来进行检测。
特征提取部分: 1.纹理特征 (1)自选图片,使用Gabor特征提取; (2)自选图片,基于局部二值模式LBP纹理特征提取; 2.点特征提取 设计一个GUI界面,自选图片或者通过摄像头采集的方式,分别通过harris、shi-tomasi角检测,fast、sift、orb特征点检测,将检测特征点在原图标记,将标记结果显示在GUI界面上。
特征提取是计算机视觉中非常重要的一个部分,它可以从图像中提取出有用的信息,为后续的图像处理、分类、识别等任务提供基础数据。在你所提到的特征提取部分中,包括了纹理特征和点特征两个方面,下面分别进行介绍:
1. 纹理特征
纹理是指图像中的一些重复模式,例如布料、木纹、墙壁等,它们在视觉上具有一定的规律性和连续性。纹理特征提取是在图像中寻找纹理的一些统计规律,通过这些规律来描述纹理的特征。常用的纹理特征提取方法包括Gabor特征和LBP特征。
(1)Gabor特征提取
Gabor滤波器是一种基于人类视觉系统的滤波器,它能够提取图像中的纹理信息。Gabor滤波器可以看作是一个正弦波与高斯函数的乘积,具有一定的方向选择性和尺度选择性。使用Gabor滤波器可以得到一组复数值图像,其中每个像素对应一个Gabor滤波器的响应值。这些响应值可以用来表示图像的纹理信息。具体的提取步骤可以参考以下代码:
```python
import cv2
import numpy as np
# 定义Gabor滤波器参数
ksize = 31 # 滤波器大小
sigma = 5 # 高斯核标准差
theta = 0 # 滤波器方向,0表示水平
lambd = 10 # 波长
gamma = 0.5 # 椭圆度,越小表示滤波器越圆形
psi = 0 # 相位偏移
# 创建Gabor滤波器
kernel = cv2.getGaborKernel((ksize, ksize), sigma, theta, lambd, gamma, psi)
# 加载图像并进行滤波
img = cv2.imread('image.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gabor = cv2.filter2D(img_gray, cv2.CV_32F, kernel)
# 显示滤波结果
cv2.imshow('Gabor Filter', img_gabor)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
(2)LBP特征提取
LBP(Local Binary Pattern)是一种局部纹理特征描述符,它能够描述图像中像素点周围的纹理信息。LBP算法的基本思想是将每个像素与其周围的8个像素进行比较,将像素值比中心像素大的设置为1,否则设置为0,然后将这些二进制位组成一个8位二进制数,即为该像素点的LBP值。对于图像中的每个像素都可以计算出其对应的LBP值,从而得到一个LBP图像。LBP特征可以通过直方图统计等方式进行提取。以下是使用OpenCV进行LBP特征提取的示例代码:
```python
import cv2
import numpy as np
# 定义LBP参数
radius = 1 # 半径
n_points = 8 * radius # 领域像素点数
# 加载图像并进行LBP特征提取
img = cv2.imread('image.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_lbp = cv2.spatialGradient(img_gray, radius, n_points, cv2.SCALING_NON_UNIFORM)
# 计算LBP特征直方图
hist, _ = np.histogram(img_lbp.ravel(), bins=np.arange(0, 256), range=(0, 255))
# 显示LBP特征直方图
plt.bar(np.arange(256), hist)
plt.show()
```
2. 点特征提取
点特征是指在图像中具有明显区别的关键点,例如角点、边缘点等。点特征提取是在图像中找到这些关键点的算法。常用的点特征提取算法包括Harris、Shi-Tomasi、FAST、SIFT和ORB等。
在GUI界面中实现点特征提取,可以通过OpenCV的GUI工具箱实现。以下是一个使用Harris角检测的示例代码:
```python
import cv2
# 加载图像并进行角检测
img = cv2.imread('image.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gray = np.float32(img_gray)
dst = cv2.cornerHarris(img_gray, 2, 3, 0.04)
# 标记角点
dst = cv2.dilate(dst, None)
img[dst > 0.01 * dst.max()] = [0, 0, 255]
# 显示结果
cv2.imshow('Harris Corner Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
除了Harris角检测,还可以使用Shi-Tomasi角检测、FAST、SIFT和ORB等算法进行点特征提取。这些算法的具体使用方法可以参考OpenCV官方文档。
阅读全文