高光谱图像处理之目标检测技术(CEM算法)(图像处理)@慕课网原创慕课网

1、高光谱图像目标检测的发展趋势和研究现状:

20世纪80年代末,美国的一些研究机构开始利用高光谱图像数据进行目标检测方面的研究。自上世纪九十年代,国外出现了进行高光谱图像目标检测算法理论研究的研究组。由Reed和Yu提出了基于广义似然比检验的恒虚警RX检测器(RXD)。Chang课题组提出了基于正交子空间投影的OSP检测方法,Harsanyi提出了基于约束能量最小化的CEM算法。未来高光谱目标检测的发展将会越来越重视实用性,算法的性能将会进一步提高,同时更也加适合使用FPGA硬件对其进行加速从而具有更高的实际应用价值。

2、高光谱目标检测技术的应用范围:

高光谱目标检测具有较强的实用性,可应用于公共安全、环境检测、城市规划、食品卫生、地质岩矿的识别等众多方面。

图1.1高光谱图像数据结构

3、高光谱图像数据的特点:

高光谱图像数据“图谱合一”,具有丰富的光谱维信息。高光谱图像数据共有三个维度,如图2.1所示,其中,图像空间维信息x、y用于表示物体的实际空间分布,而光谱波段L用于表示每个像素的光谱属性。

4、高光谱图像目标检测原理:

高光谱图像的各波段在成像范围内都是连续成像,因此高光谱的光谱曲线一般是平滑的、连续的曲线。高光谱图像的波段L中涵盖了物质的光谱信息,而每种物质的光谱信息都不一样,我们可以利用图像像素的光谱波段L所包含的特定的光谱信息来判断该像素所代表的特定的物质种类。

5、高光谱图像目标检测流程:

图1.2高光谱图像目标检测流程图

如图所示,对于拍摄得到的原始高光谱图像数据,需要先对数据进行预处理,包括数据格式化、无用数据剔除以及亮度到反射率的转化等。同时,对于遥感仪拍摄的高光谱图像还需要进行辐射校正,在目标检测前,应对数据进行调整,包括数据归一化等。最后根据已知的先验信息选择相应的目标检测算法进行检测。

6、现场可编程门阵列(FPGA)在高光谱图像处理中的应用:

二、算法分类、比较和选择:

1、方法分类:

高光谱目标检测方法按照先验信息是否已知分为监督方法和非监督方法。前者用于目标光谱已知的情况下,利用目标光谱与图像像元光谱进行匹配,从而完成目标检测,比如CEM算法、OSP算法;后者多用于异常目标检测,一般不需要目标和背景的先验信息,根据高光谱图像数据获取目标检测所需要的数据,然后根据数据的大小来判断是否为异常目标,比如RXD算法。

2、CEM、OSP、RXD算法的区别:

(1)CEM(ConstrainedEnergyMinimization)算法:

CEM算法主要思想是设计一个FIR线性滤波器,使得在满足约束条件式的情况下滤波器的输出能量最小。该算法不需要图像的背景信息,只需要知道要检测的先验光谱信息(目标向量)即可,具体方法是通过高光谱图像数据和先验已知的待检测目标确定一个滤波向量,让图像经过该滤波向量即可得到检测结果,其中滤波向量的作用是滤除图像中的非目标像素,让感兴趣的目标能够通过,同时抑制由其他信号带来的滤波器输出能量。

(2)OSP(OrthogonalSubspaceProjection)算法:

OSP算法与CEM算法相比,最大区别在于不仅需要目标的先验知识,还需要图像中背景的先验知识,但在实际中中这些先验信息很难全部得到。在高光谱检测中我们一般用其来检测异常。该算法需要前提条件:图像信息、目标像元、非目标像元(异常目标)信息。

(3)RXD(Reed-XiaoliDetector)算法:

RXD算法是异常目标检测领域中最基础的算法,不需要目标光谱的先验知识,而是基于背景服从多元正态分布的假设,通过检测与背景分布中心相比属于异常像元,并在这些感兴趣区域进一步查找可能存在的目标。该算法主要针对的是小目标检测问题。

(4)确定所采用的目标检测算法:

