VC与Matlab的混合编程实现图像的三维显示

上传人:飞*** 文档编号:40215735 上传时间:2018-05-24 格式:DOC 页数:6 大小:42.50KB
返回 下载 相关 举报
VC与Matlab的混合编程实现图像的三维显示_第1页
第1页 / 共6页
VC与Matlab的混合编程实现图像的三维显示_第2页
第2页 / 共6页
VC与Matlab的混合编程实现图像的三维显示_第3页
第3页 / 共6页
VC与Matlab的混合编程实现图像的三维显示_第4页
第4页 / 共6页
VC与Matlab的混合编程实现图像的三维显示_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《VC与Matlab的混合编程实现图像的三维显示》由会员分享,可在线阅读,更多相关《VC与Matlab的混合编程实现图像的三维显示(6页珍藏版)》请在金锄头文库上搜索。

1、基于基于 VCVC 与与 MatlabMatlab 的混合编程实现的混合编程实现图像的三维显示图像的三维显示陈翔 李进文 吴小雅(广州气象卫星地面站 广州 510640)摘摘 要要 本文介绍了 VC+与 Matlab 混合编程的一般实现方法,并实现对二维影像图的三维效果显示。关键词关键词 VC+ MATLAB M 文件 三维显示引言引言通常我们看到的图像是二维状态下的,而在某些特殊领域需要根据三维影像才能做出更进一步的信息抽取,这就需要通过后处理的手段根据原始二维影像虚拟出其三维效果。MATLAB 既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程

2、序开发提供了最核心的数学和高级图形工具。根据它提供的 500 多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。MATLA 具有强大的矩阵运算、数据处理和图形显示功能,其输出结果可视化,编程效率极高,极少的代码即可实现复杂的运行.然而其边解释边执行,运算效率较低,实现相同功能的代码跟其他编程平台相比运行时间相对较长,且不适合作为通用的编程平台。因此,为系统整体效率考虑,采取具有很高编程效率的通用编程平台VC+与 Matlab 混合编程的方式,将更有助于发挥 Matlab 和 VC 的各自优势。1 VC+与与 Matlab 几种常用的集成方法几种常用的集

3、成方法 Matlab 与 VC+混合编程的具体方式有多种,根据 Matlab 是否运行可大致分为两类:Matlab 在后台运行和可以脱离 Matlab 环境运行。Matlab 5.0 以后版本均自带 C/C+编译器,可将其程序文件(M 文件)转换为 C-MEX 或 C/C+程序。第一种方式是 Matlab 引擎采用客户机/服务器的计算方式,通过 Windows 的ActivcX 通道和 Matlab 接口。在具体的应用中,VC 的程序作为前端客户机,通过调用 Matlab 引擎在后台与 Matlab 服务器建立连接,实现动态通信。这种方法实现较为简单,不要求连接整个 Matlab,只需要嵌入必

4、要的 Matlab 引擎库,可大大地节省系统资源,但这种 Matlab 在后台运行,运行效率低下。 第二种方式是使用 Mathtools 公司推出的 Matlab 集成编译开发平台 Mideva,它提供了对 M 文件的解释执行和开发环境支持。经过简单设置后 Mideva 可以将 M 源文件转换为 C/C+,然后添加到 VC+工程中。 也可以先利用 Mideva直接生成 EXE 文件(方法是启动 Mideva,在菜单“File-Compile to exe“中, 选出需要转换的 M 文件),然后在 VC+中通过 shellexec()或 winexec()等外部函数完成 Shell 调用。这种方

5、法简单方便,但运行时出现一个控制台窗口,而且由于 VC 和 Matlab 之间不能交互,通用性差。 第三种方式是通过 Mablab 编译器将其 m 文件转换成为 C/C+代码文件并生成必要的 dll 库后再通过 VC+编译器生成可独立执行的应用程序,这种方式可以直接调用其中的库函数,生成并发布不必依赖 Matlab 的可执行文件。在建立好函数 m 文件(不能是脚本 m 文件)后,用 mcc 命令将其转换为 C+代码,命令行参数如下(假定 m 文件为 test.m):mcc -t -L Cpp test.m然后继续生成动态链接库函数:mcc -t -W lib:test2 -T link:lib

6、 test.m需要注意的是,“lib:“后跟生成的库文件名不能和原 m 文件名相同(此处为test2),而且此处只能生成 C 语言方式的动态链接库。该编译命令共生成 9 个文件,其中 test.lib 和 test.dll 是可以在 C/C+应用程序中调用的动态链接库文件。最后一种方式是通过 Matlab Add-in 实现 Matlab 与 VC 的混合编程,这是最方便的也是本文下面将要使用的集成方式。在 Matlab 6.0 以后版本对其编译器作了较大的改进,其支持更多的数据类型,更强的优化功能,更为重要的是其 Matlab Add-in 提供了一个 Matlab 和 VC 直接集成的途径

