Matlab与.NET混编解决人脸识别问题
原文 http://www.cnblogs.com/asxinyu/archive/2013/05/29/3107013.html
如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标。
关键词:混合编程,Matlab编程,Matlab混编,C#调用Matlab,Matlab与C#混编
1.前言
Matlab的强大计算引擎和工具箱,让很多人垂涎欲滴,Mathworks也对其他语言的支持越来越好,对.NET平台的支持也越来越强大。3年前偶然接触Matlab与C#混合编程,期间断断续续完成了很多不同类型问题的处理,并完成了几个小项目,积累了不少经验,现在已经很熟练的能够解决Matlab和C#的混编问题。鉴于很多大学毕业生或者研究生接触混编,有很大难处,也有很多人经常来问很基础的问题,所以2012年年底录制了国内第一套比较完成的Matlab与,NET的混合编程入门视频教程,即将在ILoveMatlab论坛发布。最近完成了一个Matlab和C#混合编程解决“人脸识别”的案例,再次分享一下经验。
2.Matlab.NET混合编程概述
这方面就不仔细阐述了,主要是利用Matlab的Deploytool工具将m函数编译为.NET程序集,然后在C#中调用 的过程。然后程序可以在安装MCR的机器上运行,这个过程如果懂Matalb和C#的人,看看Matlab NE Builder工具箱的帮助入门文档, 也很容易的可以搞定,只不过是英文的,要花点时间和耐心。下面简单说一下Matlab和.NET混合编程的步骤和注意要点:
1.只有Matlab的Function才能被混编调用,也就是一定要是M函数才行;
2.Matlab和C#混编的项目,客户机或者服务器需要安装对应版本的MCR,才能运行。
3.有一些工具箱函数不能被混编,暂时不支持,少数,官方也在努力使得越来越多的工具箱支持混编,详细的可以混编的工具箱可以在这里查看。
4.2点经常人提起的:神经网络工具箱可以train,不能Test,符号工具箱也不能混编,所以如果想用C#和Matlab解决上述2类问题的人,提前罢手。
5.Matlab和C#混编的基本步骤,这里只是混合编程的方法之一,也是基本方法.
1) 编写M函数,并首先在Matlab中测试是正确可以调用的。注意命名规范,注释规范;
2) 使用命令打开 deploytool工具,设置项目名称,选择类型:.NET Assembly,然后新建一个类,并添加编写好的M函数
3) 编译,生成dll,并在C#项目中添加引用(还需要引用对应版本的MWArray),利用对象浏览器查看生成dll的方法结构,并根据Matlab和C#的类型转换规则,进行数据转换即可。
3.混合编程解决人脸识别
人脸识别是图像处理里面比较常见和经典的问题之一吧。现在研究也很成熟了,本文的人脸识别的Matlab源程序也是一个开源的人脸识别例子。经过分析和改进,进行了重构,最后再进行混编。原始的人脸识别程序,主要有下面几个部分:
1.人脸检测:这个过程主要是对输入的人脸图像进行肤色判断椭圆类聚判断,把符合人脸特征的矩形标记出来,截取人脸。
2.人脸数据库训练:这是整个问题的核心,人脸特征的训练直接关系到识别的准确率。主要过程是将目标的人脸数据库进行训练,得到一个最好的分类系数和特征值,作为人脸识别的参数和比较目标。
3.人脸识别:将目标图像进行人脸特征提取,并进行傅立叶变换,利用遗传算法提取特征值,然后与特征库里面的人脸特征进行距离计算,得到结果。
原始的项目程序都是Matlab程序,很多不规范的地方,不完全是M函数,参数定义也不规范,我接受后,对整个Matlab项目程序进行了重构,功能更加清晰,函数定义更加合理,然后混编后,在C#中调用也方便多了。看看主要界面和核心代码:



另外,在C#中由于需要存储人脸数据库以及人脸特征,特意选择了一个.NET开发的XML数据库,详细使用可以参考我的这篇博客:开源.NET下的XML数据库介绍及入门 http://www.cnblogs.com/asxinyu/archive/2013/03/25/2980086.html ,这个还是很方便的。只不过的后期发现了一个Bug,主要是这个XML数 据库内部默认采用了“当前目录”找出的,当前目录和程序启动目录是有区别的,因为当前目录是根据软件使用过程,可能会有变化的。后来把源程序找出来,调试 修复了这个错误。我把修复后的版本源代码发出来,大家有需要的下载使用吧。主要是在构造函数里面加了一个程序启动路径,说来也奇怪,Win7下是好的,XP就有这个问题。当然修复后都没这个问题了。看看C#混合编程调用Matlab生成程序集的核心代码:

