求助:对比两幅二值图像识别新增Blob的方法
识别新增Blob的实用方案
核心问题就是两帧里同一个Blob尺寸、形状变了,像素级的位运算(OR/AND/XOR)根本没法准确区分,得换成先提特征再匹配的思路来搞:
第一步:分别抠出两帧里所有Blob的关键特征
用OpenCV的cv2.findContours()或者scikit-image的skimage.measure.find_contours()这类工具,把每帧里的Blob都拎出来,记录每个Blob的这些信息:- 中心坐标(质心或者外接矩形的中心都行)
- 最小外接矩形/椭圆的尺寸、面积、轮廓周长
- Hu矩(这个对缩放、旋转不敏感,专门对付形状变了的情况)
第二步:给两帧的Blob做配对
先筛位置再验形状,把同一Blob的两个帧实例配对上:- 先按位置距离粗筛:算t0帧每个Blob中心到t帧所有Blob中心的直线距离,设个阈值(比如取Blob平均直径的一半),只留距离在阈值内的候选对。
- 再用形状相似度细验:对候选对,算Hu矩的相似度(或者面积、尺寸的比值),比如Hu矩距离小于0.1、面积比值在0.7到1.3之间,满足的就判定是同一个Blob。
第三步:揪出新增的Blob
把t帧里所有没在t0帧找到配对的Blob挑出来,这些就是你要的全新XY位置的新增Blob。额外优化点
- 如果拍摄时图像有轻微偏移,先做图像配准(比如用SIFT/SURF特征把两帧对齐),消除位置误差干扰。
- 要是Blob尺寸变化特别大,优先用Hu矩这种对缩放不敏感的特征,别用面积、尺寸这类容易变的指标。
t=0时刻图像:
t=t时刻图像:
内容的提问来源于stack exchange,提问作者band
相关产品推荐
相关产品推荐

