2017-05-09 4 views
0

Ich habe zwei FragenKonvertierung von Doppel in Struct ist nicht möglich

(1) Warum generiert der folgende Code diesen Fehler? Woher kommt double?

Error using horzcat 
The following error occurred converting from double to struct: 
Error using struct 
Conversion to struct from double is not possible. 

Error in remove_scratch (line 34) 
     old1 = [lines1, max_vertex1] ; 

(2) wie man diesen Fehler los wird?

Relevant Source Code

for n = 1:N  
    % take n-th image 
    hough_trf_input = monochrome_image(:,:,n); 
    % find straight lines in the image 
    [hough_lines, thetas] = hugh_transform(hough_trf_input); 

    %//////////////////////////////////////////////////////////// 
    [lines1, max_vertex1] = find_lines(hough_lines, thetas(1)); 
    [lines2, max_vertex2] = find_lines(hough_lines, thetas(2)); 
    [lines3, max_vertex3] = find_lines(hough_lines, thetas(3)); 

    if(n==1) 
     old1 = [lines1, max_vertex1]; 
     old2 = [lines2, max_vertex2]; 
     old3 = [lines3, max_vertex3]; 
    else 
     oldlen1 = vertex_length(old1(2)); 
     oldlen2 = vertex_length(old2(2)); 
     oldlen3 = vertex_length(old3(2)); 

     newlen1 = vertex_length(max_vertex1); 
     newlen2 = vertex_length(max_vertex2); 
     newlen3 = vertex_length(max_vertex3); 

     if(newlen1 > oldlen1) 
      old1 = [lines1, max_vertex1] ; 
     end 

     if(newlen2 > oldlen2) 
      old2 = [lines2, max_vertex2] ; 
     end 

     if(newlen3 > oldlen3) 
      old3 = [lines3, max_vertex3] ; 
     end 
    end   
end 

find_lines() Hier liefert einen Vektor, dessen erstes Element ein Vektor von line -structs, und das zweite Element ist ein Vektor von zwei Vektoren, wobei jeder Vektor 2-Element ist und repräsentiert eine Achse.

+0

Wir müssen wissen, was die Ausgabe Arten sind für 'find_lines'. Sollten Sie nicht Arrays anstelle von fortlaufend nummerierten Variablennamen wie 'old1',' old2', 'old3' verwenden? In der Tat könnte dies eine Aufgabe für Zellen-Arrays sein. – beaker

+0

@beaker, 'find_lines()' gibt einen Vektor zurück, dessen erstes Element ein Vektor von 'line'-Objekten ist, und das zweite Element ist ein Vektor von zwei Vektoren, wobei jeder Vektor ein 2-Element ist und eine Achse darstellt. – anonymous

Antwort

1

eine der Variablen {lines1, max_vertex1} ist struct und die andere ist doppelt. von ihren Namen ich denke, lines1 ist struct und max_vertex1 ist doppelt. Sie können den gleichen Fehler erhalten, wenn ausgeführt wird:

clear 
% lines1 is struct 
lines1.p1 = 1; 
lines1.p2 = 1; 
% max_vertex1 is double 
max_vertex1 = 5; 
old1 = [lines1, max_vertex1] ; 

Es gibt mehrere Möglichkeiten, dies zu überwinden, zum Beispiel, um die Struktur Felder in Doppel mit struct2array extrahieren:

old1 = [struct2array(lines1), max_vertex1] ; 
+0

'find_lines()' gibt einen Vektor zurück, dessen erstes Element ein Vektor von 'line'-Objekten ist, und das zweite Element ist ein Vektor von zwei Vektoren, wobei jeder Vektor ein 2-Element ist und eine Achse darstellt. – anonymous

Verwandte Themen