INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Linie aus Bild in Pfad umwandeln



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

10.03.2014, 21:06 (Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2014 21:09 von blueberry99.)
Beitrag #1

blueberry99 Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Mar 2014

2013 Student Edition
-
EN



Linie aus Bild in Pfad umwandeln
Hallo,

ich stecke aktuell etwas fest. Ziel ist die Eingabe eines Bildes mit irgendeiner schwarzen Form auf hellem Hintergrund und die Umwandlung dieser Form in einen Pfad, welcher dann an ein Gerät ausgegeben werden soll, damit dieses den Pfad abfährt. Beispiel einer solchen Form:
   

Nun habe ich bislang zwar die Form erkennen können und auch eine Kantenerkennung durchgeführt, aber damit bin ich natürlich noch meilenweit von einem pfad entfernt.
Ich hoffe ihr versteht etwa worauf ich hinaus will und könnt mir helfen. Noch mal in Kurzform: das was vorn als Bild eingegeben wird, soll hinten von einem Gerät mechanisch ausgegeben werden. Mein Problem bezieht sich aktuell nur auf die Eingabe und umwandlung der Daten in einen Pfad/eine Vektorgrafik

lg

p.s: ich hab vor Jahren mal mit Labview simple Rechenaufgaben und Schleifen durchgeführt, mit Vision arbeite ich erst seit einigen Wochen.


Angehängte Datei(en)
13.0 .vi  projekt (2).vi (Größe: 54 KB / Downloads: 307)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
11.03.2014, 09:33
Beitrag #2

b.p Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 197
Registriert seit: Oct 2010

2009-14
-
DE_EN


Sonstige
RE: Linie aus Bild in Pfad umwandeln
Hi,
danke fürs Anhängen vom Programm, damit können wir schon mal arbeiten.
Kannst du auch noch das Bild mit dazuhängen?

Ein paar Fragen, bevor wir das gemeinsam lösen:
- Ist die Linie immer gleich dick?
- Ist sie immer ein “geschlossener Pfad”?
- Kann sie sich kreuzen / aufteilen?
- Ist der Startpunkt definiert? Wenn nein, können wir den ganz linken Punkt nehmen?
- Weisst du, in welcher Diskretisierung die Ansteuerung gehen soll?
- Gibt es einen Grund, warum du das in die Schleife getan hast?

Viele Grüsse
Birgit
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.03.2014, 11:38
Beitrag #3

blueberry99 Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Mar 2014

2013 Student Edition
-
EN



RE: Linie aus Bild in Pfad umwandeln
(11.03.2014 09:33 )b.p schrieb:  Hi,
danke fürs Anhängen vom Programm, damit können wir schon mal arbeiten.
Kannst du auch noch das Bild mit dazuhängen?

Ein paar Fragen, bevor wir das gemeinsam lösen:
- Ist die Linie immer gleich dick?
- Ist sie immer ein “geschlossener Pfad”?
- Kann sie sich kreuzen / aufteilen?
- Ist der Startpunkt definiert? Wenn nein, können wir den ganz linken Punkt nehmen?
- Weisst du, in welcher Diskretisierung die Ansteuerung gehen soll?
- Gibt es einen Grund, warum du das in die Schleife getan hast?

Viele Grüsse
Birgit

hatte ich eigentlich angehangen. hier noch mal.

- Ist die Linie immer gleich dick? -> nein, beliebig dick , wobei ab einer bestimmten Dicke nicht mehr die übergabe eines einfachen pfads genügt (beispielsweise bei einem schwarzen Tattoo) aber für den Anfang würde es ein Pfad für eine beliebige strichdicke auch tun
- Ist sie immer ein “geschlossener Pfad”? nein, beliebige formen
- Kann sie sich kreuzen / aufteilen? ja kann sie
- Ist der Startpunkt definiert? Wenn nein, können wir den ganz linken Punkt nehmen? kein startpunkt, kann beliebig gewählt werden, das resultat soll nur auf ein blatt papier passen, von daher ist es natürlich gut, wenn man etwa abschätzen kann, wo das bild entsteht Wink
- Weisst du, in welcher Diskretisierung die Ansteuerung gehen soll? Über die Ansteuerung weiß ich leider noch nichts, das gerät scheint aber mit vektorgrafiken zurecht zu kommen
- Gibt es einen Grund, warum du das in die Schleife getan hast? damit ich die schwellwerte anpassen kann und gleich die änderung sehe. Ziel war es erst die ausgabe anzupassen und das ergebnis zu sehen, dann auf OK zu klicken und die Daten werden zur ausgabe geschickt.

