vc与MATLAB混合编程不能一下输出3个参数结果

问题描述

vc与MATLAB混合编程不能一下输出3个参数结果

MATLAB程序是输出3个参数,但是总是输出第一个参数,然后再vc中调用的时候也是哪个参数在前面那个参数的结果会出来,但是其他两个的结果不会出来,这是为什么呢?还请各位知道的大神帮帮我,谢谢了!这是我的MATLAB程序,直接运行后只是出来第一个参数的值。
function[b,e,h]=shiyan4(a)
%a=imread('lena.bmp');
%figure;imshow(a);
%title('原图像');
a=im2double(a);%将数变为double型数
b=imnoise(a,'gaussian',0.015);
C=im2double(b);
F=im2col(C,[3,3],'distinct');%将加躁图像分割成3*3的小窗口
[i,j]=size(F);
m=zeros(i,j);
n=size(i,j);
for i=1:9
for j=1:5180
m(i,j)=F(i,j)-F(5,j);%用3*3的窗口中的中心值对窗口中的数据求出估计的受躁程度
m(5,j)=0.001;
n(i,j)=m(i,j)./F(5,j);
end
end
%为用accumarray函数把数据变回原来的排列方式做准备
%制造c矩阵
K=[1 1 0;1 2 0;1 3 0;2 1 0;2 2 0;2 3 0;3 1 0;3 2 0;3 3 0];
A=K;
for ii=1:5179;
A=[A;K];
end
g=zeros(1,5180);
F=[1:5180];
F=[g,g,F];
F=[F;F;F;F;F;F;F;F;F];
F=reshape(F,[46620,3]);
c=A+F;
val=reshape(n,[46620,1]);
A=accumarray(c,val);%使用此函数把原来用im2col变成9*5180的矩阵变为一个个3*3的小矩阵
D=reshape(A,[3,15540]);
%将矩阵变为原来的222*210的形式
M = [];
B=[];
for i = 1:3:15538
temp=D(:,i:i+2);

M = [M; temp]; % 使矩阵变为15540*3
end
for j=1:222:15539

TEMP=M(j:j+221,:);
B = [B, TEMP]; % 使矩阵变为220*210
end
%使矩阵为222*208
B=B(1:222,1:208);
E=B+100;
d=100.*a;%求出估计的灰度时用数据
r=d./E;
e=im2uint8(r);
[m,n]=size(e);
for i=1:m
for j=1:n
if (e(i,j)>=0)&&(e(i,j)<=50)
u=23;
q=23/3;
v(i,j)=e(i,j)-u;
V(1)=2*q^2;
elseif (e(i,j)>=51)&&(e(i,j)<=100)
u=83;
q=47/3;
v(i,j)=e(i,j)-u;
V(2)=2*q^2;
else
u=117;
q=138/3;
v(i,j)=e(i,j)-u;
V(3)=2*q^2;
end
end
end
v=im2double(v);
Q=v.^2;
for i=1:m
for j=1:n
if (e(i,j)>=0)&&(e(i,j)<=50)
H(i,j)=im2double(Q(i,j)/V(1));
N(i,j)=exp(-H(i,j));
elseif (e(i,j)>=51)&&(e(i,j)<=100)
H(i,j)=im2double(Q(i,j)/V(2));
N(i,j)=exp(-H(i,j));
else
H(i,j)=im2double(Q(i,j)/V(3));
N(i,j)=exp(-H(i,j));
end
end
end
s=ones(224,210);
l=s*26;
l(2:223,2:209)=e;
o=zeros(224,210);
o(2:223,2:209)=N;
[m,n]=find(l<=25);
q=size(m);
for i=1:q
x(m(i),n(i))=l(m(i)-1,n(i)-1)*o(m(i)-1,n(i)-1)+l(m(i)-1,n(i))*o(m(i)-1,n(i))+l(m(i)-1,n(i)+1)*o(m(i)-1,n(i)+1)+l(m(i),n(i)-1)*o(m(i),n(i)-1)+l(m(i),n(i))*o(m(i),n(i))+l(m(i),n(i)+1)*o(m(i),n(i)+1)+l(m(i)+1,n(i)-1)*o(m(i),n(i)-1)+l(m(i)+1,n(i))*o(m(i)+1,n(i))+l(m(i)+1,n(i)+1)*o(m(i)+1,n(i)+1);
y(m(i),n(i))=o(m(i)+1,n(i))+o(m(i),n(i))+o(m(i)-1,n(i))+o(m(i)+1,n(i)-1)+o(m(i)-1,n(i)-1)+o(m(i),n(i)-1)+o(m(i)-1,n(i)+1)+o(m(i),n(i)+1)+o(m(i)+1,n(i)+1);
l(m(i),n(i))=x(m(i),n(i))/y(m(i),n(i));
end
h=l(2:223,2:209);
h=round(h);
%figure,imshow(h,[]);
%title('第二次去噪效果');
end

解决方案

返回数组或者结构体。

解决方案二:

这个vc是怎么调用的呢,我也没有看到,你可以在好好看下,vc传递参数的部分

时间: 2024-11-03 08:47:49

vc与MATLAB混合编程不能一下输出3个参数结果的相关文章

VC++与MATLAB混合编程及其应用

