Blogger Template by Blogcrowds.

java web 开发学习(一)

年前一段时间有个可能的项目,所以认真学习了一把java的服务端开发,同时配置好了tomcat服务器,通过服务器的配置可以搭建一个简单的web应用,最后项目没有音讯了,还是不想让自己学的东西就这么荒废了,同时也是为了以后同类的事情做起来轻松一点,另外更重要的是马上就面临着找工作的压力,所以多学习一些东西总是多一些找工作的技能吧。所以自己默默的展开了这个项目,这个项目的主要目标是为测绘相关部门开发一个OA系统,由于测绘相关所以要有地图应用,由于是简单的OA系统所以只实现了简单的功能,在最开始的时候面临的主要是一些技术问题,如网页的搭建,jsp代码怎么写,css怎么做,网页布局怎么做等等问题,当然对于这种小规模的系统来说前端和后端都是我自己做,所以也不存在前端和后端的沟通之类的问题,但是技术问题也是一个让我很困扰的问题,因为前端技术多的数不胜数,各种技术之间相似行高,容易混淆,另外各种不同的技术有互有优缺点,在实际应用中需要根据需要去灵活考虑使用哪些技术,当然对于我一个新手来说这些都不是什么问题,因为这个系统十分简单,同时由于学习成本的问题,我考虑只使用java web+jsp进行处理,选择这种方式的主要原因在于我对java有一定的了解,在服务端进行过servlet的开发,当然我也使用过Node .js进行过服务器的搭建,但是jsp在服务端的应用总是觉得比较奇怪。当然,对于一个Web应用来说区分前后端是一件比较复杂的工作,也是比较麻烦的,在项目开始之前我试图尽力将前后端区分清楚,但是还是没有能够很好的进行区分,这其中存在如下问题:
1.我想把所有数据库相关操作都放在后端,前端只获取数据进行数据的展示
2.在前端获取数据之如何通过后端写入数据库中,我的想法是通过数据组织为jason格式然后交给后台解析,并写回数据库中
3.前端后端完全分开之后前端数据的处理结果需要从后端获取的数据才能展示。这个问题跟小鹏哥讨论过几次。
另外一个问题在整个界面的设计和处理流程,关于这个问题,由于以前做了需求分析所以也并不是太困难,但是界面的设计对我来说是一个大问题,即使在使用Boostrap框架的情况下,设计一个饱满,同时看起来比较舒服的界面也需要大量的工作,以上这些问题是在开展这个项目之前遇到的一些问题,当项目开始之后所面对的就是一些比较细节的问题了,当然项目只是做了一个开始,在这个开始过程中首先有几个主页,登录界面等界面的设计,而主页是主要功能页面,所有功能都是通过主页进行跳转,同时利用Boostarp的栅格布局做了主页界面如下:
image
主要功能有:数据查询;数据管理;数据发布和数据上传与下载,界面做的比较粗糙不够紧凑但是各种功能还是比较明确。同时导航栏主要用于查看通知,会议情况,日程安排,地图和帮助,界面做的比较松散,但是用于web端看起来还是那么回事,如果用于android端就显得不那么好看了,当美化的处理是必须要做的,但是这个已经更目前要做的无关了,以后有机会可以做到更好。

Landsat ETM+ 数据缺失修复

对于Landsat ETM+缺失修复的方法主要分为三种,1.直接通过影像进行修复;2.通过多时相的Landsat数据进行修复;3.通过其他数据进行辅助修复的方法。
基于多时相的影像修复方法:
对于多时相的影像,即使同一传感器对同一位置进行成像其反射率也是不同的。这些差异可以被分为三类:1.由于观测条件引起的差异;2.由于对象时相变化引起的差异;3.由于目标的突然转换引起的差异;对于早期的研究来说,多时相的影像之间的关系可以假设为线性关系。

image
上图为不同时相的ETM+影像,从上图可以看出,对于ETM+影像,对于不同时相的影像分类散点图存在比较明显的线性关系,据此可以使用多时相影像对缺失数据采用如下模型进行校正。
Eq(1)