lg


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.03.2014, 13:38
Beitrag #4

b.p Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 197
Registriert seit: Oct 2010

2009-14
-
DE_EN


Sonstige
RE: Linie aus Bild in Pfad umwandeln
Tut mir Leid, aber du vermischst da ein bisschen Begriffe.
"Pfad nachfahren" / "Vektorgrafik" ist eine sehr schwammige Aufgabenstellung, die je nach Feld was ganz, ganz unterschiedliches sagen.

Dieser Satz hier: "wobei ab einer bestimmten Dicke nicht mehr die übergabe eines einfachen pfads genügt (beispielsweise bei einem schwarzen Tattoo) aber für den Anfang würde es ein Pfad für eine beliebige strichdicke auch tun" deutet auf 2 Probleme, die ziemlich unterschiedlich sind.
Das eine interpretiere ich als Kanten- oder Konturverfolgung. Das andere beschreibt die Vektorisierung einer Grafik.

Was ist für dich ein Pfad?
- Ist das ein Array mit einzelnen x-y-Koordinaten?
- Hängen die zusammen?
- Ist das eine Abfolge an Steuerbefehlen (geh auf Pos x/y)
- ist das ein Datenformat, das etwa Linien und geometrische Formen beschreibt, und wenn ja, wie?
- ist es ein binarisiertes (also meinetwegen geglättet schwarz-weisses) svg-Bild?

Beschreib mal genauer, was du für Daten du wirklich brauchst, damit wir dir helfen können, dort hinzukommen.
Das heisst, gibt mir den gewünschten Output. Und zwar nicht "das wird an einen Drucker geschickt", sondern ein Beispieldatensatz.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.03.2014, 15:47 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2014 15:48 von blueberry99.)
Beitrag #5

blueberry99 Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Mar 2014

2013 Student Edition
-
EN



RE: Linie aus Bild in Pfad umwandeln
Der Begriff "Pfad" stammt bei mir wohl aus der Bildbearbeitung. Da gibt man mit einem Pfad die Form und Richtung eines Elements vor.

Gehen wir mal von dem Begriff Pfad weg und hängen uns nicht an worten auf.

Also als hoffentlich einfach verständliches Beispiel:

Ich gebe das Bild von oben ein, passe eventuell ein paar Einstellungen (schwellwerte etc) für eine bessere ausgabe an, sehe vorab das theoretische ergebnis in einem fenster zur kontrolle und klicke auf ok. anschließend malt mir z.b. ein x-y-schreiber mit einer dünnen bleistiftspitze die eingegebene Form (immer schwarz auf hellem untergrund) auf ein Blatt Papier.
Im Folgenden habe ich mal ein paar Beispiele gemalt. Flächen müssten in viele einzelstrichte aufgeteilt werden, da die bleistiftspitze ja sehr dünn ist.

Das letzte Beispiel ("optimal") wäre die beste Lösung, wahrscheinlich auch leichter zu erreichen als die "fortgeschrittene". Eure Hilfe würde mir an sich schon bezüglich der simplen Lösung reichen, wenn es zu viel Arbeit ist.

Einen Beispieldatensatz kann ich dir nicht geben.

lg


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.03.2014, 17:40
Beitrag #6

b.p Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 197
Registriert seit: Oct 2010

2009-14
-
DE_EN


Sonstige
RE: Linie aus Bild in Pfad umwandeln
Ich habe nicht nach einem Datensatz gefragt, weil es mir um Begriffe geht (in der Bildbearbeitung gibt es den Begriff des Pfads auch schon lange und er wird sehr unterschiedlich interpretiert und implementiert. Ich war mal aktiver an Inkscape und GIMP beteiligt, da sind so Themen sehr, sehr umstritten.. )
Sondern ich habe den Eindruck, dass du dir erst mal eine "technische" Definition davon machen solltest, was du willst. Ja, die Grafik hilft. Nein, ich kann dir auf Basis davon nicht dein Problem vollständig lösen, weil man eine Ausgabe nur dann erzeugen kann, wenn man weiss, wie sie aussehen soll. Und das ist nun mal ein Beispieldatensatz. Auch wenn man ihn von Hand generiert und er vielleicht nur einen Kreis und eine Linie und eine Fläche beinhaltet.

Nichtsdestotrotz, fang ich mal an.

