1.问题背景:
给一张图片和模板图片(如下图),需要用传统机器视觉的方法来提取他们不一样的特征(也就是划痕部分),并把划痕转为二值化

1.1 才开始使用基于灰度的方法:

因为划痕和旁边背景颜色比较接近,绘制出的灰度直方图变化不大,调了很久阈值也不能分出划痕部分,效果如下:

1.2 后来直接使用图像相减,RGB和Gray分别图像相减结果得到如下:


解决方案:
应该是没有配准而相减有边框的,最终决定配准后,图像相减
查阅资料文献后,大致思路如下:
1. RGB—> 灰度图
2. 去噪滤波,图像增强等一系列预处理操作
3. 提特征点(ORB)并进行图像配准
4. 配准后进行二值化
5. 图像相减操作(ImageChops.difference)
1. RGB-----> Gray
# 1. 转为灰度图
target = cv2.imread("2368_data.png")
gray_target=cv2.cvtColor(target, cv2.COLOR_BGR2GRAY)
template = cv2.imread("2368_model.png")
gray_template=cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)

2. 去噪滤波 预处理操作
# 去噪滤波 预处理
target_gauss = cv2.GaussianBlur(gray_target,(3, 3),1,1)
template_gauss = cv2.GaussianBlur(gray_template,(3, 3),1,1)
# plt转为cv
target_gauss =Image.fromarray(target_gauss) # np array
template_gauss =Image.fromarray(template_gauss) # np array
# 亮度增强
bright= 0.9
bright_target=ImageEnhance.Brightness(target_gauss).enhance(bright)
bright_template=ImageEnhance.Brightness(template_gauss).enhance(bright)
#色度增强
color = 1.2
colored_target = ImageEnhance.Color(bright_target).enhance(color)
colored_template = ImageEnhance.Color(bright_template).enhance(color)
# 对比度增强
contrast =1.1
contrasted_target = ImageEnhance

本文介绍了使用传统机器视觉方法处理划痕检测的问题,通过图像预处理、特征点提取、图像配准和二值化来识别划痕。在预处理阶段,应用了高斯滤波、亮度和对比度增强、锐化等操作。使用ORB特征点进行图像配准,但遇到特征点数量不足的问题,后改为KAZE检测器增加特征点。最终,通过仿射变换实现了简单的平移对齐,解决了图像配准中的问题。

1281

被折叠的 条评论
为什么被折叠?



