Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Bildverarbeitungsalgorithmus


klezmor - Mo 26.02.07 19:17
Titel: Bildverarbeitungsalgorithmus
Hallo ich programmiere zur Zeit an einem Bildverarbeitungsprogramm.
Programmiersprache ist C++/OpenCV(Bildverarbeitungsbibliothek)--> kann ich nur empfehlen, leider gibts sowas nicht für delphi :cry:
Aufjedenfall kann mein programm bis jetzt einzelne Konturen erkennen.
Wenn mehrere Konturen aneinander liegen, sollen diese mit einer linie umrandet werden und dann als polygon gespeichert werden, letzteres ist abdingbar.

Schaut euch einfach das Bild an, ist denke ich mal selbsterklärend.
Praktisch gesehen ist dieser Algorithmus sozusagen eine Annäherung.

Meine Frage lautet nun, gibt es möglicherweise schon einen Algorithmus(muss nicht unbedingt implementiert sein), der dieses problem löst, denke mal, das ist ein rein algorithmisches Problem.

Vielen Dank im Voraus

MFG Klezmor.


klezmor - Mo 26.02.07 21:41

Vielleicht nochmal um es eindeutiger zu sagen die erste kontur wird angegeben(deren Koordinaten sind bekannt), diese befindet isch in einer kette mit anderen konturen, sprich die nächstliegenden werden erkannt und ein polygon gebildet.Wenn ich das problem noch weiter präzisieren soll, könnt ihr mir das natürlich auch sagen.


klezmor - Di 27.02.07 18:24

Niemand da der mir hilfen könnte?


klezmor - Mi 28.02.07 16:01

Noch habe ich die hoffnung nihct augegeben.


Fighter#1 - Mi 28.02.07 16:09

Also einen fertigen Algorithmus kenne ich nicht!
Wie funktionierte der Algorithmus her denn in C (also ich will kein Code sehn, erklär einfach mal das Prinzip)
Soll das ganze für beliebige Polygone gelten oder WIE IM BILD nur für Rechtecke ?

So können wir dir vll helfen.


klezmor - Mi 28.02.07 18:15

Wie ihr auf dem bild sehen könnt, sind einige konturen weiter auseinander, einige konturen liegen auf einer scheinbaren linie, nämlich die in der Mitte, wobei die Position natürlich beliebig sein kann.
Mit der Maus klicke ich nun auf eine Kontur meiner Wahl und das programm soll die konturen finden, welche mit der ausgewählten kontur eine line bilden.Konturen sind die Farbigen 4 ecke, wobei deren Form natürlich nicht immer rechteckig ist(-->Paint).


BenBE - Mi 28.02.07 21:20

Naja, mir viele da jetzt auf Die Schnelle ein Probalistischer Vorschlag ein:
Bilde für Teilmengen K' aus K, die die Konturen k aus K enthalten (ich liebe Mathe ;-)) die Regressionsgleichung (lineare Regression, willst ja Linien ;-)) und wähle daraus die Teilmenge K', deren Regressionsgenauigkeit am höchsten ist UND, die die meisten Elemente k aus K enthält.

Klingt kompliziert, ist aber relativ einfach, wenn Du die Konturen mal als einfache Punkte auf dem Bild betrachtest. Ich denke, Du solltest mit dem Hinweis sehen, was ich meine ...


klezmor - Mi 28.02.07 22:04

So was in der art hatte ich mir auch vorgestellt, allerdings scheint die lineare regression nicht unbedingt geeignet dafür zu sein. Schließlich könnten die gesuchten konturen auch theoretisch in einem kreis angeordnet sein.
So dass keinerlei regression mehr möglich wäre.
(Wenn ich das richtig verstanden habe.)


BenBE - Mi 28.02.07 22:07

Im Endeffekt musst Du deinem Algorithmus ja eh (per Definition eines Algorithmus) auf seine Aufgabe festlegen. Du kannst also nicht gleichzeitig Kreise UND Linien erkennen, sei denn, Du findest eine Möglichkeit, beide eindeutig über eine Vorschrift zu beschreiben.


klezmor - So 18.03.07 15:44

So eine Vorschrift gibt es theoretisch natürlich schon, ich als Mensch könnte zumindest eine solche Klassifikation vornehmen.

Ich habe mich jetzt dazu entschieden dies über verschiedene Regressionen zu machen.
Weiß jemand wie man eine Regression, sei es linear oder irgendwie polynominal, implementiert.(Geht doch irgendwie mit den kleinsten Fehlerquadraten oder so)


kkausp - So 18.03.07 21:03

1. Um die nahebeieinanderliegenden Strukturen zu verbinden nutzt man mophorlogische Filter

-Erosion
-Dilation
-Öffnen
-Schliessen

Damit kannst du die die rechtecke in der Mitte erstmals verbinden.

2. Wegwerfen aller Flächen mit Flächeninhalt<Grenze oder maximaler Länge <Grenze?

3. Bilden der konvexe Hülle eine Punktwolke (hier existiert ein Algo)


klezmor - Fr 23.03.07 12:39

Also Schritte 1 und 2 habe ich schon gemacht, jetzt muss ich nur noch die besagte konvexhülle bilden, allerdings, würde ich da am liebsten auf die OpenCv bibliothek zurückgreifen, glaube da gibt es sogar schon ähnliche algorithmen, muss mich allerdings nochmal kundig machen. Die Anwendung der Funktionen ist teilweise ziemlich verwirrend.


kkausp - Sa 24.03.07 12:59
Titel: Polygon oder konvexe Hülle Gesucht?
Unter

http://www.iti.fh-flensburg.de/lang/algorithmen/geo/graham.htm

Ist es gut beschrieben.

Du kanns in Bild noch alle Punkte vorher entfernen, welche nicht mindestens 4 Hintergrund punkt in der 8-Umgebung haben. Diese können glaube ich nicht eckepunkte der nonvexe Hülle sein und solten dann den Algo beschleunigen.


Hast du die Schritte 1 und 2 im Bild auf Pixelebene oder analytisch in Koordinaten (die hattest du ja als Ausgangngspunkt) gemacht?