7、。它具有一些新的特征:快速集成 M 文件到 C+工程中,创建独立的 C/C+应用程序或 C MEX DLL;通过 M 文件创建共享库或 MEX 文件;内含 Visual Matrix Viewer,调试过程中可以查看矩阵变量的值; 直接修改 M 源文件而不是修改生成的 C/C+文件;方便快捷地打包应用程序等。下面给出 Matlab Add-in 的具体安装步骤:1. 1 启动 Matlab,运行“mex-setup“,按照菜单提示选取 MSVC。它将配置 MEX 使用 VC 为默认的编译器(创建 C-MEX 文件必需),并安装 Matlab Add-in 所需文件到 VC 目录。 1.2. 在

8、 Matlab 环境下运行“mbuild-setup“, 按提示选取 MSVC。它将配置使用 VC 为默认的编译器(创建独立应用程序必需),并安装 Matlab Add-in 所需的 Matlab Compiler 和 C/C+数学库文件到 VC 目录。 1.3. 在 Matlab 环境下运行“cd(prefdir)“和“mccsavepath“。它将保存当前 Matlab路径到 mccpath 文件中,这是因为 Matlab Add-in 脱离 Matlab 运行,否则它无从知道 Matlab 路径。 1.4. 启动 VC 环境,从菜单“Tools - Customize“选择“Add-in

9、s and Macro Files“选项卡,选中“Matlab Add-in“, 点击“Close“。VC 工具栏出现 Matlab Add-in 图标,完成 Matlab Add-in 的配置,以后每次启动 VC 将自动加载 Matlab Add-in。1.5. 配置 Windows 系统。如果是 Windows 95/98 系统,找到 config.sys, 添加一行:shell= c: /e:32768 /p;如果是 Windows ME 则需设置 Conagent.exe 的属性 Memory 选项卡的 Initial Environment 值为 4096。2 三维显示程序的创建三

10、维显示程序的创建三维显示处理的核心部分由 Matlab 实现,首先通过 imread()与 imfinfo()函数得到图象点阵数据及其大小,在 meshgrid()创建相应的网格后以图象灰度值作为高度坐标值,并通过 meshc()进行三维网格绘制,最后由 surf()完成表面绘制。具体实现代码如下:% 读取图象数据到矩阵A, map = imread(input.bmp);% 得到图象信息info = imfinfo(input.bmp);w = info.Width;h = info.Height;% 创建与图象大小相对应的网格x,y = meshgrid(1:w,1:h);z = x -

11、y + y - x;i = 1;j = 1;% 用图象灰度值填充高度值while (i - 1) * w + j wj = 1;i = i + 1;end end;% 绘制三维图象meshc(x,y,z);% 绘制表面surf(x,y,z,FaceColor,interp,EdgeColor,none,FaceLighting,phong)此 m 文件创建完毕后,启动 VC+,创建一个“Matlab Project Wizard“工程,选择所生成的应用程序的类型为 Windows Console EXE、C+程序、Debug模式、生成 Main 函数、需要图形支持。点击“Finish“后在出现

12、的对话框中将刚创建的 M 文件添加到工程,这时 VC 将调用 MCC 生成一个混合 M 文件和 C+的工程。在“File View“选项卡中可以看到添加的 M 文件和自动生成的 C+文件。 编译运行后,将能够实现二维图像的三维显示。3 在主程序中完成对三维显示程序的调用在主程序中完成对三维显示程序的调用由于上述三维显示程序只是整个系统中的一个部分,因此还需要在主程序中通过 CreateProcess()完成对其进程的创建:char cCommandLineMAX_PATH;PROCESS_INFORMATION pi;STARTUPINFO si = sizeof(si);/ 启动子进程CSt

13、ring sCommandLine = GetCurPath() + “LandmineShower.exe“;:strcpy(cCommandLine, sCommandLine);CreateProcess(NULL, cCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, 三维显示程序是一个控制台程序。如果需要隐藏其界面,可以在其进程创建完毕之后通过 FindWindow()函数找到其窗口句柄并进而通过向 ShowWindow()指定该窗口句炳来实现:Sleep(100);/ 关闭子进程的主线程句柄CloseHandle(pi.hThread);/

14、 隐藏控制台窗口m_hwnd3DShower = :FindWindow(NULL, sCommandLine);if (m_hwnd3DShower != NULL):ShowWindow(m_hwnd3DShower, SW_HIDE);4 4 小结小结混合编程是综合使用多种开发工具技术优势的一种常用手段,本文通过对VC+和 Matlab 的集成开发,以精练的代码和较高的运行效率实现了对二维遥感影像的三维效果显示。通过本文所述 Matlab 与 VC+集成开发方法,读者可以自行对其他类似程序进行开发。当然,也可以根据实际需要,灵活选用除本文所用方法外的其他三种集成开发方法。参考文献:参考文献:1 Charles Wright(美)等著 张劲生 张晓明 等译 Visual C+程序员实用大全(精华版) 中国水利水电出版社2 Rafael C. Gonzalez, Richard E. Woods, Steven L. Eddins (著) 阮秋琦(译)数字图像处理(MATLAB 版)(中文版) 电子工业出版社

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号