雷达标识别目标的原理
Junius @ 2014.05.24 , 09:19 下午有时候,敲代码只是消遣。这次也一样。窗外,北京细雨蒙蒙,总算有时间写篇蛋文和大家聊聊一些和算法有关的事情。
这次要讲的是噪音环境下,图像识别的基础问题。我能想到的最好的例子就是雷达信号识别,在大量底噪的情况下如何把目标物体识别出来。
下面三张图片里都是数据以网格的形式展现,我们拿来当某个雷达扫过的覆盖范围。只要某个格子里侦测到什么东西,我们就把它填上,反之就不动它。
不幸的是,我们通过雷达信号得到的结果充满了噪音。就算那里其实没有任何东西,也被填了色。这三张图展示了不同的噪音水平。
[-]
第一张图的噪声水平是1%;每一个像素有1%的误报几率。中间的噪声水平是5%,然后最右是15%。一个比一个难搞,而且这些噪声都是随机出现的,如果我们的目标就在里面,怎么把它找出来呢?
超载鸡预警雷达
假设,我们要用这座雷达作为一个预警装置,当超载鸡出现时向我们发出警报。
[-]
我们知道超载鸡的代步工具是一架飞碟,而且这架飞碟毫不隐形,反射信号暴强(也就是说飞碟出现的那个格子肯定会被填上)。我们应该如何在一堆噪声背景里把它捉出来?
因为噪声是随机的,如果超载鸡开着飞船悬停在一个地方不动,那么通过数次扫描,就会发现一个稳定出现的固定信号,从而把它楸出来。计算机最擅长做这种事情了,不信你自己试试?下三张图有一块地方是一样的,你光凭瞪眼能找出来吗?
[-]
正确答案:
[-]
就是这个小红点
这也太简单了
如果噪声很重呢?很简单,如果我们的目标就是静止的,我们要做的就是多扫几次。随机出现的噪点都会被干掉,但是留下了目标体。下图就是20%的噪声情况下得到的结果。
为了得到这些图像,我做了图片的叠加,每一个像素的亮度会随着扫描次数的增加而变亮。第一幅只扫描了一次,因为全是噪声,超载鸡根本找不到。第一行第二幅叠了两张,其中亮白色的点表示重复出现在两次扫描结果里的信号,灰色表示只前后出现了一次,黑色就是两次都没有出现信号。很明显,那只鸡就在这些白点里,但是我们的数据还不够。
[-]
直到我们攒够了8张图,可能的目标位置已经逐渐明朗,准确的位置已经显现,基于每一个像素出现在图里的概率只有20%,每一个像素成为全白的状态的概率只有(0.2)
如果有100张图的数据,背景将会倾向于均匀的灰色,超载鸡的准确位置已经彻底暴露。
注意:你可能发现了,在这里我们不需要一部100%精确(有一定概率误报)的雷达,就能找到目标。只要我们能得到足够多的采样次数,超过噪声的比例,我们最终总能找到目标。每次误报的差别越大,我们需要的数据就越少。
移动的目标呢?
以上方法对于固定目标效果很好,但是如果超载鸡飞了起来呢?飞翔的超载鸡在每张图片上的位置都是不一样的(看它飞碟的速度)。所以,如果还用老办法,我们就没法用雷达捉鸡了。
啥,你说自己凭肉眼就能把它找出来?喏,下面给你两张图自己比划看看:
[-][-]
眼花了也没找出来吧,那我们该怎么办呢?
正确的捉鸡方法
(在继续之前,我想声明一下,我用的「雷达」非常简陋,只是针对这个话题而弄的,满共也就十几行代码。内心残破,外貌丑陋。所以我们聊的东西只是介于「度娘」和「维百」之间的水平,不能作为严肃的科研骗款之用)
我们假设超载鸡开着小飞碟以匀速袭来,那么在每一次扫描间隔里,目标移动的距离是一定的。我假设在坐标上的分量分别是 dx 和 dy。但是我们不知道哪个像素是噪点,哪个像素是目标……
我在这里用的算法,会在两帧间,把每一个像素对的位置做比较(取第 n 帧的每一个像素,与第 n+1 帧的所有像素做比较)。如果两帧间的距离太大(超过我设定的阈值),那么我们就判定这个像素不可能在这么短的时间里跑出这么远的距离。
如果帧测的距离小于我们的阈值,那么说明这两个像素可能是同一个目标的移动结果,我就记下这次比较结果的位移 dx 和 dy。当然,很可能这只是两次躁点而已,但我们要捉的鸡,肯定藏在里面。
我把所有的 dx 和 dy 成对组成向量,放在一个「计数器」中(每一次相同的矢量出现,就给加1)。随着多次帧的比较,各个向量的得分开始拉开差距。其实这和静态鸡甄别里所的事情性质是一样的。最终目标物体的运动矢量就会在每一帧反复发现,其他杂音矢量都会渐渐弱化。
我们选择出那个得分最高的矢量给你看,我们最终就有可能找到超载鸡的小灰碟。下图就是一个成功的例子:
[-]
本文译自 datagenetics,由 Junius 编辑发布。
PREV : 审美的变化:将古典名画PS成模特身材
NEXT : 男性误以为女人会喜欢的三种举动