电子稳像【转】

无人机视频的电子稳像
小型无人机数据介绍
11 图像介绍
12视频数据介绍
小型无人机电子稳像作用
电子稳像
31 实时电子稳像
311 基本原理
312常用方法
32 后续电子稳像
321 特点
322 常用算法

无人机视频的电子稳像

1.小型无人机数据介绍

   1.1 图像介绍:

        1. 影像航向重叠度和旁向重叠度都不够规则;
        2. 像幅较小、像片数量多;
        3. 影像的倾角过大且倾斜方向没有规律;
        4. 航摄区域地形起伏大、高程变化显著,影像间的比例尺差异大、选偏角大;
        5. 影像有明显畸变等这些情况下实现自动空三是现有数据摄影测量系统的主要挑战,在大多数下都将导致错误结果。

   1.2.视频数据介绍

        1. 视频飞行过程中存在高频的抖动,使得无人机拍摄的视频存在抖动;
        2. 摄像机拍摄的视频帧图像存在较大畸变,对于后续数据处理存在很大问题;
        3. 1080P高清视频用于目标识别跟踪,所需要处理的数据量非常大。

2. 小型无人机电子稳像作用

       1. 能够去除视频中存在的抖动、晃动等因素,使得视频画面过度更加平稳,减少视觉疲劳;
       2. 能够增加目标识别与跟踪的精度。

3.  电子稳像

       电子稳像根据其处理方式不同可以分为实时稳像和后续稳像两种;
       实时电子稳像是在无人机飞行过程中根据实时处理算法对摄像机拍摄到的视频进行实时处理;后续电子稳像是无人机在飞行结束之后对其视频进行后续处理。

       3.1 实时电子稳像

       3.1.1 基本原理

       电子稳像不同于图像处理技术中的图像恢复,图像恢复是针对每一帧模糊的图像,而电子稳像稳定的是一个图像序列,图像序列的不稳定是由于帧与帧间图像变化在监视器上反映出来的不稳定,一个基本条件是图像序列中的每一帧是清晰的。

       3.1.2常用方法

       实时电子稳像常用的处理方法包括:灰度投影方法、基于图像特征方法、基于图像块方法、基于背景差法
      下面我们详细介绍下灰度投影方法:
       灰度投影
灰度投影方法是将二维的图像矩阵映射到一维来处理,即x,y方向分别计算,每行每列的像素值总和
   分解为:         和 
计算每行每列的和,这样在行方向和列方向分别计算其前后两帧图像的相关性
如上图,相关性最大的位置也就是该方向上图像相对的偏移值,上图中u即为某方向的偏移值,这样能够方便快捷的获取X,Y方向上的偏移量,之后通过运动补偿来实现稳像。

       3.2 后续电子稳像

       后续电子稳像方法主要是根据视频图像所有帧的运动轨迹(局部运动)来对进行优化,获得精确地全局运动,使得图像之间的运动更加平滑,衔接性更好。

       3.2.1 特点

       处理精度比实时稳像高,但处理算法的计算复杂度高,处理过程消耗时间多。

       3.2.2 常用算法

       Google发表的稳像处理算法:
      
Tripod -> DP(t) = 0
Dolly or pan -> D2P(t) = 0
Ease in and out transitions -> D3P(t) = 0
通过实验验证10:1:100情况下效果最优,再加上框架约束和特征约束,最终获得优化的全局路径
      微软的稳像处理算法:
      该算法的核心分为两点:1)图像的分块,单一的运动模型很难拟合整张图像,将图像分为若干块分别作为一个运动模块使得图像局部拟合效果更加,这样使得图像不会出现严重的变形现象;2)图像分块角点的估算,通过视频帧图像间匹配的特征点来推算给块图像的四个角点,再通过迭代使得图像块的路径最优和图像块与块之间的衔接更加平缓。
opencv 电子稳像例子:

[java]Windows 7 配置jdk 1.7环境变量

Windows 7 配置jdk 1.7环境变量

环境:win7(32位)64位和下面差不多    jdk1.7

1.右击计算机-属性-高级系统设置-高级-环境变量,弹出“环境变量”对话框,主要是改下面的环境变量,不是上面的Administrator。(不然其他用户还得自己配)
添加JAVA_HOME指明JDK安装路径,如C:\Program Files\Java\jdk1.7.0,此路径下包括lib,bin,jre等文件夹
2.在Path变量中添加:
设为:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

ps:分号主要是用来分隔jdk的路径和其他系统程序和应用程序的路径。
windows 10中,可以直接“新建”来增加每一条路径。
3.添加CLASSPATH变量为java加载类的(class or lib)路径,(这样java虚拟机装载class文件的时候才知道上哪去找只有类在classpath中,java命令才能识别)
设为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径,当前路径的意思就是你现在编译运行的程序class文件所在的地方)
测试是否配置成功:

在命令行中,输入命令java   回车后应该会出现java的各种命令;

>java -version
java version “1.7.0_79”
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

javac  也会出现相关编译的命令;
java -version 出现jdk版本号,ps:注意java和javac都是命令(动词),后面-version可理解为宾语,中间是有空格的,切记!!!
特别注意:
在 cmd 中,输入
set java_home命令可以看到jdk安装目录;

>set java_home
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_79

set path   可以看到path变量的值,各种程序的执行路径

>set path
Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Git\cmd;C:\mysql-5.6.17\bin;C:\Program Files\PuTTY\;C:\Program Files (x86)\WinSCP\;C:\Program Files\Git LFS;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\Java\jdk1.7.0_79\bin;C:\Program Files\Java\jdk1.7.0_79\jre\bin;C:\Users\cyb\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\Microsoft VS Code\bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

set classpath可以看到类装载路径

>set classpath
CLASSPATH=.;C:\Program Files\Java\jdk1.7.0_79\lib;C:\Program Files\Java\jdk1.7.0_79\lib\tools.jar;C:\Program Files (x86)\QuickTime\QTSystem\QTJava.zip;

◆环境变量值的结尾可加分号或不加,不同值之间用;(记住:分号是用来分隔的,只要是两个不同的路径都需要分号隔开)

◆CLASSPATH变量值中的.表示当前目录,另外java_home这个变量整体被path和classpath引用,好处在于今后重装jdk后,只需改java_home的值