我正在尝试跟踪视频的液滴。从每一帧开始,我最终都会检测到多个液滴和噪音(使用findcontours)。
从A帧开始,我生成由:
定义的X对象class Object:
'Creates new object containing the location and its respective pixel frame.'
objectCount=0
def __init__(self,position,frame):
self.position=position
self.pixelframe=frame[position-10:position+10,position-10:position+10]
Object.objectCount+=1
现在,我接下来要做的是将那个以帧A的对象的质心(位置)为中心的像素与帧B进行比较。我使用结构相似性索引(SSIM)给出两帧之间相似性的值。如果匹配是完美的(或接近),则对象不会移动并被视为背景(不重要)。但是,如果它已经移动(坏匹配),我需要在帧B中找到它。为了做到这一点,我将帧A中的对象的像素帧与帧B中的一个比较,直到找到一个好的匹配。一旦我有一个很好的匹配,我想将这两个对象关联为一个(Droplet)。
作为说明我问题的例子,让我说我有来自A帧的10个物体:obj11,obj12,...,obj110 测试后,只有obj1移动了(同一位置的不匹配)。 帧B有12个对象:obj21,obj22,...,obj212 验证后,obj11和obj21具有非常好的匹配,并且可以作为Droplet关联在一起。
我想到的是创建一个Droplet类,它将继承obj11和obj21的属性。
class Droplet:
def __init__(self,objectA,objectB):
self.data=[objectA,objectB]
def add(self,objectC):
self.data.append(objectC)
我做得对吗?是否有更好的方法而不是创建两个类?