摘 要 本文详述了在VC++6.0编译环境下如何利用Matlab来实现应用系统的设计和分析, 介绍了通过Matlab与VC应用程序连接的常用方法,分析了VC与Matlab的混合编程的步骤,最 后通过一个具体实例的实现过程对上述方法进行了应用性介绍. 关键词 VC++: Matlab:混合编程 Matlab 是由Math Works 公司于1984 年推出的数值计算及图形处 理软件,可以实现数值分析.优化.统计.偏微分方程数值解.自动控制.信号处理.图像 处理等若干领域的计算和图形显示功能.其中,

VC和Matlab混合编程的问题

问题描述 我想用VS2005以上版本编写一个DLL,然后在Matlab7.1中调用该DLL里的函数.看了很多资料以后,觉得至少有两种方法可行:1.把用C#写好的DLL作为一个COM组件注册到系统中,然后在Matlab中用Actxserver()函数调用该组件.方法如下:在C#中建立一个ClassLibrary工程,然后写好要用到的Namespace,Class以及函数,在工程属性-Application-AssemblyInfomation里的MakeassemblyCOM-Visible选中,

精通VC与MATLAB联合编程&amp;lt;十&amp;gt;——综合举例二

本文使用的工具:VC6.0+MATLAB6.5 在本章中实现的是在VC中调用MATLAB神经网络工具箱,文章中用到的程序是一篇硕士论文的一部分,因此没有提供源程序,目的是通过这个例子介绍如何在VC中调用利用com组件,实现VC和MATLAB数据的交换.首先在MATLAB中完成两个神经网络函数,一个用来检验,一个用来预测. 1.检验函数: function [w1,b1,w2,b2,ET,a2]=SJHSJY(P,T,me,eg,lr,P2,T2,S1) [Pn,meanp,stdp,Tn,mea

vb.net与matlab混合编程的问题

问题描述 vb.net与matlab混合编程,我用matlab编了一个简单的函数,两个输入一个输出,通过deploytool编译成dll文件,但是不知道使用vb.net怎么调用,我以前没用过动态链接库,网上查了好久,也没解决,希望高手指点一下.谢谢! 解决方案 解决方案二:先添加引用进来dll到项目中,然后在窗体里面调用Importsxxx解决方案三:引用1楼Json2008的回复: 先添加引用进来dll到项目中,然后在窗体里面调用Importsxxx 具体怎么调用啊,以前没用过动态链接库解决方

c++-求助:关于C++和matlab混合编程的问题

问题描述 求助:关于C++和matlab混合编程的问题 我最近在做一个东西就是从一个实物上接收到数据后在pc上显示出来 也就是要做一个可以显示数据的软件 我正在用C++做 可是有个问题就是我这个东西是要做成3d显示效果 而c++做三维图形不是很方便 所以我打算用matlab做三维显示 我感到困惑的就是当实物发送数据到软件的数据库中时可以再传输到matlab吗让matlab的显示跟着数据变化而变化?可以将matlab的图形通过软件显示出来吗? 希望各位大神指导下~谢谢啦 解决方案 你可以将Matl

C#调用matlab混合编程时总是出现类型初始值设定项引发异常这种错误

问题描述 C#调用matlab混合编程时总是出现类型初始值设定项引发异常这种错误,请问该如何解决?matlab源码如下:function[y,z]=myadd2(a,b)%dummyfunction,justtodemonstratetheideay=a+b;z=a+2*b;endC#源码如下usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Dra

浅析VC与Matlab联合编程(三)

在"浅析VC与Matlab联合编程<一>"和"浅析VC与Matlab联合编程<二>"中介绍了matcom,这个工具可以将用matlab写的m文件翻译成C++文件,或者是可执行文件(exe)或库文件(dll).但是matcom在很多方面也有限制,比如,对struct等类的支持有缺陷,部分绘图语句无法实现或得不到准确图象,尤其是三维图象. 实际上VC与matlab的接口实现方法有很多种,matcom只是其中一种,本文再介绍一种比较容易实现的方法:

精通VC与MATLAB联合编程(七)

MATLAB Compiler 是MATLAB自带的一个编译器,它能将m文件转化成 C.C++或p等各种类型的源代码,并根据需要生成可执行文件.lib文件(库文件).dll文件或S函数文件等.MATLAB 6.5 使用的编译器包括了MATLAB 的C\C++数学库函数以及图形库.动态链接库(dll)是编写软件中常用的一种技术,MATLAB提供了将M文件编制成dll文件的方法,本文就介绍如何在MATLAB6.5中将m文件z转化成dll文件,然后在VC中调用该dll文件. 1.必须保证编译器的正确配

精通VC与MATLAB联合编程(八)

在上一章中对MATLAB 编译器做了简要介绍,并介绍了如何将m文件转换成VC可调用的dll文件,在这章中介绍如何利用编译器将m文件转换成对应的C\C++文件,并在VC中调用.这章节中的例子是在第四章中介绍过的解线形方程组. 首先要保证编译器设置正确,编译器的设置可以参考前面两章的内容.如果以前已经进行了配置就不需要这一步. 1.在MATLAB中编写如下函数: function [x]=gjfcz(A,b) %A=[-1.5 1 2; 4 2 3 ; -3 2 8] %b=[3;5;6] x=A\