image
其中image分别为缺失位置影像和填补位置其他时相的影像,a和b为回归系数。考虑到在每一个波段光谱值可能有比较大的差异,因此使用单一影像对进行校正存在一定的问题,本文使用一种自适应的过程处理相似影像,对于每一个波段的目标像素,第i个相似影像必须满足如下要求:
Eq(2)
image
fi和ft是相似和目标向原在修复影像中的值,T为自适应阈值。
Eq(3)
image
其中u为局部区域均值,在文章中使用5*5大小的窗口。
Eq(4)
image
xi,yi表示相似像元的位置,xt,yt表示目标像元的位置,a为惩罚变量,防止D值为0,前面一段表示光谱距离,后一段表示空间距离,
Eq(5)
image
对于每一个选择的相似像元进行归一化,得到归一化权重。
Eq(6)
image
上面的方程就是求回归系数,通过权值求带权的回归系数方程。对于特别微小的目标,由于只有少量的相似点被找到,因此在校正过程中只有乘性系数没有加性系数。
无参考影像的修复方法:
由于数据缺失间隙大小存在一定的差异,因此存在没有足够影像能够填补缺失的情况,在这样的情况下需要使用无参考的影像进行校正,
Eq(7)
image
image
E(p)是代价函数,image分别表示输入的参考影像和期望的参考影像,R表示规则模型,lamda表示规则化变量,Q是一个对角矩阵,该矩阵表示不同像元位置的可靠信息,矩阵大小和影像尺寸大小相同。
校正结果的比较:
image
结果评价:
1.皮尔逊相关系数,2.实验结果和预测结果的一致性评价 ,3.全局影像质量指数评价指标,4.评价光谱重建效果,使用均值光谱角进行评价,5.为了评价重建数据进行后续应用的能力,采用土地利用覆盖进行分类评价,使用NDVI对数据应用进行评价。
参考文献:
【1】Zeng C, Shen H, Zhang L. Recovering missing pixels for Landsat ETM+ SLC-off imagery using multi-temporal regression analysis and a regularization method[J]. Remote Sensing of Environment, 2013, 131: 182-194.

通过中巴资源卫星作为辅助修复ETM+热红外影像
中巴资源卫星和Lnadsat ETM+数据相似性分析:
1.波段设置的相似性;2.数据获取时间的相似性;
image
AWLHM方法作为主要备选方法主要是因为此方法的实用性和可靠性,虽然此方法具有比较高的计算复杂性。
AWLHM数据修复方法:
假设不同时相的两景影像之间存在着线性关系,据此有学者提出了基于全局影像线性直方图匹配和局部线性直方图匹配的校正方法,此类方法假设两景影像之间存在线性相关,对于数据缺失地区,采用有数据的影像通过线性匹配可以获取数据缺失位置的数据。
Eq(8)
image
Xf为DN被参考影像的DN值或反射率,ZE为数据缺失位置影像的估计值,A是校正系数矩阵。A可以通过线性拟合或者是简单的统计方法获取。同时Eq(8)中A的求解可以描述为下式:
Eq(9)
image
Xc为正常懂得参考影像像素值,Zc为正常影像像素值
如果使用全局数据进行评价求解A值则为GLHM方法,如果使用局部数据进行评价求取A值,则为LHHM方法,AWLHM方法使用更小的自适应的移动窗口进行求解,由于自适应的移动窗口能够更加精确的进行求解,因此AWLHM作为主要的方法。
修正的AWLHM方法:
由于AWLHM方法是一个波段一个波段对应的,由上表可知对于Landsat的对应波段CBERS数据不是所有波段都能找到对应,由于本文研究的热红外波段在CBERS数据中没有对应波段,因此需要对AWLHM方法进行改进。由于热红外数据和可见近红外数据存在一定的关系,通过这些关系可以找到热红外谱段和可见近红外谱段的关系
Eq(10)
image
下图为改进的AWLHM方法进行数据修复示意图:
image
上图的具体过程描述如下:首先根据选定的窗口大小采用最小二乘的方法求解参数,使用正确的像元,如果正确的像元在选定的窗口中数目比较少,则增加窗口的大小直到窗口中正确像元个数足够对参数进行求解则对窗口中的数据采用最小二乘进行求解。当窗口扩大到最大的给定窗口阈值依然不能满足要求时就使用所有的正确像素而不是所有像素。
实验验证:
实验验证主要是比较估计像元和真实像元的值采用如下统计量进行评价:
Eq(11)
image
1.相似性误差;2.均值误差;3.残差
Chen F, Tang L, Wang C, et al. Recovering of the thermal band of Landsat 7 SLC-off ETM+ image using CBERS as auxiliary data[J]. Advances in Space Research, 2011, 48(6): 1086-1093.


