Kantendetektion (Canny Edge) auf CPU und GPU.

azdr

Lieutenant
Registriert
Feb. 2005
Beiträge
685
Hi,

Ich wollte mal Fragen ob es in MS Visual Studio 2013 ohne weiters möglich ist unter Einbindung von OpenCL für AMD.SDK , eine Kantendetektion für ein jpg Bild via Canny Edge Algorithmus wahlweise einmal auf der CPU(intel) oder auf der GPU (AMD) ausführen kann.

Ich will quasi letztendlich das Kantendetektiere Bild haben, und wissen wie hoch der Leistungsgewinn gegenüber der CPU ist wenn man die Kantendetektion auf der GPU durchführt.

Den Ablauf stell ich mir folgerndermaßen vor:
1) Input: jpeg Bild einlesen
2) Auswahl im Dos Eingabefenster ob man Canny Edge auf CPU od. auf GPU ausführen will.
3) Output : Kantendetektiertes jpeg Bild und die Verbrauchte Zeit für die Konvertierung.

Steckt der Canny Edge Algorithmus schon in der OpenCl Biblothek drinnen so das man ihn nur noch aufrufen und die Parameter übergeben muss?
Gibt es evt. so eine ähnliche Implementierung wo ich mir das genauer anschauen könnte?

lg
 
Natürlich ist sowas Problemlos möglich.
In OpenCl selber ist kein Canny drinnen. Da du aber nach Bibliotheken fragst, würde ich dir OpenCV ans Herz legen. Das ist eigentlich "die" freie Bildverarbeitungsbibliothek. Einen Canny-Detektor gibt es dort als "normale" Version, OpenCl-Version und auch CUDA-Version.
Die Bibliothek müsstest du dir ein mal manuell bauen und drauf achten das OpenCl aktiviert ist (ggf. auch CUDA). Danach kannst du ziemlich schnell eine erste Implementierung machen.
Außerdem werden sämtliche Quellen mitgeliefert. Wenn du magst kannst du dir also auch den Source-Code anschauen.
 
Danke für die Info.

Ich hätte noch eine Grundsätzliche Frage wenn ich das Programm sprich die Kantenerkennung unter Einbindung von Open CL laufen lasse werden dann die Berechnungen automatisch auf die GPU ausgelagert?

Gibt es in Visual Studio eine Option wo man sich die Verarbeitungszeit anzeigen lassen kann bzw lange der Prozess in Anspruch genommen hat?

lg
 
azdr schrieb:
Ich hätte noch eine Grundsätzliche Frage wenn ich das Programm sprich die Kantenerkennung unter Einbindung von Open CL laufen lasse werden dann die Berechnungen automatisch auf die GPU ausgelagert?
Das kann ich dir nicht beantworten, da wir sonst nur die CUDA-Implementierungen genutzt hatten. Vermutlich kann man das aber irgendwie setzen, auf welchem Device es berechnet werden soll.

azdr schrieb:
Gibt es in Visual Studio eine Option wo man sich die Verarbeitungszeit anzeigen lassen kann bzw lange der Prozess in Anspruch genommen hat?
Die "großen, teuren" Versionen können das. Allerdings kannst du die Zeit auch recht einfach mit OpenCV messen lassen. Mit den Funktionen getTickCount einfach die Prozessortakte vor und nach den Funktionsaufrufen ausgeben lassen und danach und die Differenz mit getTickFrequency in die reale Zeit umrechnen lassen.
 
Zurück
Oben