2019年11月25日开发手记
巫师笔记 人气:1对滤波后的图像做行列投影,通过阈值得到运动图像横纵坐标点集。使用水平与竖直投影算法,投影算法的时间复杂度为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 似乎出现了一个新特点:运动的物体在运动的反方向一侧的边缘会出现高亮。
换而言之,图像出现了方向性,这对后面的分类与识别应该有些特殊的意义。
加载全部内容