Ich hab mir dein Threshold-Programm mal angeschaut. Es ist ganz ok so. Statt dem invertieren hättest du einfach die Schwellen umdrehen können, aber das ist eigentlich egal.
Das mit der Schleife ist eine gute Idee, aber wenn du mehr mit so was arbeitest, empfehle ich dir, dass du das Tool Vision Assistant zu Gemüte führst - da kannst du genau diese Funktionalität live durchführen.
Ich persönlich würde vermutlich einen dynamischen Threshold einführen, einfach aus dem Grund, weil die meistens stabiler sind. Aber den musst du an deinen Probedaten selber testen. (nein, das soll nicht ein Bild sein, sondern eine ganze Liste von möglichst trivial (Linie, Kreis, Fläche) bis schwer, mit Belichtungen in der gesamten Schwankungsbreite).

Das mit dem Kantendetektieren ist vermutlich irreführend. Du findest damit die Konturen - aber die sind dann auch wieder einfach nur Pixel und du hast nix gewonnen.

Ein Weg wäre die Konturanalyse. Wie die eingesetzt wird, kannst du zum Beispiel in der Antwort nachschauen, die ich Jan hier gegeben habe: http://www.labviewforum.de/Thread-Bilder...den-Linie. Da "verfolgen" wir genau eine Linie.

Da ich aber nicht der Meinung bin, dass es das ist, was du brauchst, werde ich nur auf Rückfragen darauf eingehen.
Du hast geschrieben "das gerät scheint aber mit vektorgrafiken zurecht zu kommen"
Genau das werden wir erzeugen.

Das mache ich in 2 Schritten:
1) Vorverarbeitung (Binarisierung des Bilds) - leicht adaptiert von dem, was du gemacht hast. Dann ein bisschen Glättung - je "gröber" die Zeichnung ist, desto mehr Information ist ja in so einem Vektorbild drinnen.
2) Umwandlung in ein svg. Das ist nicht etwas, das man selber programmiert, wir rufen dazu ein command-line-Tool auf, das in die Kategorie "tracer" fällt. Das sind Programme, die aus gerasterten Bildern Vektorbilder machen.

