Schnellster weg Referenzen zu ändern ??
-
Hallo!
Ich habe folgende Aufgabe.
Es gibt eine Matrix von RGB Bilpunkten. Der erste Bildpunkt [0][0] ist der Startpunkt eine Region. Die benachbarten Bildpunkte werden, wenn die Farbe übereinstimmt, zu dieser Region hinzugefügt ansonsten werden sie Startpunkte neuer Regionen.
Sollte man auf einen Bildpunkt treffen der mit der Farbe einer benachbarten Region (Mittelwertfarbe aller Bildpunkte die zur Region gehören) übereinstimmt, aber bereits zu einer anderen Region gehört dann vereinige/verschmelze diese beiden Regionen.Zur Vereinfachung nenne ich jetzt mal die Region creg (current region) und nreg (neighbouring region).
In diesem Fall (mein Problemfall) müssen also creg und nreg verschmolzen werden
in dem allen Bildpunkten von nreg mitgeteilt wird, dass sie nun zu creg gehören.
Das kann bedeuten, dass bis zu 75000 Referenzen geändert werden müssten.
Meine gefundenen Lösungen waren alle nicht besonders schnell, ich muss es aber hinkriegen, dass es in Echtzeit funktioniert.Mit C++ kenne ich mich noch nicht so gut aus, deswegen wollte ich mal hören, ob Euch was einfällt. Der Algorithmus ist übrigens auch als Region Growing bekannt
.Was das alles langsam macht ist natürlich das umsetzen der Referenzen, es gibt auch eine Möglichkeit den Algorithmus ohne dies zu programmieren.
Ich möchte aber wissen, ob jemand eine schnelle Möglichkeit kennt den Algorithmus so wie von mir beschrieben zu programmieren.
Im Moment arbeite ich mit Listen (also zu jeder Region gibt es eine Liste mit den zugöhrigen Bildpunkte), aber Euch bleibt die Wahl der Datenstruktur frei überlassen.
Mir raucht schon der Kopf und der Verzweifelung bin ich auch Nahe
.
-
finde erst heraus welche der beiden regions kleiner ist, und
verschmelze die KLEINERE mit der größeren.
Ansonsten könntest du Gruppen bilden, zu jeder Gruppe
gehören maximal n pixel/felder, jede gruppe gehört
einer region an, eine region enthält mindestens 1 Gruppe.
So musst du wenn du 100 pixel ändern müsstest,
nur noch 10 mal die zugehörigkeit ändern...Devil