QQ登录

只需一步,快速开始

用FG开发计算机视觉运算程序

2012-6-21 08:46| 发布者: flightgear| 查看: 5148| 评论: 3

摘要: 海洋残骸 2012年3月12日,发现疑似日本海啸的残骸被遗弃在加利福尼亚长滩海滩上;3月11日,一艘废弃的捕鱼船出现在英国哥伦比亚海岸,到3月24日,该捕鱼船已经在海岸线漂浮了120海里。多年来NOAA.gov曾监控每一个新添 ...

海洋残骸
      2012年3月12日,发现疑似日本海啸的残骸被遗弃在加利福尼亚长滩海滩上;3月11日,一艘废弃的捕鱼船出现在英国哥伦比亚海岸,到3月24日,该捕鱼船已经在海岸线漂浮了120海里。多年来NOAA.gov曾监控每一个新添的被称为“北太平洋垃圾堆”的区域,这些区域堆集了来自全球各地的各种塑料垃圾。不管你是环境主义者还是致力于治理并维持地球上有价值的不确定资源的富有学识者,或只是单纯因为需用PHOTOSHOP把垃圾从您原始假期照片中删除而发怒的人,快速增加的海洋残骸应该受到所有人的关注。这些与Flightgear 模拟器有何关联呢?请看下文分解!
 

什么是“计算机视觉”
      计算机视觉是一个广泛的领域,通过设计处理真实世界的图像或录像,自动提取数据或知识。应用范围从辨识事物或面貌特征(比如面部识别)到提取几何物理位置或重新构图以便能以更明智或更有使用价值的方式进行图像处理。计算机视觉从很多方面来看都是一个神奇的不可思议的领域。我们都见过这样的软件程序,只要将Tina阿姨的一两张照片输入计算机识别她的脸,该程序就能识别所有Tina阿姨的照片。计算机视觉系统可以在由许多相机视图所组成的网络中追踪人或事物,计算机视觉系统能评估你的头所在方位甚至算出你看向哪个方向或你在看什么东西。计算机视觉软件能够识别汽车、读取打印的文本并能扫描图像中隐藏的细微特征 -  由于这些程序是自动程序,所以它们能夜以继日地处理大量图像,从不会感到疲劳,不会厌烦,也绝不会做与周末计划有关的白日梦。

开发一个计算机视觉应用程序
      写一个计算机视觉应用程序与写其它任何程序类似,像其它程序一样都需要编写、编译、测试、重复这样的基本循环,计算机视觉系统以连续的方式将逻辑规则和程序应用到图像数据中,从而完成任务。尽管它们超越了人类的能力或步伐,看上去很神奇,但实际上并不神奇。然而,如果你对于计划处理的图像类型没有很好的了解,开发计算机视觉应用程序将是种挑战。

      如同你所想的那样,计算机视觉应用程序必须处理大量的数据,通常它们处理来自各种照相机的现场视频数据,这些数据可能需要与其它实时数据源– 即不可能通过预先录制的视频在实验室中进行测试的数据源相关联。
      假设你开发一个应用程序,该程序通过处理航空图像提取某些数据(比如面部识别)或定位并追踪感兴趣的事物(比如海洋中残骸上的一个矮胖的人),很可能你并没有很多录像样本进行测试。在海洋残骸的例子中,也许你确实有从正确高度,或以正确空速,或从正确的摄影视野或角度获取的图像,然而,用重复性测试数据而不是当天随意提供的杂乱的图像在实验室中开发计算机程序更有效,杂乱的图像会导致进行有效测试所需图像与可用图像之间失去关联性。
