AGB  ·  Datenschutz  ·  Impressum  







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

Vektorisierung

Offene Frage von "blender"
Ein Thema von blender · begonnen am 20. Okt 2008 · letzter Beitrag vom 21. Okt 2008
Antwort Antwort
blender

Registriert seit: 25. Feb 2008
95 Beiträge
 
Delphi 7 Personal
 
#1

Vektorisierung

  Alt 20. Okt 2008, 12:17
Gestern habe ich hier einen Thread bezüglich meiner Region Growing Methode reingestellt.
Nun möchte ich die Seiten der Regionen so Vektorisieren, dass die Vektorisierten Formen zusammen ein Polygon ergeben, welches die Region umschließt.

Mir fällt leider nichts ein und ich habe keinen Ansatz.
Ich habe nur die Werte von jedem Pixel welcher Region er angehört. (Mehr informationen zu dem Region Growing Algorithmus hier)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Vektorisierung

  Alt 20. Okt 2008, 12:27
Wenn das Bild nicht allzu pixelig ist, könntest du versuchen, erstmal alle Randpixel zu ermitteln, und diese als Polygon aufzufassen. Damit hast du ein Polygon mit sehr vielen Ecken, dass die Form sehr genau abbildet.
Wenn du jetzt alle Ecken durchgehst, und alle Ecken die zwischen 170° und 190° sind, eliminierst könntest du ein einigermaßen brauchbares Polygon bekommen
  Mit Zitat antworten Zitat
blender

Registriert seit: 25. Feb 2008
95 Beiträge
 
Delphi 7 Personal
 
#3

Re: Vektorisierung

  Alt 20. Okt 2008, 13:28
Ich möchte die Ränder Vektorisieren.
Wie soll ich daraus denn die Vektorformen auslesen?
Die Randpixel mus ich sowieso ermitteln, oder?
Für die Ermittlung der Randpixel schreibe ich schon mal eine Methode.
  Mit Zitat antworten Zitat
blender

Registriert seit: 25. Feb 2008
95 Beiträge
 
Delphi 7 Personal
 
#4

Re: Vektorisierung

  Alt 20. Okt 2008, 19:38
Hier ein Programm welches die Region Growing Methode durchführt.

Die Toleranz ist einstellbar.
Falls jemand sinnvolle Werte für die Region Growing Methode findet, bitte posten.
Ich finde 110 bis 200 ganz gut.
Nach einer Kantenglättung mit nur einer Region sollte das Bild nicht schlechter aussehen.
Angehängte Dateien
Dateityp: exe project1_805.exe (541,5 KB, 27x aufgerufen)
  Mit Zitat antworten Zitat
blender

Registriert seit: 25. Feb 2008
95 Beiträge
 
Delphi 7 Personal
 
#5

Re: Vektorisierung

  Alt 21. Okt 2008, 14:42
Ich habe einen Hough Transformation Algorithmus gefunden und ihn meinem Code angepasst.
Nur: Was ist denn nach der Ausführung in dem "hougharray"?
Ich bin erst in der 9. Klasse und habe daher keine Ahnung was diese Formeln bedeuten.
(Nicht dass ich die Lehrer noch nicht gefragt hätte, aber die Antwort ist immer "Warte noch ein paar Jahre")

Delphi-Quellcode:
function IsPoint(x,y,region:integer):boolean;
begin
result := (Regions.Values[x][y] = region) and (regions.rand[x][y] = 'Ja');
end;

procedure GetLines(Region: Integer);
var x,y,theta: integer;
    r: Extended;
    HoughArray:Array of array of integer;
begin
SetLength(hougharray,360,round(Sqrt(form1.Image1.Height*form1.Image1.Height + form1.Image1.Width*form1.Image1.Width)));

// For all rows in image.
for y:=0 to form1.Image1.Height-1 do
begin

   // For all pixel in one row.
   for x:=0 to form1.Image1.Width-1 do
   begin

      // Is there a point there or not. If not, just skip the pixel.
      if IsPoint(x,y, region) then
      begin
           // Now you need to iterate for one of the unknown variables,
           // theta, to be able to determine the other unknown, r.
           for theta:=0 to 359 do
           begin
                r:=x*cos(theta*PI/360) + y*sin(theta*PI/360);

                // Plot the finding (theta,r) into an array.
                // Ignore negative values... trust me... its ok!
                if r>=0 then Inc(HoughArray[theta,round(r)]);
           end;
      end;
   end;
end;

end;
Edit:

Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var x,y,i: Integer;
begin

for x := 0 to high(Regions.Values) do
 begin

  for y := 0 to high(Regions.Values[x]) do
   begin

   if (x > 0) and (y > 0) and (x < high(Regions.Values)) and (y < high(Regions.Values[x])) then
    begin

    if (regions.Values[x][y] <>
 regions.values[x,y-1])or(regions.Values[x][y] <>
 regions.values[x+1,y])or(regions.Values[x][y] <>
 regions.values[x-1,y])or(regions.Values[x][y] <>
 regions.values[x,y+1]) then regions.Rand[x][y] := 'Jaelse regions.Rand[x][y] := 'Nein';

    end
   else
    begin
    regions.Rand[x][y] := 'Ja';
    end;


   end;

 end;

end;
Ich habe vergessen, die Rand-Ermittlungs Prozedur zu posten.

edit 2

Anhang hinzugefügt.

Hinweis:

Der Hough Algorithmus gibt nichts für den Benutzer sichtbares zurück und tut eigentlich gar nichts außer Zählen, wenn nicht vorher Region Growing und Regionenränder ausgeführt worden ist.
Regionenränder und Kantenglättung mit Region haben keine Auswirkungen, wenn nicht vorher Region Growing durchgeführt wurde.
Bei verändern der Formulargröße werden viele Werte zurückgesetzt.
Angehängte Dateien
Dateityp: exe project1_444.exe (553,5 KB, 15x aufgerufen)
  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 07:47 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