Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

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

Re: Bildanalyse - Polygon Erkennen

  Alt 16. Feb 2006, 17: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