2019年11月26日开发手记

利用numpy的矩阵加法函数,成功实现矩阵行列相加,返回投影值,在效果相同的基础上把时间降到了30ms左右。
接下来要将投影值进行聚类,从而达到检测多个运动目标的目的。
def line_trans(img):
    l = Stack()
    h_1= Stack()
    l.isEmpty()
    h_1.isEmpty()
    #ret, thresh1 = cv2.threshold(img, 25, 255, cv2.THRESH_BINARY)  # 将图片进行二值化(130,255)之间的点均变为255(背景)
    (h, w) = img.shape  # 返回高和宽
    a = [0 for z in range(0, w)]
    # 记录每一列的波峰
    #print(img[74, 103])
    for j in range(0, w):  # 遍历一列
        a[j] = sum(img[:, j])
        if a[j]>0:
            l.push(j)
    for i in range(0, h):  # 遍历一列
        a[i] = sum(img[i, :])
        if a[i]>0:
            h_1.push(i)
    if len(h_1.stack) != 0 and len(l.stack) != 0:
        max_h=h_1.stack[len(h_1.stack)-1]
        min_h=h_1.stack[0]
        max_l=l.stack[len(l.stack)-1]
        min_l=l.stack[0]
        return min_h,min_l,max_h,max_l
    else:
        return 0,0,0,0
接下来对已选定的点集进行聚类,对比一下mean shift与dbscan在处理相同数据集时的速度以及效果。
……
TMD聚类算法,所有的聚类算法都是基于二维平面的,但我们的算法是利用投影法求得的点集,点集里都是横纵坐标,但这些横纵坐标都不是关联的,也就是说,点集不是二维而是一维的,从某种意义上来说这是一件好事,聚类算法的设计难度降低了——如果从头设计的话,但这对于一个只会造轮子的我来说,绝对不是个好消息。
对于单个或少量运动物体而言,一维的聚类非常简单——只要把间隔足够远的横纵坐标区域当做运动投影即可,但一旦运动区域在横纵坐标重合,那么问题将变得非常麻烦——我们没有办法将重合的横纵点集分开——也不一定,关键在于投影值,重合区域的投影值肯定更大——至少大于两边,可以设计一个阈值,将大于阈值的部分作为重合点,以此为分界点分割目标——但这又受物体大小的影响,emmmm,先弄出来这个再说吧,其他的以后再说。

你可能感兴趣的:(2019年11月26日开发手记)