AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bildanalyse - Polygon Erkennen

Ein Thema von glkgereon · begonnen am 15. Feb 2006 · letzter Beitrag vom 16. Feb 2006
Antwort Antwort
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Bildanalyse - Polygon Erkennen

  Alt 15. Feb 2006, 15:51
Hi,

Ich würde gerne ein Bild analysieren...dahingehend, dass mein Programm in diesem Bild ein oder mehrere Polygone einer gegeben Farbe erkennt. Das Bild wird aus wenigen, klar zu unterscheidenden Farben bestehen (keine Schattierungen). Ausgegeben werden sollen eigentlich nur die Eckpunkte.

Beispiel:
ich habe die Flagge der EU.
nun möchte ich die Eckpunkte der Sterne in Pixeln rauskriegen.


Wie kann ich das vom Ansatz her machen? gibt es da spezielle Algorithmen für? (gerne auch Quelltexte )

mir ist klar, dass das nicht besonder Performant sein wird, aber das ist hierbei egal...wird nicht oft aufgerufen
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Bildanalyse - Polygon Erkennen

  Alt 16. Feb 2006, 09:31
Hi,

Ich würde erst mal damit anfangen das Bild nach der Farbe zu durchsuchen. Und dann erst probieren das Bild zu Analysieren!
z.B. Merke dir den ersten und den letzten Pixel einer Durchgehenden Reihe. Daran könntest du das Objekt schon mal rekonstruieren. Dann zu erkennen was wirkliche Eckpunkte sind ist da schon schwieriger! Solltest du allerdings nur wagerechte und senkrechte Linien haben sollte das kein Problem darstellen.
Diagonale Linien sind allerdings schwer zu erkennen da sie nicht immer gleichmäßig gezeichnet sind! Die Frage ist also wozu brauchst du die Daten? Je nach dem würde ich entscheiden ob sich der Aufwand lohnt die diagonalen Linien zu analysieren!

Greetz
Boombuler
"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"
SwapIt Highscore:
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: Bildanalyse - Polygon Erkennen

  Alt 16. Feb 2006, 14:04
Ja, es ist norwendig auch diagonalen zu erkennen...

Ich habe mir schon überlegt wie man es event. umsetzen könnte...Ich muss mal schauen wann ich es umgesetzt kriege.
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Bildanalyse - Polygon Erkennen

  Alt 16. Feb 2006, 14:22
Sind die Kanten anti-aliased?
Eigentlich sollte es ja schon reichen, wenn du für jedes gefundene Kantenpixel einen Eckpunkt speicherst und danach alle Eckpunkte, die auf der Geraden durch die benachbarten Eckpunkte (bei Diagonalen mit etwas Spielraum) liegen, aus der Liste wirfst.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

Re: Bildanalyse - Polygon Erkennen

  Alt 16. Feb 2006, 14:24
So in etwa sollte es laufen

ich wollte mir praktisch ein Raster erstellen, welches nur die Grenzen enthält...
und dann die Strecken-enden Rausholen

Das mit dem Antialised...gute Frage.
Keine Ahnung, könnte aber tatsächlihc zum Problem werden :-/
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#6

Re: Bildanalyse - Polygon Erkennen

  Alt 16. Feb 2006, 18:08
Hm...also

ich habe nun eine Klasse geschrieben, welche einem aus so einem Bild und einer Koordinate die Ränder des Polygons wo der Punkt drin ist als Bitmap ausgibt....Mit beispielprogramm
[Siehe Anhang ]

Zu der Ausgabe der Bitmaps:
Ich weiss, es gibt wenig was noch unschöner ist als diese Pointer-Misshandlung da...
Aber anders habe ich es irgendwie nicht hingekriegt
Wer es sauber schafft kann es mir bitte per PN schicken....


nun bleibt das Problem, die Punkte auf einer Geraden zu eliminieren...
Hat da irgendjemand eine Idee zu?

[Edit]
Also die Bitmaps werden jetzt vernünftig kopiert...bleibt das eleminieren der geraden...

[Edit2]
könnte man es nicht so machen, das man jeden Pixel des Rands mit jedem anderen der übrig bleibt vergleicht, und immer solange einen weiter geht, bis nicht mehr alle pixel dazwischen auf einer direkten linie zwischen den beiden punkten liegen?
dann löscht man alle die dazwischen lagen, und fängt mit dem gefundenen endpunkt wieder an.
das ganze macht man dann solange bis der endpunkt wieder der anfangspunkt ist...
Das probier ich mal aus (Bresenham hab ich schon gefunden )

[Edit3]
Ist das eine vernünftige Übersetzung des Wikipedia-Codes?
Delphi-Quellcode:
procedure Swap(var X, Y: Integer);
var T: Integer;
begin
  T:=X;
  X:=Y;
  Y:=T;
end;

procedure Line(X0, Y0, X1, Y1: Integer; var Points: TPoints);
var Steep: Boolean;
    DX, DY, E, DE, YStep: Integer;
    Y, X: Integer;
begin
  Steep:=Abs(Y1-Y0) > Abs(X1-X0);
  if Steep then
    begin
    Swap(X0,Y0);
    Swap(X1,Y1);
    end;
  if X0>X1 then
    begin
    Swap(X0,X1);
    Swap(Y0,Y1);
    end;
  DX:=X1-X0;
  DY:=Abs(Y1-Y0);
  E:=0;
  DE:=DY;
  Y:=Y0;
  SetLength(Points,X1-X0+1);
  if Y0<Y1 then YStep:=1 else YStep:=-1;
  for X:=X0 to X1 do
    begin
    if Steep then
      begin
      Points[X-X0].X:=X;
      Points[X-X0].Y:=Y;
      end
    else
      begin
      Points[X-X0].X:=Y;
      Points[X-X0].Y:=X;
      end;
    E:=E+DE;
    if E SHL 1 >= DX then
      begin
      Y:=Y+YStep;
      E:=E-DX;
      end;
    end;
end;
Angehängte Dateien
Dateityp: rar polygonyzer_789.rar (3,5 KB, 18x aufgerufen)
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz