WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Performance beim Weichzeichnen verbessern

 

captaincaos
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 07.12.16
Wohnort: ---
Version: 2016a, 2016b, 2018a
     Beitrag Verfasst am: 22.02.2017, 08:31     Titel: Performance beim Weichzeichnen verbessern
  Antworten mit Zitat      
Hallo liebe Community,

ich habe ein Programm zur Bildverarbeitung/-auswertung geschrieben. Soweit funktioniert es auch, nur ist es noch zu langsam.

Die meiste Rechenzeit geht für das Weichzeichnen drauf, da ich jede Spalte der Bildmatrix einzeln weichzeichne. Es darf allerdings auch nur in vertikaler Richtung weichgezeichnet werden und nicht horizontal.

Der Code hierfür sieht momentan so aus:
Code:
image_size = size(image);
image = double(image); % imgaussfilt() mag keine uint8 Variablen

for i=1:image_size(2)
    image(:,i) = imgaussfilt(image(:,i),range);
end
 


Wie man sich bei diesem Code vorstellen kann, wird das ganze für hochauflösende Bilder schon ziemlich langsam. Das ganze dann noch für bis zu 100 Bilder... Rolling Eyes .

Meine Frage ist daher ob jemandem ein effektiverer Weg einfällt um Spaltenweise nur in vertikaler Richtung weich zu zeichnen.

Gruß
Frederik

OT: Kann mir jemand verraten wie die Autokorrektur (Groß-/Kleinschreibung) ausgeschaltet wird? Das nervt unheimlich, vor allem beim eingeben des Codes.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.02.2017, 15:13     Titel: Re: Performance beim Weichzeichnen verbessern
  Antworten mit Zitat      
Hallo captaincaos,

Die Auto-Korrektur gehört zu Deinem Browser, nicht zum Interface des Forums. Also such dort mal in den Einstellungen.

Du könntest den Gauss-Filter selber schreiben:
Code:
sigma = range(1);  % Vielleicht
siz = 2 * ceil(2 * sigma) + 1;
x = linspace(-siz / 2, siz / 2, siz);
gaussFilter = exp(-x .^ 2 / (2 * sigma ^ 2));
gaussFilter = gaussFilter / sum(gaussFilter);
img = filter (gaussFilter, 1, img);

Wenn der Delay nicht passt, verwende:
Code:
conv(img, gaussFilter, 'same');

Ich kann den Code gerade nicht testen und ich habe nicht die Image Processing Toolbox um die Ergebnisse zu vergleichen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.02.2017, 15:56     Titel:
  Antworten mit Zitat      
Hallo,

spätestens wenn das ganze für viele Bilder gemacht werden soll, bietet sich auch Parallelisierung an (for durch parfor ersetzen, benötigt Parallel Computing Toolbox).

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
captaincaos
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 07.12.16
Wohnort: ---
Version: 2016a, 2016b, 2018a
     Beitrag Verfasst am: 22.02.2017, 16:44     Titel:
  Antworten mit Zitat      
Hallo,

danke erst mal für die Antworten.

@Harald: parfor war ein super Vorschlag, hat die Rechenzeit fast halbiert.

@Jan: Habe schon mal versucht das selbst zu schreiben, war ca. 5 mal langsamer. Mein Code dafür sah allerdings ganz anders aus als deiner, deswegen werde ich deinen Ansatz auch noch ausprobieren. Vielleich lässt sich damit noch was rausholen.

Gruß
Frederik
Private Nachricht senden Benutzer-Profile anzeigen
 
captaincaos
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 07.12.16
Wohnort: ---
Version: 2016a, 2016b, 2018a
     Beitrag Verfasst am: 23.02.2017, 10:46     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich habe deinen Vorschlag ausprobiert. Allerdings hat sich damit das ganze Bild nach unten verschoben??
Da ich mit Hilfe des Programms Höhen messen will kann ich diesen Effekt nicht gebrauchen.
Auch konnte ich deinen Vorschlag nicht mit dem von Harald kombinieren, da es da Probleme mit der parfor Schleife gab. Die Fehlermeldung hierzu lautete:
Zitat:
The variable image in a parfor cannot be classified.


Gruß
Frederik
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.02.2017, 11:18     Titel:
  Antworten mit Zitat      
Hallo,

zu dem Problem mit der Parallelisierung siehe hier:
https://www.mathworks.com/videos/se.....ting-tutorials-97719.html(insbesondere Teil 4)

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
captaincaos
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 07.12.16
Wohnort: ---
Version: 2016a, 2016b, 2018a
     Beitrag Verfasst am: 23.02.2017, 16:02     Titel:
  Antworten mit Zitat      
Hallo,

ich konnte die Rechenzeit mit Hilfe von Paralellisierung um ca. 60% reduzieren. Very Happy
Deswegen setze ich diesen Tread mal auf beantwortet und danke euch beiden herzlich für die Hilfe.

Bis zur nächsten Herrausforderung
Frederik
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.