Randerkennung programmieren ?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Randerkennung programmieren ?

Beitrag 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 ?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Randerkennung programmieren ?

Beitrag 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
(hab alles, kann alles, weiß alles!!^^)

Bild
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Randerkennung programmieren ?

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Randerkennung programmieren ?

Beitrag von NicTheQuick »

Haben die Linien Aliasing oder sind die mit Antialias?
Bild
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Randerkennung programmieren ?

Beitrag 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
Zuletzt geändert von man-in-black am 27.03.2019 19:52, insgesamt 1-mal geändert.
(hab alles, kann alles, weiß alles!!^^)

Bild
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Randerkennung programmieren ?

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Randerkennung programmieren ?

Beitrag 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.
Bild
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Randerkennung programmieren ?

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

Re: Randerkennung programmieren ?

Beitrag von alter Mann »

vielleicht kannst Du ja das viewtopic.php?f=3&t=25430 als Ausgang benutzen
Win11 64Bit / PB 6.0
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

Re: Randerkennung programmieren ?

Beitrag 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. :)
Antworten