Ich habe eine riesige 2D Matrix und möchte 15 verschiedene 100x100 Teile daraus extrahieren. Ich habe zwei Vektoren x und y, wo die oberen linken Indizes der Teile gespeichert werden. Ich habe etwas wie folgt verwendet:MATLAB: Extrahiere mehrere Teile einer Matrix, ohne Schleifen zu verwenden
result = cam1(x(1:end):(x(1:end)+99), y(1:end):(y(1:end)+99));
aber das Ergebnis ist nur eine Matrix 100x100 anstelle von 15x100x100. Warum?
Ich weiß, es könnte leicht mit einer Schleife gemacht werden, aber wir dürfen keine Schleifen verwenden (es ist Teil einer Bildverarbeitung). Eine andere Möglichkeit wäre, alle 15 Zeilen zu schreiben, aber das ist irgendwie hässlich.
Haben Sie eine elegante Lösung? Vielen Dank.
nach der Frage, die ich etwas mehr Forschung hat geschrieben zu haben und fand die arrayfun Funktion und ich kam mit den folgenden: digval1 = arrayfun (@ (i) Summe (Summe (cam1 (y (i) :(y (i) +99), x (i) :(x (i) +99))))/10000, 1:15); Dies beinhaltet bereits den nächsten Schritt, den ich machen musste: Berechnen Sie den Durchschnitt über die Teile. aber vielen Dank für Ihre Hilfe, ich weiß jetzt, dass ich das Richtige getan habe und ich habe Ihren Code verwendet, um eine schönere Linie zu bekommen: digval1 = arrayfun (@ (i, j) Summe (Summe (cam1 (j: j +99, i: i + 99)))/10000, x, y); –
Gut zu helfen! Zu Ihrer Information: Wenn Sie Zugriff auf die Image Processing Toolbox haben, gibt es eine Funktion namens MEAN2 (http://www.mathworks.com/access/helpdesk/help/toolbox/images/mean2.html), die Ihre Funktion vereinfachen würde: digval1 = arrayfun (@ (i, j) mean2 (cam1 (j: j + 99, i: i + 99)), x, y); Alternativ können Sie Ihre eigene MEAN2-Funktion schreiben: mean2 = @ (A) mean (A (:)); – gnovice
jetzt das ist sexy :) –