问题描述
- 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:15539TEMP=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传递参数的部分