ETM+影像修复评价方法:
对于ETM+影像的修复,目前已经发展了许多方法,对于这些校正方法,如何去进行评价已经是一个重要的问题,目前使用的比较多的修复效果评价方法有:1.目视评价,目前目视评价是使用得最多的影像评价方法;2.DN值的绝对均值误差;3.基于线性回归的评价方法;4.分类后的精度评价方法;5.采用参考影像对影像进行修复的方法采用修正后影像方法和参考影像的对比;6.使用NDVI进行比较
然而以上的方法都集中于影像DN值,或者定性的结果如使用土地覆盖的影像分类方法,在评价定量的变量,如LAI时误差的估计就比较困难,特别是这些变量每天的变化都比较大的时候,比如土壤湿度,蒸散作用。
本文工作主要在于提出一个使用修复的ETM+影像进行定量变量估计的误差评价方法。
由于数据修补出现的误差在评价过程中使用两个指标确定:1.均值;2.方差,比较ETM+修复影像和数据填补之前的影像。均值的差异和方法的差异
Eq(12)
image
L7GF为Landsat修复后的影像,L7为缺失影像,ref为参考影像,参考影像为同时相影像或相差一年同时相影像。
两种填补数据缺失的方法被评价,1.影像融合的方法,影像融合的方法基于影像拼接数据,此种方法需要另一景辅助数据,辅助影像必须光谱和时相都与待修复影像相似,通过直方图匹配的方法减小光谱误差;2.使用反距离加权差值方法,使用差值方法进行影像修复不需要使用辅助影像,但是会丢失空间信息。
LAI评价:
评价LAI的模型是基于MODIS数据查找表,这个查找表简历了一系列NDVI和LAI之间的关系
ETa的评价:
ETA为区域蒸散,使用ITA-MyWater算法,这些算法来评价区域蒸散都是基于表面能量平衡算法的应用。
SMrz的评价:
在ITA-MyWater算法中,根部的土壤湿度通过全局经验方法进行估计,将Landsat数据作为输入数据,相关的土壤湿度于EF是一个指数关系。
评价结果:
image
Alexandridis T K, Cherif I, Kalogeropoulos C, et al. Rapid error assessment for quantitative estimations from Landsat 7 gap-filled images[J]. Remote Sensing Letters, 2013, 4(9): 920-928.

不知不觉

今天又瞎忙活了一天,也不知在忙活着些什么,感觉总是在混着日子,还不如去找工作了。想着那些曾经的好友们一个个或是结婚生子,或是准备结婚生子,总有一种恍若隔世的感觉。其实想想自己也已经二十四五了,在这个年纪如果不是因为还在读硕士也差不多到了要结婚生子的年纪了,所以朋友一个个都准备结婚生子其实也是可以理解的。可是总是感觉有那么一些迷茫,有种时光太匆匆的感觉,有人说为什么读了很多书也没有办法过好自己的人生,其实这并不能怪读书,人生是经历,慢慢旅程只靠看别人去过怎么行呢。
现在已经到四月底了武汉的天气总是这么琢磨不定,今天到了二十八九度,明天可能骤降十几度,面对这么难以捉摸的天气
也只能摇头叹息了,甘甜告诉我五月底就要结婚了,知道这个消息的时候有点懵,然后就是惊讶,然后想想也就明白了,其实我们总是要结婚生子然后安安稳稳的度过自己的一生的,在这一生所经历的劳苦愁烦,功名利禄不过是过眼云烟,所以才有大智慧的人看透了生命而去追求永恒的真理。理论上我应该是一个基督教徒,可是我却不是那么虔诚的基督徒,我只是一个自私的享乐主义者,我认为若是一切追求不是为了满足自己都是没有意义的,好吧,这也许有一些偏激了,但是确实是我的真是想法,我认为在对自己提高有意义的事情上付出再多也是值得的。
实验室里抱怨不少,不管是关于老板还是关于我们,似乎都有许多不满,可是这对于我来说似乎是一些不太重要的事情,要是我这样说一定又有人要狠狠的批评我不上进了,其实并没有。我认为自己并没有决心和毅力去从事研究工作,所以会把重心放在锻炼找工作的技能上,想想其实自己压力并没有多大,我不是一个有雄心壮志的人,只想简单的过完自己一生,简单的工作,工作之余能够做些自己喜欢的事情就好了。
以前的我也会担心经济形势的好坏,担心房价的起落,可是老妈一句话让我释怀了,何必担心呢,家里总会有你的一席之地的,想想也就豁然开朗了。是呀,何必担心呢,家里总是会有我的一席之地的,所以不管混的是好是坏总是有家可以回的,当然我并不认为自己会比别人差。
好了说了这么久自己也要说说别人了,其实别人也就这么几个,朋友们其实并不多,结婚买房也罢,生小孩儿也罢,总是一件好事,当然,对于甘甜我还是衷心的祝福她能够幸福,希望每一桩婚姻都是上帝立下的约定,希望能够在夕阳西下的时候依然挽手吧。

