2016-06-09 17 views
0

My Bildarray: C_filled = 256x256x3270eine struct mit neuen Werten in einer Aktualisierung für Schleifen

Was würde ich zu tun ist, um die Zentroide jedes Bildes zu berechnen, und speichert jeden Flächenschwerpunkt zu jeder ‚Scheibe‘/Bild entspricht, in ein Array. Allerdings, wenn ich versuchen, das Array zu aktualisieren, wie eine regelmäßige Anordnung, bekomme ich diesen Fehler:

"Undefined operator '+' for input arguments of type 'struct'." 

ich den folgenden Code haben:

for i=1:3270; 

cen(i) = regionprops(C_filled(:,:,i),'centroid'); 

centroids = cat(1, cen.Centroid);% convert the cen struct into a regular array. 

cen(i+1) = cen(i) + 1; <- this is the problem line 

end 

Wie kann ich das Array aktualisieren jede neue zu speichern Zentroid?

Vielen Dank im Voraus.

Antwort

0

Das ist, weil die Ausgabe von regionprops (d. H. cen(i)) eine Struktur ist, zu der Sie versuchen, den Wert 1 hinzuzufügen. Aber da Sie versuchen, den Wert der Struktur und nicht eines seiner Feld hinzuzufügen, schlägt es fehl.

Unter der Annahme, dass jedes Bild mehrere Objekte (und daher Zentroide) enthalten kann, wäre es am besten (denke ich), ihre Koordinaten in ein Zellenfeld zu speichern, in dem jede Zelle eine andere Größe haben kann als ein numerisches Array . Wenn Sie genau die gleiche Anzahl von Objekten in jedem Bild haben, können Sie ein numerisches Array verwenden.

Wenn wir die "Zellenfeld" Option mit Code aussehen:

%// Initialize cell array to store centroid coordinates (1st row) and their number (2nd row) 
centroids_cell = cell(2,3270); 

for i=1:3270; 

%// No need to index cen...saves memory 
cen = regionprops(C_filled(:,:,i),'centroid'); 

centroids_cell{1,i} = cat(1,cen.Centroid);  
centroids_cell{2,i} = numel(cen.Centroid); 

end 

und das ist es. Mit dieser Notation können Sie auf die Schwerpunktkoordinaten eines beliebigen Bildes zugreifen: .

+0

Danke! funktioniert perfekt, gibt es eine Möglichkeit, eine zusätzliche Spalte von 1-3270 zu den Zentroiden hinzuzufügen, z.B. [x, y, z], da dies der Länge des betreffenden Objekts entspricht. – Idrawthings

+0

Yep bitte sehe meine Bearbeitung –

+0

Hmm, scheinen alle Indexwerte 2, auch ich suchte nach 3x3270 Art von Array, ähnlich einem 3D-Koordinatensystem. Im Wesentlichen würde ich die [x, y] Zentroidkoordinaten haben und eine zusätzliche Matrix von 1: 3270 hinzufügen. – Idrawthings