Reference to a cleared variable seg_result.
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Harvey Hu
am 5 Jul. 2016
Bearbeitet: Stephen23
am 5 Jul. 2016
Hi friends After I runned the following program:
clear all;
clc;
close all;
load('result_3.mat');
load('mouse3.mat');
load('P.mat');
load('b.mat');
Evalue = b;
Evector = P;
showcs3(mouse);
hold on;
h=[]; h2=[];save_b=[];
location = newkidney;
location(:,3) = round(location(:,3));
for k=1:3
[faces,tnorm]=MyRobustCrust(location);
N=ASM_GetContourNormals3D(location,faces);
[gt,dgt]=ASM_getProfileAndDerivatives3D(mouse,location,N,5);
move=zeros(length(location),3);
[C1,I1]=max(abs(dgt));
xi=location(:,1)-N(:,1).*(I1-6)';
yi=location(:,2)-N(:,2).*(I1-6)';
zi=location(:,3)-N(:,3).*(I1-6)';
move=[xi,yi,zi];
if(ishandle(h2)), delete(h2); end
pause(0.5)
h2=plot3(move(:,1),move(:,2),move(:,3),'.r'); drawnow('expose');
move_pos=[move(:,1);move(:,2);move(:,3)];
location1=[location(:,1);location(:,2);location(:,3)];
b =Evector'*(move_pos-location1);
maxb=3*sqrt(Evalue');
b=max(min(b,maxb),-maxb)
xy_search(:,k) = location1 + Evector*b;
save_b=[save_b,b];
pos=[];
pos=xy_search(:,k);
m=length(N);
location=[pos(1:m,1),pos(m+1:2*m,1),pos(2*m+1:3*m,1)];
if(ishandle(h)), delete(h); end
pause(0.5)
h=plot3(location(:,1),location(:,2),location(:,3),'.g');drawnow('expose');
pause(0.5)
end
if(ishandle(h2)), delete(h2); end
figure;
I = load('3.txt');
plot3(I(:,1),I(:,2),I(:,3),'.b');
hold on;
plot3(location(:,1),location(:,2),location(:,3),'.g');
for l = 153:1:227
figure;
QQ = mouse(:,:,l);
imshow(QQ,[]);
hold on;
seg_result(:, 3) = round(seg_result(:, 3));
for i = 1:1:1519
if seg_result(i, 3) == l
plot(seg_result(i, 2),seg_result(i, 1),'.');
hold on;
end
end
for j = 1:1:1510
if I(j, 3) == l
plot(I(j, 2),I(j, 1),'.r');
end
end
end
I saw an error:
Reference to a cleared variable seg_result.
Error in segment (line 70)
seg_result(:, 3) = round(seg_result(:, 3));
If you know how to deal with it,please help me.Thank you!
1 Kommentar
Akzeptierte Antwort
Stephen23
am 5 Jul. 2016
Bearbeitet: Stephen23
am 5 Jul. 2016
This is a classic example of why it is a very bad idea to call load without assigning its output to a variable. It also shows why using clear is pointless and confusing, even though beginners love to use it at the top of every script!
Explanation
Look at your code: on line 70 your use the variable seg_result. But where is this defined? Nowhere. There is no line in your code which defines this variable. Possibly it is (or was) the name of a variable imported by load, but which load ? Because you have chosen to load directly into the workspace we have no way of checking or knowing where this variable comes from. This is why load-ing directly into the workspace is a bad idea, because it makes understanding the code impossible, and impossible to know what variables come from which files. Variables can even be overwritten and it is impossible to know this.
This is a very bad programming style.
Solution
Learn to write code more robustly. Call load with an output argument (a structure), and use that structure:
S = load(...)
...
S.seg_result
0 Kommentare
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!