上面是混编项目的结构,下面是人脸识别中c#中的核心代码,调用Matlab生成的程序集进行识别。



就这么多吧。混编真的很强大,对做科研的朋友来说,真是一大福音啊。但这对开发的基础要求也很高,否则遇到很多奇怪的错误,还是要靠经验去解决,并不是一次都能够完全学会Matlab混编的。
Matlab与.NET混编解决人脸识别问题的更多相关文章
- Matlab与.NET混合编程解决人脸识别问题
		
原文:[原创]Matlab与.NET混合编程解决人脸识别问题 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ht ...
 - Matlab与C混编的介绍
		
原本写给一个朋友的,帮助她入门matlab与C混编的 >#####环境: * Matlab:MATLAB R2013a * C编译器VC++2012 === #####配置环境: 在**Matl ...
 - 关于ARC的介绍和ARC与MRC混编解决
		
1. ARC & MRC 混合开发 在项目开发中,遇到使用MRC开发的第三方库怎么办? 例如:ASI 1> 尝试使用Xcode的转换工具(失败率比较高) 2> 在编译选项中,为MR ...
 - 使用OpenCV进行人脸识别
		
不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...
 - 机器学习-svd实现人脸识别
		
加载sklearn中的人脸数据集 from sklearn.datasets import fetch_lfw_people faces = fetch_lfw_people() 执行上面的第二行程序 ...
 - Matlab.NET混编技巧之——找出Matlab内置函数
		
原文 http://www.cnblogs.com/asxinyu/p/3295309.html Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯 定不难.反之,有时 ...
 - C# MATLAB混编(一)
		
参照这篇博客进行的C# MATLAB混编学习,学习过程中文章中的一些问题我并没有遇到,但是我遇到了一些新问题,这些问题的解决办法将在下一篇博客给出. 配置环境:vs2010(64位)+Matlab20 ...
 - Matlab高级教程_第三篇:Matlab转码C/C++方式(混编)_第一部分
		
0. 其实Matlab的转码混编大多数就是为了现成的算法函数不用再写了,2就是为了方便提高代码运行速度用C语言去运行. 1. MEX文件: Mex文件是一种可在matlab环境中嗲用C语言(或fort ...
 - 基于MATLAB的人脸识别算法的研究
		
基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...
 
随机推荐
- mysql在linux上重启
			
如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start 2.使用 mysqld 脚本启动:/etc/inint.d/mysqld sta ...
 - MyEclipse6.5安装SVN插件的三种方法
			
MyEclipse6.5安装SVN插件的三种方法 方法一.如果可以上网可在线安装 1. 打开Myeclipse,在菜单栏中选择Help→Software Updates→Find and Instal ...
 - SQL Server索引 - 索引(物化)视图 <第九篇>
			
一.索引视图基本概念 索引视图实际上是一种将一组唯一值“物化”为群集索引形式的视图,所为物化就是几乎和表一样,其数据也是会存储一份的(会占用硬盘空间,但是查询速度快,例如可以将count(),sum( ...
 - C# GC 垃圾回收
			
一.托管 .Net所指的托管资源到底是什么意思呢?是相对于所有资源,还是只限于某一方面的资源?很多人对此不是很了解. 其实.Net所指的托管只是针对内存这一个方面,并不是对于所有的元素:因此对于Str ...
 - 如何检索Android设备的唯一ID
			
关于本文档 Android的开发者在一些特定情况下都需要知道手机中的唯一设备ID.例如,跟踪应用程序的安装,生成用于复制保护的DRM时需要使用设备的唯一ID.在本文档结尾处提供了作为参考的示例代码片段 ...
 - form-validation-engine中的正则表达式
			
form-validation-engine是一个不错的表单验证,可以玩玩. (function($) { $.fn.validationEngineLanguage = function() {}; ...
 - SDP简要解析
			
1.概述SDP也是MMUSIC工作组的一个产品,在MBONE内容中用得很多.其目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话.SDP基本上在internet上工作.他定义了会话画 ...
 - Windows Server 2008 R2  开启Win7主题效果Aero
			
1.打开 开始---管理工具----服务器管理器--功能 2.点击 “添加功能”,选择“桌面体验”,这样就会安装上win7 主题和Windows media player 3.重启电脑后,在“服务”里 ...
 - Longest Palindromic Substring-----最长回文子串
			
首先讲讲什么是回文, 看看Wiki是怎么说的:回文,亦称回环,是正读反读都能读通的句子.亦有将文字排列成圆圈者,是一种修辞方式和文字游戏.回环运用得当.能够表现两种事物或现象相互依靠或排斥的关系, 比 ...
 - C#主要字典集合性能对比[转]
			
A post I made a couple days ago about the side-effect of concurrency (the concurrent collections in ...