Habe leider ein nicht ganz unerhebliches Gechwindigkeitsproblem bei den drei nachfolgenden functions. Diese laufen zwar für sich alleine mit kleinen Matrizen recht schnell, sollten aber in meinem Hauptprogramm schneller laufen, dieses würde momentan leider mehrere Tage rechnen. Wenn jemandem was auffällt wie ich bei den beiden for schleifen im oberen Teil noch Geschwindigkeit gewinnen kann, wärs super.
% Funktion footrot, dreht eine Matrix erg_matrix der selben Gr??e wie mask um alpha. % Es entstehen Koordinaten im Koordinatensystem der Matrix ausschnitt. Gedreht wird % um den Mittelpunkt des mittleren Pixels von Ausschnitt und dem Mittelpunkt der erg_matrix Die % Werte der Matrix erg_matrix entstehen durch eine bilineare interpolation % auf Basis der umliegenden Pixel in ausschnitt. Zur Interpolation werden % die Koordinaten auf das links oben liegende Pixel abgerundet und davon % ausgehend alle weiteren Pixel bestimmt. off_zeil und off_sp verschiebt % die endgueltigen Koordinaten um den Abstand des Ice_Sat Punktes vom Mittelpunkt des Pixels. % Denn dieser f?llt nicht genau auf Mittelpunkt des Pixels. % Dies ist notwendig um eine korrekte Interpolation mit subpixel Genauigkeit zu gewaehrleisten. % F?r Ausschnitt sind nur Matrizen mask mit ungerader Spalten und Zeilen zahl % zugelassen. % Die bilineare interpolation wird nicht durchgef?hrt sobald einer der vier % betroffenen Werte 999999 ist
% Koordinaten, um die herum interpoliert wird, werden um den Abstand vom % Mittelpunkt des Pixels verschoben. --> Interpolation an korrekter Stelle % abh?ngig vom Abstand zum Drehmittelpunkt.
x1 = x1 + off_spalt;
y1 = y1 + off_zeil;
Wow, jetz bin ich wirklich platt, vielen, vielen Dank
Bloss noch für mich zu Erklärung: Was genau sind logische Indizes? Damit hab ich noch nie gearbeitet und sind mir auch noch nie aufgefallen. Wo kann man das ein bischen detaillierte nachlesen?
Der Vollständigkeit halber noch ein Code zum gleichen Problem, der etwa 2 Sekunden schneller geht als der alt, den ich am Wochenende gebastelt habe
% Funktion footrot, dreht eine Matrix erg_matrix der selben Gr??e wie mask um alpha. % Es entstehen Koordinaten im Koordinatensystem der Matrix ausschnitt. Gedreht wird % um den Mittelpunkt des mittleren Pixels von Ausschnitt und dem Mittelpunkt der erg_matrix Die % Werte der Matrix erg_matrix entstehen durch eine bilineare interpolation % auf Basis der umliegenden Pixel in ausschnitt. Zur Interpolation werden % die Koordinaten auf das links oben liegende Pixel abgerundet und davon % ausgehend alle weiteren Pixel bestimmt. off_zeil und off_sp verschiebt % die endgueltigen Koordinaten um den Abstand des Ice_Sat Punktes vom Mittelpunkt des Pixels. % Denn dieser f?llt nicht genau auf Mittelpunkt des Pixels. % Dies ist notwendig um eine korrekte Interpolation mit subpixel Genauigkeit zu gewaehrleisten. % F?r Ausschnitt sind nur Matrizen mask mit ungerader Spalten und Zeilen zahl % zugelassen. % Die bilineare interpolation wird nicht durchgef?hrt sobald einer der vier % betroffenen Werte 999999 ist
% Koordinaten, um die herum interpoliert wird, werden um den Abstand vom % Mittelpunkt des Pixels verschoben. --> Interpolation an korrekter Stelle % abh?ngig vom Abstand zum Drehmittelpunkt.
%y1 = y1 + off_zeil;
%x1 = x1 + off_spalt;
vielleicht ist dies Video von Doug Hull etwas für dich, oder dieser Text von Steve Eddins und Loren Shure. Oder Du suchst mal im Forum nach "logische Indizierung" oder "logical indexing".
Herzliche Grüße
Bijick
_________________
>> why
Andfirst1
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.03.2009, 14:34
Titel:
Hi bijick,
Hab jetzt noch ausgiebig getestet. Leider haut das mit dem Fehler = 0 nicht hin bei mir. Lass mal in dem von dir zitierten Beispiel das max() weg, dann bekommst du einen Vektor, der negative Fehler beinhaltet. Der maximale davon is 0. Leider hab ich noch nicht rausgefunden wo der Fehler liegt, hast du da noch ne Ahnung, wos ein Problem geben könnte?
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.