毕业设计进展—2

   前天晚上正式进入了毕业设计的编码实现阶段,计划是一个星期内完成整个程序。
   首先经过一晚上的耕耘,实现了一个异常简单的手动获取两幅图像的特征点的小程序,给我后续的参数估计提供所需要的数据。原本自动提取特征点有很多优秀的算法,也不难实现,只是这一块不是我份内之事,因此便偷懒用手工选取代替了,嘿嘿。。
   然后昨天花了半天时间,学习了一下matlab与VC的混合编程。之所以不单纯的用c++实现,是因为程序中涉及到许多矩阵的运算,包括解线性方程,SVD分解,QR分解等等,这恰恰是matlab完善而又强大之处。通过简单的在vc中调用matlab引擎,可以将程序中的数据传给matlab进行计算,然后再从中读取计算结果。嘿嘿,确实简化了我大量的工作。

   目前已经完成了基础矩阵F的求解。其实就是通过左右匹配点的外极几何关系,建立线性方程组,求之。但是由于我首次接触matlab,对于它的命令以及编程接口还很不熟悉,难免走了许多弯路。比如".*’和"*"的区别,就让我费解了半天。matlab的c语言demo程序里,使用的是".*"来完成乘法运算,所以我也依葫芦画瓢,但是总提示我出错,后来才发现矩阵乘法应该用"*",".*"用作数组乘法…ft!还有便是之前考虑到像素坐标是整型数据,所以用mxCreateNumricMatrix来创建INT32类型的矩阵,这样导致许多矩阵的函数无法执行,比如求逆inv(),也是调试了半天,后来改用mxCreateDoubleMatrix,一切迎刃而解。。。ft!!一直就没有找到个api的文档说明…
   OK,今天又起来迟了,写完这篇就13:29了。。。先去吃午饭了去了,回来后准备把求内参的程序实现了。
   最后附录一下matlab和vc混合编程的编译环境配置方法(VC6下):
   1) 通过菜单工程/选项,打开设置属性页,进入Directories页面,在目录下拉列表框中选择Include files,添加路径:"F:matlabexterninclude"(假定matlab安装在F:matlab目录)。
   2) 选择Library files,添加路径:F:matlabexternlibwin32microsoftmsvc60。
   3) 通过菜单工程/设置,打开工程设置属性页,进入Link页面,在Object/library modules编辑框中,添加文件名libmx.lib libmat.lib libeng.lib。

Update:
   16:30   刚审查昨天的代码,发现了一个很大但很不容易被察觉到bug。matlab的mxArray存储矩阵是以列优先的方式存储的,而c,c++采用的是行优先的方式存储2维数组。也就是说如果把c,c++中的2维数组直接拷贝给mxArray,比如memcpy,就会造成曲解。。完全打乱了原本的元素的顺序。。FT,难怪验证基础矩阵的结果有错,原因就在于此!
  

Creative Commons License
This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-No Derivative Works 2.5 China Mainland License.
标签:, ,
此条目发表在 学无止境 分类目录,贴了 , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已被标记为 *

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>