原帖地址: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混编的。
<!--EndFragment-->
本文链接
分享到:
相关推荐
MATLAB使用KNN神经网络进行人脸识别,优秀程序设计系统 MATLAB使用KNN神经网络进行人脸识别,优秀程序设计系统 MATLAB使用KNN神经网络进行人脸识别,优秀程序设计系统 MATLAB使用KNN神经网络进行人脸识别,优秀程序...
标题"matlab手写卷积神经网络人脸识别matlab.zip"指的是一个包含MATLAB代码和相关资源的压缩包,用于实现手写数字的人脸识别。MATLAB是一个流行的编程环境,适合进行科学计算和数据分析,尤其在工程和学术研究中应用...
标题中的“Documents_matlab人脸识别_matlab人脸识别论文_开题_”揭示了这是一个关于使用MATLAB进行人脸识别技术研究的文档集合,特别关注的是论文和开题报告。这些资料可能包含了人脸识别的基本概念、MATLAB编程...
MATLAB课堂考勤(GUI)该课题为基于MATLAB pca的人脸考勤系统。可以从一副图像中找出多人人脸,分割,计算人数,然后提前制作好这些人的人脸库,进行逐一识别是谁,是不是库内人脸,如是,具体是谁,如果不是,那...
标题中的“LDA人脸识别matlab程序代码”指的是一种基于线性判别分析(Linear Discriminant Analysis, LDA)的人脸识别技术在MATLAB环境下的实现。MATLAB是一款广泛使用的数学计算软件,尤其适合进行矩阵运算和数据...
总之,本项目展示了如何在MATLAB中利用BP神经网络进行人脸识别,涉及到了图像预处理、特征提取、网络构建、训练以及结果评估等多个环节,同时也强调了代码修改和优化的重要性。对于初学者来说,这是一个很好的学习...
Matlab关于LDA人脸识别-lda.m 请问谁有一些关于 LDA 人脸识别的源程序!谢谢大家了!
using MathWorks.MATLAB.NET.Utility; using polyfit2; ``` 7. 编写主函数调用`polyfit2`函数: ```csharp double[] x = new double[13] {37,37.5,38,38.5,39,39.5,40,40.5,41,41.5,42,42.5,43}; double[] y =...
最后,通过比较测试图像与人脸库中的特征向量,确定最接近的匹配,从而进行识别。 在这个资源中,提供的MATLAB代码可能包含了以上所有步骤的实现。用户下载后可以直接运行,这表明代码已经过编译且功能完整。同时,...
在混合编程领域中,Matlab与***的结合使用十分广泛,特别是在需要复杂数值计算与用户界面友好性的应用中。Matlab提供了强大的数学计算功能和丰富的函数库,而***则以其简易性和强大的面向对象编程能力而备受青睐。在...
【作品名称】:基于matlab编写的基于PCA的人脸识别 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于matlab编写的...
在本项目中,我们主要探讨的是使用MATLAB实现的人脸识别技术,这是一项基于机器学习的重要应用。MATLAB作为一个强大的数值计算和编程环境,被广泛用于科学研究和工程领域,包括机器学习和计算机视觉。 首先,我们...
在本文中,我们将深入探讨如何使用Matlab进行人脸识别,以及如何通过修改内置示例程序实现一个具有实时性和鲁棒性的摄像头人脸识别系统。首先,我们理解人脸识别是一项计算机视觉技术,它涉及图像处理、模式识别和...
基于matlab的人脸识别中导入人脸库数据 基于matlab的人脸识别中导入人脸数据
在本项目中,我们主要探讨的是使用MATLAB进行人工智能领域的人脸识别技术,特别是针对人脸关键点的检测。MATLAB是一种强大的数值计算和可视化工具,它以其易用性及丰富的库函数深受科研人员和工程师的喜爱。在这个...
浅谈matlab与c#混编的文档,环境设置的选择和一般线性规划的求解方法,涉及非线性规划。
【人脸识别】基于KL变换人脸识别matlab源码含GUI.md
"matlab.zip_matlab 人脸识别_suggestitu_人脸表情_人脸识别_人脸识别matlab" 这个标题表明这是一个与人脸识别相关的MATLAB代码压缩包。MATLAB是一种广泛用于数值计算、符号计算和数据分析的高级编程环境,特别适合...
《基于LBP模式的人脸识别MATLAB实现详解》 人脸识别技术是计算机视觉领域的一个重要研究方向,它在安全监控、身份验证、社交媒体等多个领域有着广泛的应用。本篇将重点介绍一种基于局部二值模式(Local Binary ...