![]() |
Vektorisierung
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 ![]() |
Re: Vektorisierung
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 :stupid: |
Re: Vektorisierung
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. |
Re: Vektorisierung
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
Re: Vektorisierung
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Edit:
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;
Delphi-Quellcode:
Ich habe vergessen, die Rand-Ermittlungs Prozedur zu posten.
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] := 'Ja' else regions.Rand[x][y] := 'Nein'; end else begin regions.Rand[x][y] := 'Ja'; end; end; end; end; 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz