我有一个递归函数,它返回图像的几个中心坐标(x,y)(例如15个中心点)。在每个循环中将结果打印到MATLAB工作空间。如何将它们保存到数组中而不是在输出中显示? (disp(s);)
function [] = findGraphMhmd2(img,x1,y1,x2,y2,dir )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
fontcolor=0;
[x,y]=FindCenter(img , fontcolor , x1,y1,x2,y2 );
%cell{1}=[-1 -1];
%[j,k]=size(cell);
%k=k+1;
%cell{k}=[x y];
s=strcat(num2str(x),',',num2str(y));
disp(s);
%cells=cell;
if (abs(x1-x2)<5 || abs(y1-y2)<5)
return;
else
if(dir)
findGraphMhmd2(img,x1,y1,x2,y,~dir);
findGraphMhmd2(img,x1,y,x2,y2,~dir);
else
findGraphMhmd2(img,x1,y1,x2,y,~dir);
findGraphMhmd2(img,x,y1,x2,y2,~dir);
end;
end;
end
%--------------------------------------------
%---------------------------------------------
function [ xc,yc ] = FindCenter(imgs , fontcolor , x1,y1,x2,y2 )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
black=0;
sigmax=0;sigmay=0;
for x=x1:x2
for y=y1:y2
if imgs(x,y)==fontcolor
black=black+1;
sigmax=x+sigmax;
sigmay=y+sigmay;
%disp(black);str=strcat(num2str(x),',',num2str(y),'=>Ex=',num2str(sigmax),'=>Ey=',num2str(sigmay));disp(str);
end;
end;
end;
if(black==0)
xc=0;yc=0;
else
xc=sigmax/black;
yc=sigmay/black;
xc=round(xc);
yc=round(yc);
end;
end
答案 0 :(得分:3)
在使用disp
的同一行保存内容:
Xstorage(x,y) = sigmax;
Ystorage(x,y) = sigmay;
Xstorage
现在会在sigmax
位置包含您的x,y
。如果x
和y
不是整数,请使用虚拟变量作为计数器,例如循环中的ii=ii+1
并将其用作存储变量的索引。
如果您的x1
,x2
,y1
,y2
不是整数,请按以下方式调用您的循环:
xtmp = x1:stepsize:x2; %// enter desired stepsize
ytmp = x1:stepsize:x2;
for x=1:numel(xtmp)
for y=1:numel(ytmp)
%// calculate stuff on xtmp(x) and ytmp(y) instead of x and y
Xstorage(x,y) = sigmax;
Ystorage(x,y) = sigmay;
end
end
x
和y
现在是指向数组xtmp
和ytmp
的整数指针,其中包含您实际的x
和y
位置。< / p>
将两个新创建的存储变量也设置为函数输出:
function [xc,yc,Xstorage,Ystorage] = FindCenter(imgs , fontcolor , x1,y1,x2,y2 )
答案 1 :(得分:-1)
您可以使用持久变量和全局变量
factorial的脏代码看起来像这样
function temp = myfactorial(x)
persistent numCalls;
global y;
persistent count;
if isempty(numCalls)
numCalls = 0;
end
if isempty(count)
count = 0;
end
if (x==0);
temp = 1;
disp([mfilename ' recursed ' num2str(numCalls) ' times.'])
numCalls = 0;
else
numCalls = numCalls+1;
temp= x*myfactorial(x-1);
count=count+1;
y(count) =temp;
end
确保在每次使用后清除变量。