1.废话之开学的心情:
既来之,则安之。开学了,老师交代的事情要好好的做,尽力去做吧,能力也不是一下子都有的。
2前言:
拿到一个问题,首先应该想想别人做过没有,不然自以为的创新其实并不能被认同,所以国外大神写好的代码得好好看,一方面学新技术,一方面强化程序编写能力。
3.1问题:
s2p是关于两幅图像的立体匹配和三维重建的解决方案,如何t通过阅读源码快速学习到其中的原理和架构。
3.2材料:
(1)搜集的各种文献;(2)开源程序包;(3)两台电脑;(4)周围可以请教的学长。(5)工具:matlab\notepad++\baidu.com等
3.3过程
(1)阅读文献,从CNKI下载了好些文章,以及该代码作者所作的英文文献。一天时间全部浏览,不细看,主要了解该课题的许多学术术语,这对阅读代码很有帮助。下面介绍主要的术语:
<1>主流商用遥感卫星:法国,SPOT1-5,Pleiades,美国,IKONOS、QuickBird.
<2>卫星摄像原理方面:推扫式pushroom, 核线epipolor line,CCD成像元件,物理传感器模型,有理多项式模型。
<3>s2p处理流程:
主要的环节为粉红色部分,有基于RPC(有理多项式摄像模型)的点处理,局部立体处理,立体匹配方法,高程计算,形成点云。
其中立体匹配方法多样,流行的方法有sift,sgm等,如果该方法处理精度好的话,还应继续深入看这些方法的差异。
(2)开始看代码
<1>readme.MD。 为了学习者考虑,大多数大神应该都会提供这个文件。应认真对待他。
文件内容:1.对该包的简要介绍及成就2.docker提供了编译好的程序3.依赖库4.如何编译运行5.提醒我们如果使用的话应该引用他的文章。
所以按部就班的配置好一台ubuntu16.04,依次使用readme里给出的命令。它提供两种方法,一种是使用git下载源码然后make all,另一种是使用docker。鉴于本人渣渣的linux能力,对docker还得再学会,这里只使用了第一种方法。还是跑出了一些结果。能跑一下看看还是挺好的
<2>单独对asift包的编译和小修改。
还是readme.txt,该方法是s2p流程的匹配环节应用的方法,通过readme中介绍的编译方法,见识并使用了下CMAKE这个工具,最后用VS形成可执行文件,通过命令行的调用实现运行,不过命令行是看不清匹配点的,使用matlab工具可以简单读入图片和matches文件还能调用刚刚编译好的程序,可视化效果较好。
<3>源码阅读。
此处深有感触,以为自己学过C,玩过python,,还真是第一次粘合的这么好的代码。阅读顺序当然是函数的调用顺序。下面是代码包的第一层文件夹:
从第一个文件s2p.py开始,不细说了,那样废话太多,我其实也没看完主要看到了这些东西:
1.层次。程序所依赖的第三方代码放到乐3rdParty文件夹中,以命令行或库文件方式调用。c为程序计算部分,c速度快,当然不能用python写运行部分,s2p调用的python函数在s2plib里,s2plib中的python则调用c编译好的可执行文件,其中参数文件单独编写,config.py(运行时文件)和config.json(作为输入文件)为程序运行提供参数支持。此处又了解到目前格式化的两种文件格式 json和 XML。
2.使用notepad++工具阅读源码,ALT+0全部折叠可一览该文件全貌。
3.稍微整理函数调用过程,忽略中间参数,以第一步loca_pointing为例:
Main<s2p>
ignoreparallel
‘initialization’
’local_pointing’,compute_correction<pointing_accuracy>
rpc_model
matchs_on_rpc_roi<sift>
matches_from_rpc<rpc_utils>
affine_fundamental_matrix<estimation>
callsift<可执行>
call matching<可执行>
local_translation<pointing_accuracy >
matches_from_rpc<rpc_utils.>
affine_fundamental_matrix<estimation>
error_vectors<pointing_accuracy>
‘rectification’
......
......
4,总之还是用的笨办法吧,一点一点看,也许有更好的方法待我以后找到。
4.其他
(1)ubuntu 常用命令
cd
ls
pwd
find 起点 -name 文件名
treesu
passwd
pppoeconf
程序获取相关命令
apt-get pip git docker....