贝塞尔曲线

背景:
相信很多同学都知道“贝塞尔曲线”这个词,我们在很多地方都能经常看到。但是,可能并不是每位同学都清楚地知道,到底什么是“贝塞尔曲线”,又是什么特点让它有这么高的知名度。
贝塞尔曲线的数学基础是早在 1912 年就广为人知的伯恩斯坦多项式。但直到 1959 年,当时就职于雪铁龙的法国数学家 Paul de Casteljau 才开始对它进行图形化应用的尝试,并提出了一种数值稳定的 de Casteljau 算法。然而贝塞尔曲线的得名,却是由于 1962 年另一位就职于雷诺的法国工程师 Pierre Bézier 的广泛宣传。他使用这种只需要很少的控制点就能够生成复杂平滑曲线的方法,来辅助汽车车体的工业设计。正是因为控制简便却具有极强的描述能力,贝塞尔曲线在工业设计领域迅速得到了广泛的应用。不仅如此,在计算机图形学领域,尤其是矢量图形学,贝塞尔曲线也占有重要的地位。今天我们最常见的一些矢量绘图软件,如 Flash、Illustrator、CorelDraw 等,无一例外都提供了绘制贝塞尔曲线的功能。甚至像 Photoshop 这样的位图编辑软件,也把贝塞尔曲线作为仅有的矢量绘制工具(钢笔工具)包含其中。
形式:
1.线性贝塞尔曲线:

image
P0P1为给定点,t的范围为0-1,则线性贝塞尔曲线实际上就是一条直线
2.二次贝塞尔曲线:
二次贝塞尔曲线是给出三个点,得到的贝塞尔曲线,贝塞尔曲线的函数为:
image

