Autor Beitrag
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Do 22.01.09 15:13 
Hi,

ich stehe gerade vor folgender Aufgabe:

In einer zweifarbigen Bilddatei sind Polygone enthalten. (Beispielsweise ein blaues Dreieck auf weissem Grund).

Nun moechte ich die Kanten der Objekte lokalisieren.

Das meiste was ich dazu finde laeuft auf Kantenerkennung hinaus. Also feststellen wo Kanten sind und diese im Bild aufzeigen. Von Laplace bis zum Sombrerofilter gibts da die tollsten Moeglichkeiten. :les:

Was ich aber moechteist Kantenlokalisation. Also von wo nach wo (in Koordinaten) verlaufen die Kanten. Oder Anders ausgedrueckt; Wo liegen die Eckpunkte der Figur?

Hier gibt es zwar schon ein paar Threads, die das ganze aber nur fuer Rechtecke mit waagrechten und senkrechten Kanten loesen. Ich moechte aber beliebige n-Ecke finden koennen.
:gruebel:
Ein erster Ansatz ware fortlaufend eine 3*3 Pixel Scanfenster ueber das Bild zu verschieben und sehen wie sich das Scanfenster in Schwarz und weiss teilt.
Allerduings macht mir da der treppeneffekt bei schraegen Linien zu schaffen. Da waere die Line ja voller Kanten... Und mir will kein Ansatz einfallen wie ich da "Toleranz" ins Spiel bringen kann. Ich koennte natuerlich das ScanWindow vergroessern. Wenn die Aliasing-treppe kleiner ist als die Fensterbreite (bzw. Hoehe), sollte ich das als Gerade erkennen koennen. Andererseits kommt der Algorhytmus dann ins Schleudern wenn zwei Polygone naeher als die Fensterbreite beieinander sind.

Hat da jemand noch ne Idee? :nixweiss:

Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
P_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 75

Win XP
Delphi 7 / 8 Enterprise
BeitragVerfasst: Do 22.01.09 15:51 
Hi,
wenn du die Kantenpunkte des N-Ecks ermittelt hast und es dir nur noch um die Simplifizierung der Linien geht, um den Treppeneffekt zu entfernen, nimm einen entsprechenden Algorithmus wie z.B. Douglas-Peucker: www.simdesign.nl/Com.../DouglasPeucker.html
Dort kannst du die Toleranzgrenze angeben (in deinem Fall 1 px) und erhältst als Ergebnis ein Array mit den Koordinatenpunkten, aus denen dein vereinfachtes N-Eck ohne Treppen besteht.

Gruß,
P_G
catweasel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: Do 22.01.09 16:23 
Hi,

Danke fuer den Tipp. Werde ich mir mal genauer Anschauen...

Zitat:
wenn du die Kantenpunkte des N-Ecks ermittelt hast und es dir nur noch um die Simplifizierung der Linien geht, um den Treppeneffekt zu entfernen, nimm einen entsprechenden Algorithmus wie z.B. Douglas-Peucker:


Naja, genaugenommen geht es mir ja nur um die Bestimmung der Eckpunkte.
Ich bekomme da Probleme wenn die Ecke kaum Ausgepraegt ist (Winkel ca. 180 Grad). Dann weiss ich naemlich nicht: geht die Linie jetzt ein Stueck zur Seite wegen Treppenlinie, oder ist das eine schwache Ecke?

Wenn ich die Ecken erst einmal habe dann ist es ein simples "LineTo" um das Polygon zu zeichnen.

Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 22.01.09 18:21 
Hough-Transformation und Schnittpunkte der Linien ermitteln.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.