由于我们的应用场景多为有特定目标的目标检测,CEM正是针对未知场景中可能存在的特定目标的检测,只需要知道目标的光谱信息即可,而RXD算法适应于对特定场景的异常(未知目标)检测,而OSP算法除了需要已知目标光谱还需要背景信息。综上,我决定采用CEM算法进行高光谱目标检测的实现。

三、CEM算法分析:

1、算法步骤:

(1)对高光谱图像进行预处理,得到二维化和归一化后的数据r(L*N);

(3)确定目标光谱向量d(d大小为L*1);

(4)根据公式:

设计FIR线性滤波器:

(5)将归一化后的数据经过FIR滤波器,得到输出信号y。

2、问题分解:

图1.3CEM算法分解流程图

四、CEM算法实现:

1、算法流程:

在MATLAB和C语言中实现CEM算法的具体流程如图所示,因为语言特性是串行执行命令,所以在编写程序时与硬件设计比较更加直接明了。

图1.4CEM算法流程图

2、数据预处理:

对前期得到的高光谱图像在MATLAB平台上进行预处理。这一过程主要对原始的200*200*189大小的高光谱图像进行操作:

(1)二维化:通过调用MATLAB里面的reshape()函数实现。

(2)归一化:采用“min-max”方法。具体步骤是先找到数据的最大值(maxA)和最小值(minA),通过y=(x-minA)/(maxA-minA)计算的y即为归一化后的数据。高光谱数据量大,也造成了数据的存储比较困难,数据在程序中的存储等处理

3、CEM算法的MATLAB实现:

4、CEM算法的C语言实现:

在VisualStudio平台上完成CEM算法C程序的编写。相比于MATLAB实现,CEM算法的C语言实现主要难点在于矩阵运算。因为在C语言中,矩阵的转置、相乘、求逆等操作均没有现有的函数,需要编写相应的函数。在实现矩阵基本运算过程中,通过动态分配内存运用二维指针传递参数,完成矩阵加减法运算、矩阵转置运算、矩阵相乘运算以及矩阵求逆运算,这样可以节省存储空间,使用完后释放空间即可。

CEM算法的C语言实现主要包括如下步骤:

(1)在MATLAB中,将归一化后的高光谱图像数据转为189*40000的二维形式,保存为CEM.mat;

(2)编写矩阵初始化、矩阵转置、矩阵相乘、矩阵求逆、内存释放函数;

(3)编写main函数,读CEM.mat,调用上述函数,求得FIR滤波器,进而获得输出信号y,将其写入CEM.txt;

(4)在MATLAB中显示CEM.txt中数据所代表的图像。

5、难点解决:

(1)矩阵转置

矩阵转置函数的输入是大小为m*n的矩阵A,输出是大小n*m为的矩阵B。采用嵌套的for循环分别遍历矩阵的行和列,将输入的二维矩阵A按列读出,重新按行写入新矩阵B中,即可实现矩阵的转置。

(2)矩阵相乘

矩阵相乘函数的输入是大小m*n为的矩阵A和n*k的矩阵B,输出是大小为m*k的矩阵C。采用嵌套的for循环分别遍历矩阵的行和列,首先将矩阵A按行读出,矩阵B按列读出,然后将读出的矩阵A的第i行和矩阵B的第j列对应位相乘求和,将计算的结果写入矩阵C第i行第j列元素中。

(3)矩阵求逆——QR分解求逆

QR分解求逆的原理是:对于可逆矩阵A,首先利用QR分解将A矩阵分解为Q矩阵和R矩阵。即A=QR,其中Q是正交矩阵,R是上三角矩阵。然后将公式左右同时求逆,可以求得A的逆矩阵,其中Q矩阵的逆矩阵和转置矩阵相同,R求逆有特定的公式。QR分解求逆的运算较为简单,且数据稳定度较高,可以得到误差较小的求逆结果。

6、算法实现结果和对比分析:

1)MATLAB和C语言实现CEM算法的检测结果如图所示:

(a)(b)(c)

图1.6原图CEM算法检测结果:(a)原图(每一行是一种物质)(b)MATLAB检测C物质(c)C语言检测C物质

通过对MATLAB和C语言实现结果进行对比,发现二者均成功实现了CEM算法并完成了对目标的检测,观察检测结果基本无差异。

THE END
1.什么是流程图?一篇文章就帮你搞定了基础流程图 二、跨职能流程图 跨职能流程图是在基本流程图的基础上,对整体流程分职能部门或项目角色来对整体的工作流程进行梳理,从而能够便于我们在不同的项目阶段中清晰的了解各职能部门和角色什么时间需要介入、介入时什么时间点需要参与什么样的流程。主要是在项目流程的基础让突出各职能角色的分工情况,让不同职能https://baijiahao.baidu.com/s?id=1759331956221884381&wfr=spider&for=pc
2.专业学习如何绘制算法流程图?算法流程图怎么做一、什么是算法流程图 (一)算法流程图 流程图是算法的图形化描述。流程图用图形化的方式描述了算法从开始到结束的所有步骤,通过流程图可以直观的了解算法执行的过程,是人们之间交流算法很重要的图形化工具。 人们为了方便地使用流程图交流算法,而不至于因图形符号的问题引起对算法过程理解的混淆。人们规定了一组预定义https://blog.csdn.net/weixin_63253486/article/details/144084968
3.算法流程图新手指导说到流程图,其实大家都不陌生,在我们生活中经常会看到流程图,并需要按照流程图的要求去执行流程图中的各个步骤。流程图的目的,就是让我们能够明确每一个步骤,避免出现遗漏和差错。 算法流程图,顾名思义,就是以特定的图形符号加上说明,表示算法的图,算法流程图包括传统流程图和结构流程图两种。一张图胜过千言万语https://modao.cc/flowchart/algorithm-flow-chart-beginners-guide.html
4.什么是算法流程图?该怎么绘制?什么是算法流程图?算法流程图以程序算法设计为核心,指用特定的图形符号加以文字说明表示算法及流程的框图,也可以简单理解为以算法为主题的流程图。 算法流程图常见作用 1、直观且清晰地呈现算法设计,便于整理算法思路; 2、借助图示验证算法的逻辑性及合理性; https://www.liuchengtu.com/tutorial/suanfaliuchengtushishenme.html/
5.一文搞懂什么是粒子群优化算法(ParticleSwarmOptimization,PSO算法流程图和伪代码 1.2.2 应用举例 上面看不懂? 没关系,看了这个实例,保证你能理解最简单的PSO是如何实现的。 注意对于越界的位置,需要进行合法性调整,将超出定义范围的数值改成范围内的边界值。 1.3 粒子群优化算法的改进研究 粒子群优化算法的研究内容和改进方向 https://cloud.tencent.com/developer/article/2153640
6.使用流程图表示算法(计算机基础)流程图是表示算法也是表示业务逻辑的一种方式使用图形表示算法的方式是一种极好的方法。 下图是流程图预定义的符号: 下面是流程图示例(既表示业务逻辑也表示程序逻辑): 绘制流程图直接使用word文档就行流程图绘制方式: 1.点击插入-->形状-->流程图,图片示例如下: 通过这些形状以及我们提供的流程图示例,就可以进行https://www.pianshen.com/article/81431148068/
7.交互设计流程图怎么画?人人都是产品经理设计流程图长得并不特别,跟全世界流程图都差不多,也同样是作为一种表达工具存在。 1 什么不是设计流程图? 以下是百度百科关于流程图的定义: 以特定的图形符号加上说明,表示算法的图,称为流程图或框图。流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程https://www.woshipm.com/ucd/137757.html
8.程序流程图程序流程图是用规定的符号描述一个专用程序中所需要的各项操作或判断的图示。这种流程图着重说明程序的逻辑性与处理顺序,具体描述了微机解题的逻辑及步骤。当程序中有较多循环语句和转移语句时,程序的结构将比较复杂,给程序设计与阅读造成困难。程序流程图用图的形式画出程序流向,是算法的一种图形化表示方法,具有直观、https://www.meipian.cn/38kq7re4
9.自动驾驶RRT算法原理解析2.2 算法伪代码 可以将伪代码与上述算法流程对照起来看 2.3 算法流程图 3 RRT算法matlab实现 3.1 测试地图 %随机生成障碍物 function [f,n1]=ob(n) f=[];%储存障碍物信息 n1=n;%返回障碍物个数 p=0; for i=1:n k=1; while(k) D=[rand(1,2)*60+15,rand(1,1)*1+3];%随机生成障碍物的坐https://m.elecfans.com/article/2196697.html
10.计算机视觉轮廓搜索和图像分割实验流程图计算机视觉框架图8:图像语义分割算法流程图 目前图像语义分割的主要创新主要集中在如下几点,即如何更高效地获取更大的感受野、如何更好地利用多尺度的信息、如何使用全局上下文信息、如何设计上采样方式以恢复分辨率、如何利用空间中像素之间的联系得到更平滑的像素特征、如何通过逐步求精的方式逐步获得更好的分割结果以及如何设计参数更少https://blog.51cto.com/u_16213631/8709219
11.三轴加速度传感器在跌倒检测中的应用AnalogDevices图6 算法流程图 算法中,关于各种中断的门限以及时间参数的设置如下所述 1. 初始化后,系统等待Free_Fall中断(失重),这里把THRESH_FF设为0.75g,把TIME_FF设为30ms。 2. Free_Fall中断产生之后,系统开始等待Activity中断(撞击),这里把THRESH_ACT设为2g,Activity中断为DC coupled工作模式。 https://www.analog.com/cn/analog-dialogue/articles/detecting-falls-3-axis-digital-accelerometer.html
12.设计算法.输入正整数n.计算它的阶乘n!.画出流程图.用for语句描述解:算法流程图如答图所示: 用for语句描述算法如下: 输入n; T:=1; for i:=1 to n do begin T:=T*i; end. 输出T. 练习册系列答案 创新教程系列答案 互动中考复习大讲义系列答案 中考阶段总复习ABC系列答案 达优测试卷系列答案 剑指中考系列答案 http://www.1010jiajiao.com/gzsx/shiti_id_77d21cec7625a12d71db452d984156ef
13.算法程序框图基本算法语句(3)算法的描述:自然语言、程序框图、程序语言。 2. 程序框图 (1)程序框图的概念:程序框图又称流程图,是一种用规定的图形、指向线及文字说明来准确、直观地表示算法的图形; (2)构成程序框的图形符号及其作用 程序框 名称 功能 起止框 表示一个算法的起始和结束,是任何算法程序框图不可缺少的。 https://www.360doc.cn/article/925413_215308067.html
14.用流程图描述算法【前面了解了程序和算法的关系,知道了算法是解决问题的具体方法和步骤,也学会了用文字去描述算法。哪还有没有其它描述算法的方式呢?毕竟文字看起来比较费劲。流程图就是一种描述算法的图形化描述,用流程图可以清晰地描述出算法的思路和过程。通过本篇的学习,你将了解到如何用流程图来描述算法。】 https://zhuanlan.zhihu.com/p/39625195
15.DeepSORT多目标跟踪算法代码解析OSCHINADeepSort 中最大的特点是加入外观信息,借用了 ReID 领域模型来提取特征,减少了 ID switch 的次数。整体流程图如下: 图片来自知乎 Harlek 可以看出,Deep SORT 算法在 SORT 算法的基础上增加了级联匹配 (Matching Cascade)+ 新轨迹的确认 (confirmed)。总体流程就是: https://my.oschina.net/u/4580321/blog/4358376
16.粒子群算法设想这样一个场景:一群鸟在随机的搜索食物。在这个区域里只有一块食物,所有的鸟都不知道食物在哪。但是它们知道自己当前的位置距离食物还有多远。那么找到食物的最优策略是什么?最简单有效的就是搜寻目前离食物最近的鸟的周围区域。 算法实现 算法流程图 https://www.jianshu.com/p/9941b6f2225f
17.攻击判定流程研究:瀑布算法圆桌算法混合算法解析上述实例若采用圆桌算法,则会用一次掷骰判定该次攻击的结果。 圆桌算法流程图 圆桌算法的操作步骤可以归纳为: (1)攻方角色的命中率决定圆桌桌面的大小 (2)将各个事件状态按优先级依次放上桌面,直至所有的事件均放置完或桌面被填满 (3)若桌面还未填满,则用普通命中填满空桌面 https://www.gameres.com/677620.html