AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Berechnung von "Rissen" in einem Bild
Thema durchsuchen
Ansicht
Themen-Optionen

Berechnung von "Rissen" in einem Bild

Ein Thema von 3_of_8 · begonnen am 16. Mär 2008 · letzter Beitrag vom 20. Mär 2008
 
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Berechnung von "Rissen" in einem Bild

  Alt 20. Mär 2008, 11:50
Hallo 3_of_8,

ist das Problem noch aktuell? Ich habe leider gerade keine Zeit, mich daran zu versuchen, trotzdem mal ein paar Überlegungen...
In Deinem Code vermisse ich die Prüfung, ob ein Riß besteht und dieser durchgehend ist. Erst wenn das feststeht lohnt sich die Aufteilung in Gruppen (oder Bereiche).

Also ich würde das (nach jetzigen Überlegungen) so angehen:

1.) Vorbereitung
- globale Variable MaxBereich=0
- globale Variable RißNr=0
- jedem Punkt wird der Bereich 0 zugewiesen
- jedem Punkt wird die Stabilität 8 zugewiesen
- jeder Punkt erhält die Eigenschaft RissNr=0
- jeder Punkt erhält die Eigenschaft Used=False

2.) KillPoint
- KLickPoint.Bereich in gobale Variable OriginalBereich speichern
- im Umkreis von 4 Pixeln wird die Stabilität um 4..1 Pixel vermindert
- wenn Stabilität auf 0 fällt, wird der Punkt gekillt (rekursiv)
(sonst hier noch nichts weiter machen)

3.) jetzt auf durchgehenden Riß testen (vom KlickPoint aus)
- globale Variablen Endlos1 und Endlos 2 auf False
- Point.Used:=True
- rekursiv alle benachbarten Punkte testen, ob sie gekillt sind nicht Used
-> wenn ja: wenn Rand erreicht ist oder der KillPunkt.RißNr>0 (oder als Sonderfall der Ausgangspunkt) dann Endlos1 auf True, Rekursion dieser Richtung abbrechen
-> sonst: weiter rekursiv testen
=> am Ende jeden rekursiven Aufrufes "rückwärts" Used wieder auf False
- wenn Endlos1=True weitere Richtung testen für Endlos2
- alle gefundenen KillPunkte bei dieser Suche in eine Liste speichern
- wenn Endlos1 und Endlos2 = True ist der Riss durchgehend
! IF RißNichtDurchgehend THEN GOTO 6.)

4.) Riß verwalten
- Globale Variable RißNr erhöhen
- allen Punkten aus der gefundenen Riß-Liste die RißNr zuweisen

5.) Bereiche zuweisen
- Globale Variable MaxBereich erhöhen
- vom KlickPoint aus alle umgebenenden Punkte Used auf True und testen, ob sie dem OriginalBereich entsprechen
-> dann rekursiv Used auf True und Point.Bereich := MaxBereich
=> am Ende jeden rekursiven Aufrufes "rückwärts" Used wieder auf False

6.) Riß-Liste wieder freigeben


Schade, dass ich gerade nicht selbst dafür Zeit habe...

stahli
  Mit Zitat antworten Zitat
 


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 22:30 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