搜索并追踪海洋残骸

      几年前,我曾经参与一家公司为海上搜救开发UAV遥感跟踪系统的项目,我们第一大合作伙伴是NOAA.gov,NOAA对了解、跟踪以及彻底清理海洋残骸非常感兴趣。去年日本海啸后,海洋中堆积的海洋残骸相关问题变得更加重要和急迫,然而目前尚没有定位并清理海洋残骸的有效措施。

      一个卫星能俯瞰的范围非常广,但不能从细节上识别具体的残骸,人工操作的飞机能飞几百海里并覆盖低高度较广的区域,从而探明残骸的各个部分,但锁定残骸后却什么都做不了。船只行走得很慢且船上的探查人员的视野较窄, 如果一艘船上的探查人从正确的方向观察,且恰好在海浪将残骸抬高进入观察者的视野,那么借用双筒望远镜可以探明一或两海里外的残骸。船只上层甲板为观察残骸提供了一定的高度,但海浪会隐藏物体使观察者不易发现它们,只有从正确的方向在正确的时刻才有可能探查到残骸,用船只探查残骸还有其它挑战,船只左右上下颠簸将使观察者很难使用双筒望远镜,且容易损坏双筒望远镜。
      以下两幅图拍摄时间只间隔了几秒,你能在第一副图中探查到残骸吗?在第二副图中呢(你可以点击图片以全屏大小观察)?

  

      UAS比人们从船只的最高甲板搜寻残骸更有优势,UAS提供了更高的俯瞰高度,这样物体不会被海浪隐藏;同样的时间UAS能更快的观察更广的区域;UAS能承载各种图像传感器,包括IR相机或多光谱摄像机,提供更强的在各种不同条件下可靠探测某些类型物体的能力。人们开始使用计算机视觉软件处理UAV图像并开始采用更有效的残骸定位和追踪系统。

      尽管UAS范围有限,且如果探测到物体,它没有能力标注或重新找到该物体,因此UAV与附近船只合作作业对于很重要,这样在发现物体时可以采取行动。
海洋环境中计算机视觉的目视挑战

 

      任何计算机视觉应用程序,将应用程序范围和焦距尽可能调小,更能解决问题,使用UAV在海洋上空飞行,通过垂直向下拍摄的相机收集图像,那么相片将全是垂直向下俯瞰海面的图像,我们假设不需要处理地平线、天空或云或附近的海岸线,结果是海洋大部分是蓝色阴影 – 这很方便。任何不是蓝色的部分都不是海洋,这样就有趣了,但尽管通过这种方式限制问题范围,计算机视觉应用程序仍必须面临几个方面的挑战:1.阳光造成的闪烁光 – 太阳光在水面的反射。2 超过12-15节的大风造成的波浪、泡沫甚至水纹(泡沫线)。目视观察的话,闪耀的阳光和泡沫阻碍了我们探查水中的物体。
为什么使用FLIGHTGEAR代替真实相机图像?
      FlightGear可生成真实地球视景并能提供对模拟飞行高度、速度、相机方向和视野的控制,此外,FlightGear能提供飞行遥感勘测数据和其它对真实世界环境进行测试和模拟有用的数据。我们还可以控制每天的时间、云、风、降水并能去任何我们想去的地方。FlightGear脚本引擎能做静态或动态场景,对我们想最终处置的项目进行测试。当然,计算机视觉应用程序中只有很少一部分与处理航空图像有关,但UAV获得越来越多的民间及私人组织的关注,自动处理大量图像数据的需求只能越来越多。

FlightGear“人造图片”与真实世界摄影图片

 

      由于FlightGear不断进步研发,其图像的质量和逼真度也得以改善,在近期大部分视景中,我们在海洋写实绘图方面取得了很大的进步,包括色彩精确性、不同海洋形态和波浪类型的精确表现,甚至大船驶过时滚动的水浪和泡沫(大风天气破浪航行时形成)也能制作,FlightGear中做出的海洋视景的品质(大多数情况下)与真实摄影图片几乎无法分辨。
什么是OpenCV?
      OpenCV是数据结构和功能库,提供许多处理任务所需的基本图像,以及许多更普遍的高级功能。OpenCV提供了开发人员编写计算机视觉应用程序所需的搭建块,OpenCV可在Linux, Windows, Mac,甚至 Android操作系统中使用。

如何将某个图像处理应用程序与FlightGear实时关联
      免责:本节中我说明的具体细节针对于Linux平台,其它操作平台也提供了类似工具,也许可以以相同(或类似)方式完成同样任务 – 但据说如果不是Linux系统,其英里计量单位可能有变化。
      我知道如何将我电脑中的部分内容截取为一个影片并将之作为一个文档存放,我的计算机视觉应用程序知道如何读取影片文档并逐帧逐帧进行处理,所缺少的是我想要不用飞行实时进行这些工作,并存储成录像并进行处理,我的基本策略是开始制作一个UNIX文档系统“fifo”,然后将截取的录影写入fifo中,同时从fifo的其它端口将之读取到我的计算机视觉应用程序中。
1.  从FlightGear中模拟的照相机清晰度开始,我有一个便宜的网络摄像头,可进行基本的vga (640×480)视频,我将之作为我的“标准” 可以运行:“ fgfs –geometry=640×480”,以便以正确的窗口大小显示flightgear,接下来我将FlightGear窗口拉到屏幕左上角,这样它就处于一个已知位置。
2. 如果没有fifo,建一个,比如“mkfifo /tmp/ffmpeg-fifo.avi”
3. 启动计算机视觉应用程序:”my-vision-app –infile /tmp/ffmpeg-fifo.avi”
4. 启动ffmpeg ffmpeg电脑电影截取功能(我有一个手稿,所以不需要记住各个时间所做的选择):“ffmpeg -f alsa -i default -f x11grab -s 640×480 -r 15 -b 200k -bf 2 -g 300 -i :0.0+1,58 -ar 22050 -ab 128k -acodec libmp3lame -vcodec mjpeg -sameq -y /tmp/ffmpeg-fifo.avi”

      以下是成果,计算机视觉应用程序已经启动,并实时处理FlightGear生成的图像,我用fifo时发现:似乎在启动编写器(ffmpeg)之前启动读取器(CV app)会工作的更好,这样缓冲器不会被占满造成迟缓。
Results成果
这是异物探测和跟踪抓图:
原始图片:

图像与水分离与无水比较

扩大马赛克(结合噪点)

逐渐销蚀掉扩大的马赛克(缩回约原始尺寸大小并保持其在原图中的位置)

最后综合图像显示探测到的点在原帧上部:

      视频中显示所有部分结合后的成果,在FlightGear中:我曾在6nm x  6nm开放海面任意散放某一残骸区,我给测试飞机加装了镜头向下的相机,然后我建立一条飞过残骸区域几次(直线航路)的航路,我使用上述程序将实时FlightGear图像送入我的探测跟踪异物的计算机视觉运算程序中,想要看的残骸从空中看非常小 – 通常在图中最多有几个像素那么大,需要小心调谐运算程序FlightGear,避免主动错误从而错过要探测的物体。

2

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (2 人)

发表评论

最新评论

cheetah998 2013-3-15 08:52
顺了一下 原文作者写的也很纠结 一句话很长 句中一个词加了很多的修饰定语,请试着憋一口气读长长的一段话,直到喘不上气来 就是看原文的感觉 泪奔
cheetah998 2013-3-15 08:32
啊呀呀 当时时间紧 文章专业跨度大 专业性强 哪儿哪儿的全是专业术语 又没有上下文解释解释是个什么东西,翻的也很纠结呀 偶再顺顺哈 先勉为其难的看看吧
流年 2012-6-25 10:54
版主大人,这翻译看得好纠结啊,很影响理解

查看全部评论(3)

手机版|联系我们| FlightGear ( 京ICP备10014305号 )

GMT+8, 2019-8-26 14:39

Powered by Discuz! X3.2

© 2001-2013 FlightGear Inc.

返回顶部