LabVIEW unterstützt "native" keine Vektorgrafiken, und wenn man nachforscht, wie lange die Community das schon fordert, wird das auch nicht in der näheren Zukunft passieren. Das näheste, was wir daran haben, sind geometric templates und während ich vermutlich was zusammenhacken könnte, das die verwendet, würde das eher einem Gewaltakt gleichen als vernünftigem Arbeiten.
Es gibt meines Wissens nach 2 vernünftige OpenSource-Tracer-Projekte. Eines davon ist Autotrace (http://www.autotracer.org/), das andere Potrace (http://potrace.sourceforge.net/). Autotrace wird zB in ImageMagick verwendet, Potrace in Inkscape.
Beide haben Stärken und Schwächen, ich nehme hier mal Potrace.
Sie sind GPL lizensiert (aber zumindest Potrace kann man auch so kaufen), zum Thema GPL-Lizenz in kommerziellen Projekten liest du am besten hier nach: https://blog.codecentric.de/2012/05/verw...projekten/
Downloade Potrace, schmeiss es in einen Ordner, und versuch es mal, mit einem Testbild auszuführen.
Code:
potrace -s test.bmp

Wenn ich das Testbild im Anhang als svg ausgeben lasse, krieg ich sowas:

Code:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="857.000000pt" height="765.000000pt" viewBox="0 0 857.000000 765.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,765.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M3440 7069 c-30 -4 -98 -10 -150 -13 -185 -12 -316 -43 -583 -137
-175 -62 -438 -183 -487 -223 -8 -7 -37 -25 -65 -41 -261 -147 -673 -623 -901
-1040 -118 -215 -187 -388 -250 -630 -9 -33 -36 -100 -60 -150 -25 -49 -61
-135 -80 -190 -29 -84 -35 -117 -36 -195 l-2 -95 57 -100 c56 -97 83 -128 200
-227 58 -50 247 -165 334 -204 29 -12 100 -51 157 -85 88 -52 120 -79 193
-159 75 -83 95 -112 134 -201 62 -139 105 -243 124 -304 8 -27 35 -113 59
-190 25 -77 57 -182 71 -233 15 -51 45 -135 68 -187 38 -86 53 -106 162 -221
103 -109 231 -214 260 -214 5 0 22 -10 39 -23 52 -39 295 -154 396 -186 255
-83 487 -132 770 -162 491 -52 533 -54 790 -52 138 1 253 7 320 18 58 9 137
20 175 25 39 4 90 13 115 18 25 6 81 18 125 27 171 36 263 57 330 76 39 11 93
26 120 33 28 7 86 28 130 46 44 17 101 41 127 51 59 23 246 130 313 178 28 19
96 76 153 125 179 156 377 441 489 707 67 158 76 183 92 249 59 244 74 379 66
605 -10 318 -16 362 -92 655 -48 182 -71 241 -215 540 -77 161 -109 222 -135
256 -13 17 -23 36 -23 42 0 6 -18 32 -40 57 -22 26 -61 79 -87 118 -130 199
-249 323 -539 557 -37 30 -122 102 -189 160 -175 151 -230 197 -278 234 -65
49 -174 113 -226 132 -25 10 -62 32 -81 50 -19 18 -78 55 -130 82 -52 27 -122
64 -155 82 -270 146 -359 184 -495 210 -25 5 -110 24 -190 43 -80 19 -188 40
-240 47 -52 6 -111 16 -130 20 -95 24 -398 36 -510 19z m390 -134 c160 -14
254 -28 390 -59 36 -8 115 -26 175 -39 190 -42 267 -67 380 -124 212 -106 370
-197 413 -236 24 -22 87 -59 140 -83 54 -25 115 -54 137 -66 43 -23 172 -125
245 -194 25 -24 59 -53 77 -66 17 -13 112 -90 210 -172 286 -239 321 -276 552
-593 73 -100 231 -379 231 -408 0 -3 25 -61 56 -128 88 -192 103 -228 119
-297 9 -36 23 -83 31 -105 30 -82 71 -337 75 -470 9 -296 3 -387 -41 -600 -23
-112 -26 -121 -89 -277 -84 -211 -193 -391 -358 -592 -49 -59 -86 -92 -252
-223 -70 -56 -278 -172 -346 -193 -22 -7 -45 -16 -50 -21 -37 -29 -239 -85
-530 -148 -582 -126 -784 -132 -1565 -47 -425 47 -764 145 -1055 308 -190 106
-173 93 -286 215 -121 129 -161 211 -239 487 -48 170 -140 437 -178 517 -112
238 -98 216 -217 344 -105 113 -176 166 -323 242 -332 172 -448 258 -510 377
-36 69 -37 74 -36 172 1 105 20 175 65 232 17 23 82 215 94 282 16 90 83 277
141 398 35 73 64 135 64 137 0 10 128 214 213 340 170 252 462 559 638 671
120 76 151 94 239 141 95 51 407 173 510 200 30 8 80 23 110 33 60 20 200 37
405 49 184 11 182 11 365 -4z"/>
</g>
</svg>

Das ist ne relativ saubere Vektorgrafik, die auch in gerendert recht schick aussieht. Wenn dein Drucker was anderes braucht, schau mal, ob er eps oder dxf kann. Das ist ebenfalls eine Option bei der Ausführung von potrace.

Falls nötig, kann man auch die Skalierung manipulieren, entweder durch direkte Manipulierung der transform Zeile (sh unten) oder (schlauer) durch Kommandozeilenbefehle.
Code:
<g transform="translate(0.000000,765.000000) scale(0.100000,-0.100000)"

Das ist alles andere als elegant, aber es ist einfach, und möglicherweise einfach genug, um dein Problem zu lösen.
Bitte schau dir den Quellcode an, ändere ihn so ab, dass er auf deinem PC geht und recherchier als nächsten Schritt, was du wirklich als Daten brauchst.
Für einen Kreis, eine Linie und eine Fläche.

Birgit


Angehängte Datei(en)
13.0 .vi  v01.vi (Größe: 54,81 KB / Downloads: 320)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Image - dicke Linie ziehen gottfried 4 4.957 19.03.2021 19:58
Letzter Beitrag: Martin.Henz
  Bilderkennung: Endpunkte einer nicht geraden Linie Ruthenium-Jan 6 8.689 29.01.2014 10:38
Letzter Beitrag: b.p
  Bild Einlesen / Umwandeln / Texturerkennung sebsc 1 4.015 07.11.2013 10:58
Letzter Beitrag: unicorn
  Senkrechte Linie zu erkannter Kante setzen (LV2012) Peter Schulze 9 6.055 06.09.2012 13:53
Letzter Beitrag: jg
  32 Bit Bild in 8 bit Bild umwandeln Yvonne 3 10.630 21.02.2010 16:38
Letzter Beitrag: jg
  Bild in s/w umwandeln und ein Koordinatensystem einfügen Safa 24 21.991 03.07.2009 22:02
Letzter Beitrag: unicorn

Gehe zu: