• 2019年11月25日开发手记


    对滤波后的图像做行列投影,通过阈值得到运动图像横纵坐标点集。使用水平与竖直投影算法,投影算法的时间复杂度为O(x2),哪怕进行优化也最多可变为O(xlogx),时间上无法接受。再次使用傅里叶变换?还是将目标放在轮廓点整合?

    使用竖直投影法的话还不如直接遍历所有点找轮廓,这对后面进行聚类也比较方便。

    决定采用竖直投影+遍历,只进行一次投影,在投影过程中将点逐个遍历,高亮点的横纵坐标压入栈,输出横纵坐标的最大值和最小值。

    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)]
        # 记录每一列的波峰
    
        for j in range(0, w):  # 遍历一列
            q_1=0
            for i in range(0, h):  # 遍历一行
                #print(1)
                #print(img[i, j])
                if img[i, j] !=0:  # 如果该点为白点
                    print(1)
                    if q_1 ==0:
                        i_1=i
                    i_2=i
                    q_1=1
                    a[j] += 1  # 该列的计数器加一计数
            if q_1!=0:
                l.push(j)
                h_1.push(i_1)
                h_1.push(i_2)
          if len(h_1.stack) != 0 and len(l.stack) != 0:
              max=h_1.stack[0]
              min=h_1.stack[0]
              for i in range(len(h_1.stack)):
                  if h_1.stack[i]>max:
                      max=h_1.stack[i]
                  if h_1.stack[i]<min:
                      min=h_1.stack[i]
              return min,l.stack[0],max,l.stack[len(l.stack)-1]
          else:
              return 0,0,0,0
    问题:似乎进不去判断函数,也就是img中所有点都为0,但在调试中img确有非0点。
    问题解决:缩进错误
     新算法的效果确实变得更好了,但速度也变得更慢了,为80ms左右。尝试使用python的切片操作,对二维数组进行横向累加,从而达到减少迭代次数的目的。
    在滤波函数中加上一句:iimg[index,:][iimg[index, :] > 200] = 0 似乎出现了一个新特点:运动的物体在运动的反方向一侧的边缘会出现高亮。
    换而言之,图像出现了方向性,这对后面的分类与识别应该有些特殊的意义。
  • 相关阅读:
    Zookeeper 基础知识【1】
    Spark 基础复习【1】
    ZooKeeper 入门 一致性
    Hive 视图 索引
    Yarn调度 历史与基础
    mysql 优化【1】
    TCP IP知识梳理
    Java 基础 锁
    Spark 累加器使用
    RATE-MAX----beta答辩博客
  • 原文地址:https://www.cnblogs.com/lvfengkun/p/11931826.html
Copyright © 2020-2023  润新知