opencv图像对齐与图像相减python

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

1.问题背景:

给一张图片和模板图片(如下图),需要用传统机器视觉的方法来提取他们不一样的特征(也就是划痕部分),并把划痕转为二值化
在这里插入图片描述


1.1 才开始使用基于灰度的方法:
在这里插入图片描述
因为划痕和旁边背景颜色比较接近,绘制出的灰度直方图变化不大,调了很久阈值也不能分出划痕部分,效果如下:
th1是


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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值