9crk

9crk

0个粉丝

34

问答

0

专栏

6

资料

9crk  发布于  2019-02-27 15:19:45
采纳率 0%
34个问答
668

光流算法的讨论

       
本帖最后由 9crk 于 2019-2-27 15:19 编辑

无人机悬停定点,需要光流算法,但是普通的光流算法比较耗性能。

事实上,光流算法是一种精确度比较高的算法,用来做无人机定点悬停,是大材小用了。


对于无人机的定点悬停,在运算速度上可以做一些改进:

我们知道,悬停是基于摄像头能辨别图像的纹理的情况,如果让摄像头面对一张白纸,则任何方向的运动都无法跟踪。

因此,首先应该提取纹理,进行自适应二值化。

自适应阈值T:
如果二值化后的图像,如果其方差比较小,则需要进行调整,直到方差比较大(表示已经让图像尽量地黑白交错),说明纹理是最好的。

为了抵抗噪声,需要把T设定一个斯密特门限,比如T1 = 100, T2=105,允许图像小范围内的噪声。

一旦锁定了,最终得到的结果就是两个数组,x,y方向上的二值化数值的统计。

此时,如果无人机进行x,y轴方向的移动,则通过一纬数组运算,可迅速输出需要在x,y轴方向的矫正量。(可采用欧式距离计算)

这样,整个跟踪只需要一个二值化,二值化求和,和匹配两个数组的运算,利用海思的IVS加速,会基本不消耗CPU。



更多:对于一些要求比较高的应用,T可以是一个矩阵,因为单一的阈值不能适应整个画面的亮度。


如下试验了一个未使用斯密特门限,且未使用门限矩阵的粗糙算法:
(论坛无法发动图,请看视频)
[url]https://www.youtube.com/watch?v=Qhy5luJhAeg[/url]

试验代码如下:
[code]import cv2
import numpy as np
from matplotlib import pyplot as plt

cap = cv2.VideoCapture(0)

t = 127
bFirst = True
while True:
    ret,frame = cap.read()
    height,width = frame.shape[:2]
    frame2 = cv2.resize(frame,(width/4,height/4))
    gray = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)
    cv2.threshold(gray, t, 255, cv2.THRESH_BINARY, gray)

    xArray = np.sum(gray,axis=1)
    yArray = np.sum(gray,axis=0)
    plt.subplot(2,1,1)
    plt.plot(xArray)
    plt.subplot(2,1,2)
    plt.plot(yArray)
    plt.pause(0.01)
    plt.clf()
    cv2.imshow('frame',gray)

    if cv2.waitKey(1) &0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()[/code]

欢迎讨论。

我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区