本文介绍在ENVI软件中,手动划定地面控制点从而实现栅格图像相互间地理配准的方法;其中,所用软件版本为ENVI Classic 5.3 (64-bit)。
首先,在软件中同时打开两景需要进行地理配准的栅格图像,开启“Link Displays”后在其中一幅图像中随机点击;此时可以看到两幅图的同一位置并不是同样的地物,而是具有一定空间位置差异,如下图所示。
接下来,我们开始进行地理配准的操作。由于我们的两景图像是同一遥感影像分幅产品在不同时间的图像,因此两景图像自身都是具有地理信息的,我们就选择“Map”→“Registration”→“Select GCPs: Image to Image”;如果其中一景图像有地理信息而另一景没有(例如一景遥感影像与一幅.jpg
格式的图层),就需要选择“Select GCPs: Image to Map”。
在弹出的窗口中选择“Base Image”与“Warp Image”,亦即基准图层与需要变换的图层,在这里我们分别选中前述两景图像即可,具体二者谁是“Base Image”谁是“Warp Image”并没有强制要求;但是一定要牢记这里的设置,在后期还会用到。
接下来,就弹出了地面控制点(GCP)选择窗口,此时就可以在图像显示区域中选择GCP了。
此时需要注意,将前述两景图像开启的“Link Displays”关闭后才可以选择GCP。
选择方法其实也很简单:首先在第一景图像中选择一个便于区分方位的点,随后在第二景图像中找到这一点;如果左下角与上方的图像范围较大、不好辨认,可以通过右下角范围最小的图像加以精准确定。两景图像的点选择好后,选择“Add Point”即可。
点击“Show List”,可以看到当前已经找到的GCP。
弹出的窗口中包含GCP的各类信息。
如果大家感觉GCP在图中显示得不是很明显,可以通过“Set Point Colors”进行设置。
我在这里设置如下:
多次重复前述寻找GCP的过程,从而找到更多的GCP。
这里需要注意,一般地将“Degree”设置为2
会有比较好的效果(这里“Degree”指的是用于计算RMS误差的次数或阶数,2
就指的是用二次多项式来计算误差);进一步的,RMS误差就是下图中“RMS Error”,其表示地理配准过程中,控制点原始位置与转换后控制点新位置间的像素差值,因此其越小越好。
在找到几个GCP后,我们就可以用“Predict”进行辅助操作:在第一景图像中找到第一个点后,通过“Predict”就可以自动定位到第二景图像的对应位置附近,随后手动微调即可。
为了方便,我们可以直接勾选“Auto Predict”。
此外,在GCP列表中,选中某一行GCP后,可以通过“Goto”实现直达这一GCP位置的功能。
对于一些暂且不知道是否较好的GCP,我们可以通过“On/Off”将其暂时取消(没错,不是删除,是暂时不加入该点)。
而对于确定不需要的点,我们可以直接将其删除。
选好GCP后,可以选择将GCP列表导出为文本格式:
配置好相关信息即可保存。
上述保存GCP列表的过程是可选的,而接下来的操作则是必须的——我们需要保存GCP(这里就不是上面的那个GCP列表了,而是各个GCP的信息)为.pts
格式。
配置好相关信息即可保存。
保存好上述.pts
格式的GCP信息后,之后如果我们需要再次修改对应图层的GCP,直接导入即可。
接下来,即可开始地理配准。选择“Map”→“Registration”→“Warp from GCPs: Image to Image”。
找到保存的.pts
格式的GCP信息文件并选中。
在接下来的“Input Warp Image”窗口和“Input Base Image”窗口中,要按照前述选择“Base Image”与“Warp Image”时的设置进行选择——这就是为什么前面说需要牢记“Base Image”与“Warp Image”设置的原因。
随后,对地理配准的算法、参数等加以配置,并配置输出路径与文件名。
将新生成的配准后图像同样在ENVI中打开(如下所示最右侧图像为地理配准后图像),用“Link Displays”进行随机选择,可以看到最右侧的图与最左侧的基准图像空间位置几乎一致,说明大功告成。
iOSAPP审核比较严格,难免会出现被拒绝的情况,需要根据苹果反馈的问题修改后重新打包上传审核!1、登录itunesconnect、https://itunesconnect.apple.com进入被拒绝的APP页面点击未解决的iOS问题,进入查看原因。2、复制翻译下具体被拒绝的原因,查看反馈的审核截图,根据问题修改app重新打包上传。也可以直接在回复那里申诉,可以直接写中文。3、再点击下活动那查看你已上传的版本号,修改打包的时候要比之前的高,比如现在2.0.0,可以修改为2.1或者2.0.1.4、修改打包好后,重新上传ipa文件。点击被1.0拒绝那,选择构建版本选项,移动鼠标到之前选择的版本那,点击删除。ipa上传教程5、选择修改后新上传的版本,点击完成。6、然后右上角点击存储。7、存储好、然后点击提交以供审核。8、这里出现的信息根据app的类型不同、有不同的选项、根据自己的app的情况选择一般选择否。然后提交、显示为正在等待审核、然后等待苹果再次审核。9、如果变成可供销售,恭喜你~上架成功了,如果还是被拒绝,点击查看问题,根据反馈修改再重新打包上传提交审核。第2页/(共2页)通常打
MySQL建表出现如下错误(5.7)ERROR1071(42000):Specifiedkeywastoolong;maxkeylengthis3072bytes查看官网内容得知:Ifinnodb_large_prefixisenabled(thedefault),theindexkeyprefixlimitis3072bytesforInnoDBtablesthatusetheDYNAMICorCOMPRESSEDrowformat.Ifinnodb_large_prefixisdisabled,theindexkeyprefixlimitis767bytesfortablesofanyrowformat. https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html默认情况下单个列的索引不能超过767位,我们可以启用innodb_large_prefix=on选项,将约束项扩展至3072byte。#1、在线开启 setglobalinnodb_large_prefix=1; #2、确认开启 showvariableslike
pm2启动失败首先检查config.js文件配置,然后项目的端口号和nginx的端口号。如果都配置正确,则是pm2缓存问题执行(一定要执行delete否则会产生两个相同的pm2挂载的应用服务,pm2stophomes不能保证,会有缓存):pm2deleteall复制再重新执行pm2start/var/www/ecosystem.config.js复制然后查看,发现启动成功了pm2list复制查看日志pm2logs复制此外建议执行pm2放在config.js文件路径下执行否则会找不到版权属于:dingzhenhua 本文链接:https://www.dcmickey.cn/skill/199.html 转载时须注明出处及本声明
作者:KarenCasella,PhillipaAvery,RobertReta,JosephBreuer翻译:马雅狄审校:包研迫于用户对移动设备下载播放视频的需求,Netflix终于妥协了。如何保护版权的同时,又不影响用户观看体验?播放许可团队构建出了一套新的用于Netflix下载体验的许可发行系统。本文发布于Netflix官方博客,分为两部分,LiveVideoStack团队对其进行了摘译,点击【阅读原文】查看原博客。2016年早些时候,Netflix的几个团队被问到:“如果让会员在手机上下载和离线观看内容,会能怎样呢?”对于播放许可团队,这意味着我们需要提供一套内容许可系统,它将会允许会员的设备存储和解密,用于离线观看的下载内容。要想在信息安全的情况下实现,需要一个新的服务,这套新服务是需要有状态的,尽管我们当前所有的系统是无状态的。“很好!开发这套系统需要多长时间呢?”2016年11月末,也就是在最初问题被提出后的9个月后,Netflix成功发布了这个允许用户在移动设备上下载并播放内容的新的下载功能。多个产品和工程师团队协助设计和开发了这项新功能,这个新功能对Netflix的全
本文来自SPIE论文展示,论文标题是“ReviewandcomparativeanalysisofparallelvideoencodingtechniquesforVVC”。本文论文来源链接:https://doi.org/10.1117/12.2569283会议:SPIEOpticalEngineering+Applications,2020在本文中,我们回顾并总结了有关视频编码并行化的研究结果,主要侧重于在块或内部块级别运行的中粒度方法。在适用的地方说明了分类法,重点放在可伸缩性问题上。给定报告的结果,我们将注意力转移到为编码器执行的并行任务分配资源(处理核心)以实现高加速的问题。我们主张,与独立方法相比,利用独立编码区域(例如图块),每个区域内的波前并行度和CTU压缩级别的内部块并行度的并行化方案可以实现更高的并行度。然后提出一种算法,该算法在所有上述级别上进行资源分配决策。在VTM6.2中,使用CU拆分并行性记录的CTU编码时间,根据可伸缩性评估了提出的算法和来自相关文献的独立代表方法。结果表明,该方案的潜在可扩展性超过了替代方案。视频编码无疑是一项计算量巨大的任务。因此,并
此文章描述了如果单元测试和集成测试分别运行,如何为Maven构建生成测试报告。SonarQube将所有测试报告合并为一份涵盖整体的测试报告。因此,如果您在Maven项目中将单元测试(由MavenSurefirePlugin运行)和集成测试(由MavenFailsafePlugin运行)分开进行测试,那么如何配置JaCoCoMavenPlugin。在以下各节中,提出了满足以下条件的解决方案:使用Maven作为构建工具。该项目可以是多模块项目(微服务)。单元测试和集成测试是每个模块的一部分。测试覆盖率是通过JaCoCoMavenPlugin来衡量的。下面显示了Maven项目结构,用于单元测试和集成测试的分离。然后显示了Maven项目配置,其中包含单独的单元测试运行和集成测试运行。之后,我们来看看Maven项目配置以生成涵盖单元测试和集成测试的测试报告。最后,SonarQube的仪表板中显示了SonarQube的配置,用于测试报告的可视化。Maven项目结构首先,我们看一下单个模块项目的默认Maven项目结构。my-app ├──pom.xml ├──src │├──main ││└──ja
一简介1链表简介链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。 2单项链表和双向链表1单链表1示意图2存储结构上图就是单向链表的存储结构原理图,由图中我们可以看出每个节点都由两部分组成,一个是data数据域,另一个是指向下一节点的next指针域,指针域不存放任何数据,然后通过这样的方式一直指下去,最后便形成了一条类似铁链的结构,所以称为链表,最后的next指针为null,说明到了最后一个节点,(python中为None),最后一个节点的指针不指向任何节点,所以next=null. 2双向链表1示意图2存储结构双向链表也叫双链表,
出处:http://blog.51cto.com/softi/1967186今天,我们要玩个大的!!! 我们把之前使用数组做的这个单身狗系统改版成数据库版本,并且使用面向对象里面的一些简单思想。如果有不知道这个系统的看官,请跳转到目录页,然后再选择单身狗系统(数组版)先围观五分钟吧。里面的功能很简单。。。。。。。。。五分钟之后···好了,五分钟到了,我们继续吧·要完成的功能还是如上图所示,只不过实现的代码有翻天覆地的变化而已。。。第一步:分析 一般做一个项目,根据侧重点不同,会把整个项目分成三大部分:界面、功能业务实现、数据库操作。具体三层架构的内容,等后面JSP的时候再来细讲哈。 所以首先要有三个不同的包来保存这三大部分的内容。 com.test:包含main方法的程序入口类放在这个包下。 com.dog.ui:界面相关的类文件放在这个包下。 com.dog.service:功能中的业务逻辑的处理放在这个包下。 com.dog.dao:和数据库打交道的类放在这个包下。 包分好了,我们再来分析要创建哪些类,根据引用顺序,ui要调用service,service要调用dao,而类与类之间
http://blog.csdn.net/wendy260310/article/details/41039625刚刚结束了找工作之旅,总结一下自己遇到的一些问题,可以给大家做一个参考。1.回文数的判断,这个问题给的是一个longint而不是char*,这个是非常关键的,我写的代码如下[cpp]viewplaincopybool isreverse(longint inputNumber) { int reverse=0,temp=inputNumber; while(temp) { reverse=reverse*10+(temp%10); temp/=10; } return reverse==inputNumber; } 这个被面试官批评了半天,原因是reverse可能会越界,他说你们写代码不能当成儿戏。最好的方法还是要把这个longint转成char*。2.关于二分查找的问题,二分查找虽然说简单,但是要想写对还是需要认真的。写完二分查找之后,又说如果数组中的元素有重复的,求第一个。[cpp]viewplai
审美的重要性美究竟有没有一个标准这里不敢讨论。但是在长期的实践当中,人们大体总结出了一些形式美的规律,比如平衡、对称、对比、统一、变化以及黄金分割等。做好PPT的前提其实在于能否分辨基本的丑和美。提高审美最好的方式是多去看美的东西。这里给大家推荐两个网站,学习累了可以浏览浏览。https://design-milk.com/https://ifworlddesignguide.com/design-excellence关于“丑”的几个示例:(以上内容均来自office自带模板 关于美的极简示例:) PPT类型现在进入如何拯救PPT的正题,首先要明确的是PPT有哪些类型。很多时候我们做不好PPT的原因之一在于没有想清楚PPT会用来干什么。在很多模板网站里会看到类似于商业,学术等等这样的很多分类方式。其实,PPT无非就是演示类型和阅读类型两种。演示类型(讲给别人听)一页只有一个焦点阅读类型(发给别人看)一页可以有多个焦点混合型(先讲然后发给别人看)通过动画通过颜色和明暗一页可以有多个焦点一次只强调一个焦点PPT内容封面简约背景与背景对比度高的文字线条:直线,折线蒙版和色块突出文字,模糊背景
#背景mysql版本5.7.8,需要创建新表,研发提供的sql文件,执行后报错如下:ERROR1067(42000):Invaliddefaultvaluefor'deleted_at'复制就猜测到时因为5.7版本的mysql默认的时间戳不允许输入0000-00-0000:00:00这种格式,之前碰到过类似问题,需要修改配置查看了研发提供的sql文件,果真如此:‘create_at`TIMESTAMPNOTNULLDEFAULT'0000-00-0000:00:00'COMMENT'注册时间',复制#解决1.不希望修改配置文件,通过修改sql_model就可以了的,这种对新建表生效SELECT@@sql_mode;复制可查看sql_model,其中NO_ZERO_IN_DATE,NO_ZERO_DATE就是导致5.7+版本无法输入0的时间戳NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零 NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。2.修改sql_m
2022-09-21:有n个动物重量分别是a1、a2、a3.....an,这群动物一起玩叠罗汉游戏,规定从左往右选择动物,每只动物左边动物的总重量不能超过自己的重量返回最多能选多少个动物,求一个高效的算法。比如有7个动物,从左往右重量依次为:1,3,5,7,9,11,21则最多能选5个动物:1,3,5,9,21注意本题给的例子是有序的,但是实际给定的动物数组,可能是无序的,要求从左往右选动物,且不能打乱原始数组。答案2022-09-21:联想到最长递增子序列。动态规划+二分。时间复杂度O(N*logN)。额外空间复杂度O(N)。代码用rust编写。代码如下:userand::Rng; fnmain(){ letnn=100; letvv=1000; lettest_time=2000; println!("测试开始"); for_in0..test_time{ letn=rand::thread_rng().gen_range(0,nn)+1; letmutarr=random_array(n,vv); letans1=max_animals1(&mutar
概述 HashMap对于做Java的小伙伴来说太熟悉了。估计你们每天都在使用它。它为什么叫做HashMap?它的内部是怎么实现的呢?为什么我们使用的时候很多情况都是用String作为它的key呢?带着这些疑问让我们来了解HashMap! HashMap介绍 1、介绍 HashMap是一个用”KEY”-“VALUE”来实现数据存储的类。你可以用一个”key”去存储数据。当你想获得数据的时候,你可以通过”key”去得到数据。所以你可以把HashMap当作一个字典。那么HashMap的名字从何而来呢?其实HashMap的由来是基于Hasing技术(Hasing),Hasing就是将很大的字符串或者任何对象转换成一个用来代表它们的很小的值,这些更短的值就可以很方便的用来方便索引、加快搜索。 在讲解HashMap的存储过程之前还需要提到一个知识点 我们都知道在Java中每个对象都有一个hashcode()方法用来返回该对象的hash值。HashMap中将会用到对象的hashcode方法来获取对象的hash值。 2、关系 图1展示了HashMap的类结构关系。 HashMa
文华财经函数大全 1、引用数据 AVPRICE 引用均价(在盘后对于国内三个期货交易所指结算价)SETTLE 引用结算价(如果用在周期小于'日'的K线上如5分钟K线,一小时k线,每根k线返回的值表示这根k线当日开盘时到这根k线的为止的结算价(均价)如果用在周期大于等于'日'的K线上,返回当根K线结束时间所在日的结算价.)CLOSE 引用收盘价(在盘中指最新价),也可简写为C。HIGH 引用最高价,也可简写为H。LOW 引用最低价,也可简写为L。OPEN 引用开盘价,也可简写为O。OPI 引用持仓量REF(X,N) 引用X在N个周期前的值例:REF(CLOSE,5);表示引用当前周期前第5个周期的收盘价REFX(X,N) 引用N个周期后的数据。(N为大于等于1的整数)『未来函数』例:REFX(CLOSE,5);表示引用自当前周期后第5个周期的收盘价VOL 引用成交量,也可简写为V。GETPRICE(N) 根据文华码取出某一品种的最新价。例子:GETPRICE(120
前言 本人从事.netcore转型已两年有余,对.netcore颇有好感,这一切得益于优秀的语法、框架设计。 2006年开始使用.net2.0,从asp.net到winform到winservice等等领域开发都些许涉猎。对.net和大多数同胞有着类似的感触,那是又爱又恨,波段大致是这样: 2010年以前,坚信.netframework能一统江湖霸业,不料在此之后,国内使用.net 各大型领军公司纷纷转型java,在每次面试和技术口舌之战时总有低人一等的感觉,没有自信。默默的忧桑。。。 于是在2015年底,本人开始接触linux,学习并使用了第一个跨平台服务端web语言nodejs+express框架,在完成开发交付时,发现脚本有很多致命问题,最严重那就是维护成本。 经历这一次的项目开发,对软件工程学以及静态语言优点有了更深的体会,在同事推荐和劝导之下,开始学习了.netcore1.0,看到第一个demo时,发现框架设计与expressjs实在太像了,够开放。。我喜欢。。遂一直坚持学习与使用到今天。 遇到的坑 两年时间开发了10+个中大型项目,印象最深刻的是第一个上线项目,一
简单聊聊大A内资的问题 转者按:根据对大A的了解,本人同意原文的观点(所以我不碰股票)。至少,按文章说的做,不至于成为冤大头。 简单聊聊内资的问题吧,当然仅代表个人的看法哈,而且也不能聊的太多太深,以免触及他人利益被禁言。 首先想跟大家明确的一个点是,A股上市公司四千多家,其中真正有优秀业绩,有光明前景,有长期投资价值的公司,其实并不多,大多数公司全靠炒。 而内资,尤其是公募基金和私募基金这些机构的投资,主要用的都是一个套路:抱团+规模效应。在选行业和选股上抱团,再利用规模效应不断推高价格,直到规模大到无法进一步扩充,或者泡沫吹到不能更大,这时候一旦出现抢跑资金,筹码松动,必然会造成踩踏,一地鸡毛。而且抱团+规模效应的正反馈一旦断了,那就不会是回归到正常状态那么简单,肯定会砸出一个深坑出来,而且泡沫越大,砸出来的坑也一定越深。 公募基金在选股上,我们就很难看到百花齐放的情况,大多数规模比较大的基金经理,持仓的重合度都很高,尤其是同基金公司的不同基金经理,持仓的重合度高得离谱。也就是说抱团不仅是整个基金行业的抱团,也有基金公司内部的
qt是一个c++的界面库,其特点就是其源码可以跨平台编译,这样在写自己的小工具时可以方便地在windows,mac或linux环境下移植了。在windows下写c++程序当然选vs,在mac下写程序当然用xcode,在linux下就完全控制台吧。 本人仅仅将其看成是一个c++的库,所以不想学习新的的IDE--qtcreator,也不想去学qtdesigner,所以qt的预处理都需要自己用命令来折腾。 Moc 从qt继承而来的类只要用了关键字Q_OBJECT,都必须生成其对应的moc文件,命令如下 moc.exemyclass.h-omac_myclass.cpp复制 其中myclass.h中有类有Q_OBJECT属性。在vs项目中只需要添加mac_myclass.cpp文件即可。 UI 虽然不使用designer来设计界面,但在编译一个demo项目时都会用*.ui文件,这时得先将其用uic.exe进行转化 uic.exeapp.ui-oui_app.h复制 其中app.ui是用designer设计好的界面文件,ui_app.h是生成的头文件。然后在c++项目中#include"
bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6318 求逆序数的对数 #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<cmath> usingnamespacestd; constintmaxn=1e5+5; intis1[maxn],is2[maxn];//is1为原数组,is2为临时数组,n为个人定义的长度 longlongmerge(intlow,intmid,inthigh) { inti=low,j=mid+1,k=low; longlongcount=0; while(i<=mid&&j<=high) if(is1[i]<=is1[j])//此处为稳定排序的关键,不能用小于 is2[k++]=is1[i++]; else { is2[k++]=is1[j++]; count+=j-k;
就是将已知的明文密码转换成固定长度的MD5 MD5即Message-DigestAlgorithm5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。 MD5算法具有以下特点: 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。2、容易计算:从原数据计算出MD5值很容易。3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。 JAVA中的摘要算法简单示例: package com.zhuifeng.util; &nb
各位小伙伴们,今天我分享的主题是如何进行有效的沟通。作为项目经理,在日常的工作过程中,沟通几乎会占据项目经理80%的时间,进行高效且有效的沟通是项目经理的必备技能今天来大家分享几个沟通中注意的技巧。 首先我们来看下PMI给出的沟通定义,沟通是指用各种可能的方式来发送或接收信息,或者通过沟通活动(如会议或者演讲),或者以工件的方式(如电子邮件、社交媒体、项目报告或者项目文档)。 接下来,我来分享第一个技巧,即在进行书面沟通的时候,应用5C原则,可以减轻理解错误,但是注意理解错误是无法消除的: 1) 正确的语法和拼写。语法不当或拼写错误,会分散注意力,还有可能扭曲信息含义,降低可信度。 2) 简洁的表述和无多余字。简洁且精心组织的信息能力降低误解信息意图的可能性。 3) 清晰的目的和表述(适合读者的需求)。确保在信息中包含能满足受众需求和激发其兴趣的内容。 4) 连贯的思维逻辑。写作思路连贯,以及