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混编的。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
WhatFontIs - 字体百科全书,没有不认识的字体
我敢肯定,我不是唯一一个曾经特别想知道图片上使用的某个字体,然后特别无奈的到字体网站大海捞针似的的找类似的字体。如今,一个强大的软件字体识别——WhatFontIs,让我们的生活更轻松。 您可能感兴趣的相关文章 Web 前端开发人员和设计师必读的精华文章集锦 OverAPI.com – 史上最全开发人员在线速查手册 TwentyTwenty:使用 jQuery 实现图片对比功能 Debuggex – 超好用的正则表达式可视化调试工具 Superhero:构建大型 JavaScript 应用程序资源 从它的名字可以知道,它能够帮助我们识别字体,更精确地说,它可以从一个给定的图像识别出字体的名称。它的拥有自己的数据库,涵盖超过280,000字体。如果没有找到,则返回最接近的匹配字体。 网站非常简单,和其它这种服务或者工具站点类似。你可以使用浏览按钮上传含要识别字体的图像(或者填写图片的 URL)。需要注意的是,在图像上的文字必须是水平排布的,而且有一个很好的对比。 类型的对比(背景较亮或较暗的字体比)后表示,“继续”按钮带你到下一个屏幕,这表明什么字母已经确定,并要求您在附近的一个...
- 下一篇
Moto X :非典型性的智能手机带来的启示
在不管是国内还是国外的手机厂商还比拼硬件性能的时候,智能手机的潮流方向却已经悄然发生了变化。在经历过太多雷同的智能手机体验之后,用户需要的是一款真正能够改变自己生活,或者说更智能的手机。纵观目前市场上的智能手机,在这方面,三星Galaxy S4首先发力,加入了诸多人性化功能,但还是显得噱头较多。而近日发布的Moto X在大肆宣传其与众不同之处,事实究竟是不是这样呢? Moto X是摩托罗拉被谷歌收购之后,在智能手机界沉寂多时之后的作品。作为被谷歌收购的公司,摩托罗拉推出这样一款非典型的智能手机意味着什么?难道Android系统要调整方向?意味着智能手机将调整方向,突破现在瓶颈的桎梏?意味着以后智能手机将走向一条不同的路? 非典型的Moto X,非典型的感受 Moto X打着美国设计、美国生产、美国组装的“纯美国范”口号,引起业界普遍的关注。Moto X不盲从于硬件竞赛,而将重心转向人性化设计和可定制性方面。在智能手机这硬件竞争越发乏力的现在,许多手机厂商都尝试开发旗下智能手机更多的人性化功能,但没有一款像Moto X这么胆子大,直接宣称不搞硬件竞赛的。 从硬件参数上来看,Moto X却...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度