Seite 1 von 2

Randerkennung programmieren ?

Verfasst: 27.03.2019 19:21
von ccode_new
Hallo Leute,

wie könnte man eine automatische Randerkennung für Bilder programmieren ?

Ziel ist es ein Bild mit einem farbigen Polygon (farbige Fläche und farbiger Rand) "zu scannen".

(Also ein Bild mit einem Vieleckigen - Farbigen - Objekt + andersfarbiger Umgebung (z.B. Transparent) )

Das Polygon sollte dann als Ausschnittmaske vorliegen.

(Die detektieren Eckpunkte wären dann am wichtigsten.)

Wie könnte man an so eine Aufgabe herangehen ?

Re: Randerkennung programmieren ?

Verfasst: 27.03.2019 19:29
von man-in-black
Hi,

das hängt doch ganz stark von den Rand-Eigenschaften ab.
Einfarbig? Dann einfach gucken, was bei y/x=0 vorliegt.
einfach? Kontrastsprung zwischen Rand und Bild? Farbspektrum bewerten (Peaks= potenziell Rand?)
Linienerkennung? Zusammenhängende Linien sind potenziell Bild-Randübergänge, wenn auch noch eine gewisse Geradheit vorliegt.

...

MFG
MIB

Re: Randerkennung programmieren ?

Verfasst: 27.03.2019 19:40
von ccode_new
Hallo schwarzer Mann,

dass Bild würde 3 farbig sein.

Umgebung = irgendeine andere Farbe (z.B. mit Transparenz)
Rand = z.B Schwarz (voller Kontrast) 1, 2 oder vielleicht 3 Pixel breit
Inhalt = z.B. Orange (oder irgendeine andere Farbe)

(Vectorgrafik / oder Pixel-/Rastergrafik im BMP - Stil (keine großartige Farb/Pixelkomprimierungen)

Der Rand würde auch keine Rundungen/Wölbungen enthalten.

Es ginge mir quasi um das "Scannen" von Polygonen auf Bildern.
Daraus sollte man die Eckpunkte erhalten um eine passgenaue Maske erstellen zu können.

Re: Randerkennung programmieren ?

Verfasst: 27.03.2019 19:43
von NicTheQuick
Haben die Linien Aliasing oder sind die mit Antialias?

Re: Randerkennung programmieren ?

Verfasst: 27.03.2019 19:47
von man-in-black
Hi,

also quasi einfarbig. Dann suche alle Pixel, die einen Farbübergang aufweisen.
Die Liste dann sortieren und nach Partnern suchen, die durch eine Strecke beschrieben werden können. Das so lange wiederholen, bis du keine Vereinfachung mehr machen kannst.
Die Strecken (Start Ende) beschreiben dann dein Polygon.

MFG
MIB

Re: Randerkennung programmieren ?

Verfasst: 27.03.2019 19:47
von ccode_new
Hallo Nic,

um das "Aliasing"-Problem zu umgehen wäre auch eine Randbreite von > 3 Pixel möglich.

Man könnte ja dann in etwa den wirklich nur schwarzen Außenrand (Mittellinie ?) annehmen, oder ?

Ich bin für alles offen.

Re: Randerkennung programmieren ?

Verfasst: 27.03.2019 20:17
von NicTheQuick
Ich würde jeden Pixel des Bildes durchgehen und schauen wie viele Pixel um ihn herum welche Farbe haben. Wenn um einen Pixel herum die Hälfte transparent und die andere Hälfte Schwarz ist, dann ist da eine Linie. Wenn mehr transparent ist als Schwarz, dann bist du vermutlich an einer Ecke, vorausgesetzt dein Objekt ist konkav. Die Ecken kannst du dann alle nacheinander erkennen und miteinander verbinden.

Oder du versuchst erst einen schwarzen Pixel zu erkennen und verfolgst die Linie dann. Bei einer scharfen Kurve weißt du dann, dass es eine Ecke ist.

Re: Randerkennung programmieren ?

Verfasst: 27.03.2019 20:33
von ccode_new
Danke an auch Beide.

Ich tue mich zwar schwer, aber ich werde mal versuchen etwas in der empfohlene Richtung zu programmieren.

Mal sehen ob ich irgendetwas brauchbares hinkriege.

Re: Randerkennung programmieren ?

Verfasst: 28.03.2019 10:45
von alter Mann
vielleicht kannst Du ja das viewtopic.php?f=3&t=25430 als Ausgang benutzen

Re: Randerkennung programmieren ?

Verfasst: 28.03.2019 13:21
von fabulouspaul
Wenn es um die Erkennung der Flächenkanten geht, schau dir das mal an: https://de.wikipedia.org/wiki/Kantendetektion

Du erhälst ein Graustufenbild in dem die Kanten einer Fläche herausgearbeitet sind. Dann musst Du "nur" noch die umschlossenen Flächen finden. :)