从以上t的变化可以看出,二次贝塞尔曲线就是一条抛物线
3.三次贝塞尔曲线:
image
三次贝塞尔曲线的过程为:曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1P2;这两个点只是在那里提供方向资讯。P0P1之间的间距,决定了曲线在转而趋进P2之前,走向P1方向的“长度有多长”。
4.N次贝塞尔曲线
由以上公式可以推出,对于一般化的贝塞尔曲线,有如下形式:
image
贝塞尔曲线的性质:
贝塞尔曲线的构造很简单,但是却有一些十分有趣的性质,对于一个贝塞尔曲线来说,如:贝塞尔曲线是光滑曲线。贝塞尔曲线还有一个十分重要的性质:起始线和第二个点决定了点的起始方向,倒数第二个点和最后一个点确定了曲线的出射方向,使用这一特性在机器人足球,避障等算法中都有大量应用:
下图可以很好的帮助大家理解贝塞尔曲线(图片来自wiki:https://zh.wikipedia.org/wiki/%E8%B2%9D%E8%8C%B2%E6%9B%B2%E7%B7%9A#.E8.A1.93.E8.AA.9E
240px-Bézier_3_big240px-Bézier_4_big240px-BezierCurve
贝塞尔曲线的Opencv实现:
//opencv贝塞尔曲线工具
const int WW_MAX_MARK_COUNT = 40; //最大40个控制点
static int mark_count = 4;
static int conner_pt_index = -1;
static CvPoint3D32f Control_pts[WW_MAX_MARK_COUNT];
static IplImage *image = NULL; //原始图像
static bool is_showControlLines = true;
class BezierCurve
{
private:
    // 两个向量相加,p=p+q
    static CvPoint3D32f BezierCurve_PointAdd(CvPoint3D32f p, CvPoint3D32f q) {
        p.x += q.x;        p.y += q.y;        p.z += q.z;
        return p;
    }
    // 向量和标量相乘p=c*p
    static CvPoint3D32f BezierCurve_PointTimes(float c, CvPoint3D32f p) {
        p.x *= c;    p.y *= c;    p.z *= c;
        return p;
    }
    // 计算贝塞尔方程的值
    // 变量u的范围在0-1之间
    //P1*t^3 + P2*3*t^2*(1-t) + P3*3*t*(1-t)^2 + P4*(1-t)^3 = Pnew
    static CvPoint3D32f BezierCurve_Bernstein(float u, CvPoint3D32f *p) {
        CvPoint3D32f    a, b, c, d, r;
        a = BezierCurve_PointTimes(pow(u, 3), p[0]);
        b = BezierCurve_PointTimes(3 * pow(u, 2)*(1 - u), p[1]);
        c = BezierCurve_PointTimes(3 * u*pow((1 - u), 2), p[2]);
        d = BezierCurve_PointTimes(pow((1 - u), 3), p[3]);
        r = BezierCurve_PointAdd(BezierCurve_PointAdd(a, b), BezierCurve_PointAdd(c, d));
        return r;
    }
    //画控制线
    static void BezierCurve_DrawControlLine(CvPoint3D32f *p) {
        CvPoint pc[4];
        for (int i = 0; i<4; i++)
        {
            pc[i].x = (int)p[i].x;
            pc[i].y = (int)p[i].y;
        }
        cvLine(image, pc[0], pc[1], CV_RGB(0, 0, 255), 1, CV_AA, 0);
        cvLine(image, pc[2], pc[3], CV_RGB(0, 0, 255), 1, CV_AA, 0);
    }
    //得到最近Control_pts的index
    static int BezierCurve_GetNearPointIndex(CvPoint mouse_pt)
    {
        CvPoint pt;
        for (int i = 0; i<mark_count; i++)
        {
            pt.x = mouse_pt.x - (int)Control_pts[i].x;
            pt.y = mouse_pt.y - (int)Control_pts[i].y;
            float distance = sqrt((float)(pt.x*pt.x + pt.y*pt.y));
            if (distance<10) return i;
        }
        return -1;
    }
    static void BezierCurve_On_mouse(int event, int x, int y, int flags, void *param)
    {
        if (event == CV_EVENT_LBUTTONDOWN)
        {
            CvPoint pt = cvPoint(x, y);
            //cout<<x<<","<<y<<endl;
            if (conner_pt_index >-1)
                conner_pt_index = -1;
            else
            {
                conner_pt_index = BezierCurve_GetNearPointIndex(pt);
                //添加新的控制点
                if (conner_pt_index == -1)
                {
                    if (mark_count <= (WW_MAX_MARK_COUNT - 1))
                    {
                        Control_pts[mark_count].x = (float)pt.x;
                        Control_pts[mark_count].y = (float)pt.y;
                        Control_pts[mark_count].z = 0;
                        mark_count++;
                    }
                }
            }
        }
        else if (event == CV_EVENT_MOUSEMOVE) //修改控制点坐标
        {
            if (conner_pt_index >-1)
            {
                Control_pts[conner_pt_index].x = (float)x;
                Control_pts[conner_pt_index].y = (float)y;
            }
        }
    };
public:
    //绘制贝塞尔曲线
    void BezierCurve_BezierDraw();
};

void BezierCurve::BezierCurve_BezierDraw()
{
    CvSize image_sz = cvSize(1000, 1000);
    image = cvCreateImage(image_sz, 8, 3);
    cvNamedWindow("Win", 0);
    cvSetMouseCallback("Win", &BezierCurve::BezierCurve_On_mouse, 0);
    cvResizeWindow("Win", 500, 500);
    printf("==============   Bezier curve DEMO  ==============\n");
    printf(" \n");
    printf("1.use mouse to click control point (red) to select a control point\n");
    printf("2.use mouse to modify control point");
    printf("3.click mouse on somewhere to add a control point,add three points for add a new curve\n");
    printf("4.use 'W','S' to add precision or reduce precision.\n");
    printf("5.press 'Z' to show control points.\n");
    printf("===press ESC to exit===\n");
    //初始化四个控制点
    Control_pts[0].x = 200;
    Control_pts[0].y = 200;
    Control_pts[0].z = 0;
    Control_pts[1].x = 300;
    Control_pts[1].y = 500;
    Control_pts[1].z = 0;
    Control_pts[2].x = 400;
    Control_pts[2].y = 560;
    Control_pts[2].z = 0;
    Control_pts[3].x = 500;
    Control_pts[3].y = 100;
    Control_pts[3].z = 0;
    int divs = 50; //控制精细度
    for (;;)
    {
        CvPoint pt_now, pt_pre;
        cvZero(image);

        //绘制控制点
        if (is_showControlLines)
        {
            for (int i = 0; i<mark_count; i++)
            {
                CvPoint ptc;
                ptc.x = (int)Control_pts[i].x;
                ptc.y = (int)Control_pts[i].y;
                cvCircle(image, ptc, 4, CV_RGB(255, 0, 0), 1, CV_AA, 0);
            }
        }
        //绘制Bezier曲线
        CvPoint3D32f *pControls = Control_pts;
        for (int j = 0; j<mark_count - 3; j += 3)
        {
            for (int i = 0; i <= divs; i++)
            {
                float u = (float)i / divs;
                CvPoint3D32f newPt = BezierCurve_Bernstein(u, pControls);
                pt_now.x = (int)newPt.x;
                pt_now.y = (int)newPt.y;
                if (i>0)    cvLine(image, pt_now, pt_pre, CV_RGB(230, 255, 0), 2, CV_AA, 0);
                pt_pre = pt_now;
            }
            //画控制线
            if (is_showControlLines)BezierCurve_DrawControlLine(pControls);
            pControls += 3;
        }
        cvShowImage("Win", image);
        int keyCode = cvWaitKey(20);
        if (keyCode == 27) break;
        if (keyCode == 'w' || keyCode == 'W') divs += 2;
        if (keyCode == 's' || keyCode == 'S') divs -= 2;
        if (keyCode == 'z' || keyCode == 'Z') is_showControlLines = is_showControlLines ^ 1;
        //cout<<"precision : "<<divs<<endl;
    }
    return ;
}
以上为贝塞尔曲线的Opencv实现,实现了根据输入点绘制贝塞尔曲线和适时调整贝塞尔曲线的功能,实现结果如图:
image
然而实际上,对于应用来说,平面贝塞尔曲线的应用并不广泛,在各种设计,工业应用中使用得比较多的是贝塞尔曲面,通过贝塞尔曲面模拟光滑曲面,进行曲面设计有很大的用图

非均匀性校正笔记(三)

校正方法的假设为:垂直噪声在空间上表现出了高频噪声,相对于背景信息来说。
引言:
对于高光谱遥感影像传感器,主要存在两种类型的噪声,第一种为随机噪声,随机噪声是随着时间的变化而变化的,随机噪声的存在影响影像的信噪比。第二种噪声是高光谱影像处理周期性的局部确定模式的影响。
高光谱影像传感器一般为线阵列推扫式传感器:
image
成像系统包括一个长的和一个窄的狭缝,狭缝的作用是限制入射光与一个传感器主轴对齐 。然后平行光通过一个分光装置,如棱镜或者光栅。
CHRIS传感器的光谱范围为:400-1050nm,空间分辨率为17-34m,空间分辨率取决于数据获取模式。CHRIS传感器的辐射响应取决于两个宠妾的部分:1.光学系统的响应;2.CCD传感器的响应。实际上CCD并不是对于温度和时间稳定的,因此CCD的响应差异会导致影像上出现条带噪声,这些噪声是需要被校正的。由于本文提出的方法是基于影像直接计算相对校正系数的方法,因此属于基于影像的方法,基于控件固定值的校正方法并不适用于CHRIS传感器,因为CHRIS传感器空间分辨率比较低,且传感器噪声模式依赖于传感器温度变化。
方法:
传感器接收到的辐亮度和传感器响应的DN值之间存在如下关系:
Eq(1)

image
image为从入瞳处辐亮度,image为传感器的DN值,image为CCD传感器响应,image包含所有增益噪声和随机噪声,如果传感器是正确工作,则空间和光谱维是独立的,因此空间和光谱的处理可以分开进行,这样光学系统响应可以表达为:
Eq(2)
image
其中image为狭缝的响应,image为传感器的光谱响应传感器的光谱响应定义了中心波长和半波宽,由以上信息可知,狭缝的响应对于各个成像波段(对于面阵CCD来说是各个行)是固定的,且对于每个像元是独立的。
假设光谱响应是平滑的,则对于Eq(1)传感器在焦平面上的辐亮度响应可以简化为:
Eq(3)
image
image表示的是空间响应的贡献,image表示的是光谱响应的贡献,则传感器输入的辐亮度和传感器的DN值之间的关系可以表示为:
Eq(4)
image
绝大部分传感器允许暗像元的精确校正,因此校正后image影响可以被忽略。另外由于CHRIS影像可以进行比较准确的光谱校正,由于光谱校正比较准确了因此可以去除对于光谱响应的依赖。则Eq(4)可以被简化为:
Eq(5)
image
VS校正方法的过程结合两种非均匀性空间响应,光谱波段b通过同一行的CCD探元获取,每一个影像像素具有不同的传感器响应和不同的光谱狭缝响应(对于一个光谱波段来说,传感器响应和光谱狭缝影响都是一致的)。因此乘性噪声的结果在每一个传感器列上是一个固定值,因此在影像上表现为一条垂直直线。
image
坏像元校正:
由于参数估计和校正是直接从影像中获取的参数,因此坏像元对于校正效果的影响比较大,,所以在进行非均匀性校正之前必须首先进行坏像元检测,和坏像元校正,在进行校正的过程中将像元分为三类,分别为:1.有用像元;2.坏像元;3.饱和像元。
1.坏像元检测:
进行坏像元检测步骤:
1.假设在同一行上的邻接像元之间的差异比较小,一个正确像元和它邻接像元的差异应该小于这个像元与它距离两列像元的差异,除非临近像元是坏像元,这个假设对于所有行上奇数像元都是适用的。对于可能是坏像元的奇数像元,他的与它周围确定是正确的偶数像元的误差会比较大,如果坏像元存在。
Eq(6)
image
对于确定是正确的偶数像元,它与下一个偶数像元的差值的平方应该在各个方向上具有比较低的差异。
Eq(7)
image
2.狭缝表面和vs的影响在不同的连续列是不同的,因此使用中值获取整个行上的像元是比较稳定的。
3.最后将所有的邻域差异大于百分之五十的像素认为是坏像元:image
2.坏像元修复:
检测到了坏像元之后就需要对坏像元进行修复,坏像元修复通常是通过均值滤波得到的 ,为了避免空域滤波在边缘或者是非匀质区域造成的细节模糊的现象,采用如下方法计算权重。
Eq(8)
image
对于权重矩阵进行调整,对于不是给定邻域则赋值为0,image,最后可以计算坏像元校正后的值为:
Eq(9)
image
校正的方式有两邻域,四邻域和八邻域三种方式,分别为:
image
垂直条带校正:
1.垂直条带噪声校正方法:
image
【1】A. Barducci and I. Pippi, “Analysis and rejection of systematic disturbances in hyperspectral remotely sensed images of the Earth,” Appl. Opt. 40, 1464–1477 (2001).
【2】J. Settle and M. Cutter, “HDFclean V2. A program for reprocessing images captured by the CHRIS hyper-spectral imager” (2005), http://earth.esa.int/proba/.
上图是以上两篇论文中进行垂直条带校正的方法
图a校正步骤:
A.每一个波段沿轨方向的线均值得到沿轨方向均值光谱:
Eq(10)
image
B.使用移动窗口低通滤波方法进行平滑处理,通过高斯权重的卷积进行处理image,通过高斯卷积进行平滑
C.由于image包含主要是表面的贡献,vs因素可以通过比值方法获取校正系数:image,因此影像的校正可以通过以下方法实现:image
图b校正步骤:
A.对每一个波段求取沿轨方向的线均值,得到一条各个像元的响应曲线。
B.对均值曲线取对数处理,image
C.对于取对数后的曲线进行高斯低通滤波
D.获取曲线中的高频变量,高频变量的获取方法为:image
E.垂直条带噪声因素对的影像校正系数获取是通过计算反对数得到的:image

理论上当轮廓线经过滤波处理之后结果比较差,因为乘性噪声影响比较大,滤波相当于在频率域进行卷积运算。
2.稳定的垂直条带噪声校正方法
该校正方法同样基于垂直的条带噪声的空间分布频率比表面辐亮度的空间频率要高。此方法使用两种不同的方法模拟噪声并抑制表面辐亮度的影响。1.避免由于表面辐亮度引起的高频组份的变化;2.减去空间低频的成分。但是空间高频组份和由于条带噪声引起的高频组份混杂在一起难以去除,在此情况下就需要利用光谱信息,通过光谱信息得到里面覆盖的变化。
2.1空间光谱边缘检测
文章提出了一个基于二维数据的空间光谱卷积滤波操作,滤波的操作核image,在滤波核中值为-1的点为参考像元,然后求光谱距离和卷积模板乘积的和,光谱距离使用的是光谱角距离,因为使用光谱角距离不会被垂直条带中的狭缝现象所影响。采用经验迭代过程对于每一景影像获取最佳阈值。
2.2垂直条带噪声滤除
计算得到积分断面线之后一个关键的问题在于如何移除边缘像素,校正方法如下:

image







A.首先使用对数变换,将乘性的噪声转换为加性的噪声
B.将高光谱数据立方体转换穿轨方向空间一阶导数域,这个处理相当于进行高通滤波操作 
Eq(11)
image
C.除去穿轨方向上了边界像素以外的均值线,由于是除去边界像素的均值线,因此在一阶导光谱进行操作可以避免边缘像素的影响。
D.对穿轨方向的辐亮度域进行积分操作
E.使用低通滤波操作对D过程中的积分进行滤波操作
F.通过减去低频成分信息获取高频分量:image,在积分过程中引入的误差都在一个常量中,然而因为垂直条带的校正对于每个波段是独立的,在对数域常量应该是0均值,因为值增益接近于1在辐亮度域。因此偏移可以通过减去均值校正得到image
G.最后通过求指数变换求取垂直条带校正系数image
2.3多角度垂直条带噪声校正
由于传感获取能够获取序列影像,对于同一地区多景遥感应该是通过不同角度数据获取的,在不同角度下成像条带也有不同,通过多角度影像序列可以对影像进行校正。
数据介绍:
image
数据分为真实数据和合成数据,真实数据为CHRIS影像数据,合成数据通过真实影像生成,合成影像生成真实影像的过程假设每一个均值地物都是正太分布,且使用真实标记的区域计算高斯模型的参数,通过参数和光谱因袭获取高斯混合模型作为先验信息,合成影像的生成步骤为:1.获取每一类的像元树,2.对每一类的区域进行纹理填充,通过亮度信息对每一个类的光谱进行压缩。
实验结果:
image
使用模拟影像噪声去除的精度,因为模拟影像的噪声是已知的
image
上表表示使用不同评价方法比较真实和计算得到的校正系数,结果表明采用适当的评价方法能够获取比较好的结果,同时为了更好的衡量本文提出的方法的表现,上表也显示了RMSE的变化
image            image
image
温度对于校正的影响:
image
上图表示温度对于校正的影像,图a的曲线为不同温度性爱垂直条带的校正系数,都是在成像模式2下获取的数据,图b为两种模式下,不同温度传下CCD列的水平偏移,图C为在不同温度下垂直条带噪声校正的增益量。
结论与总结
文章提出了一种新的校正高光谱影像条带噪声和坏像元的方法,首先使用空间和光谱领域信息获取异常像元,尽管坏像元校正只是对图像起到了美化作用,但是校正这些坏像元依然是有必要的,因为最后在进行条带噪声校正的过程中,这些坏像元可能会对校正结果有比较大的影响。尽管对于垂直条带噪声的校正有许多方法,但是这些方法都是假设影像表面不包含与噪声空间频率相同阶数的空间结构信息,这样通过校正会噪声影像细节出现模糊。本文提出了一种基于光谱域信息约束的处理方法排除空间高频成分对去噪的影响。另外本文使用自适应的低通滤波截至频率,得到比较好的校正效果。

较新的博文 较旧的博文 主页