|
Hilbert86 |
Forum-Century
|
|
Beiträge: 113
|
|
|
|
Anmeldedatum: 08.09.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.07.2011, 11:32
Titel: nachbarschaftsoperator?
|
|
Hallo Leute
gegeben ist ein grauwert bild mit bekannten ca 100 startpixeln.
ich möchte gern ein nachbarschaftsoperator programmieren der die startpixel nimmt und deren 8 nachbarpixel prüft (bsp. grau wert) wenn der wert in einem bestimmten threshold liegt soll dieser punkt zum pixel dazugefügt werden und das selbe immer mit den neu hinzugefügten pixel bis der threshold nicht mehr erfüllt ist. So das ich aus einem startpixel ein objekt bekomme das durch diesen vergleich der nachbarn gewachsen ist in jede richtung (Region Growing)
mein problem liegt in der programmierung der prüfung der nachbar pixeln. wie könnte man das realisieren ?
als erstes könnte man ja eine 0 matrix erstellen mit größe des bildes und dann die stellen die eingebunden werden mit 1 setzen.
grüße
hilbert
_________________
MMAAAAAATTTTTLLAAAAABBBB
|
|
|
|
|
Titus |
Forum-Meister
|
|
Beiträge: 871
|
|
|
|
Anmeldedatum: 19.07.07
|
|
|
|
Wohnort: Aachen
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.07.2011, 10:57
Titel:
|
|
Hallo,
ja, zuerst würde ich eine Matrix aufstellen mit Nullen bzw. dort, wo die Pixel sind, mit 1 (oder true/false). Dann vielleicht so in etwa:
wobei bevor Du sie in die matrix setzt, noch den Threshold checken musst ...
Titus
|
|
|
Hilbert86 |
Themenstarter
Forum-Century
|
|
Beiträge: 113
|
|
|
|
Anmeldedatum: 08.09.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.08.2011, 14:00
Titel:
|
|
genau das war auch mein erster gedanke aber so überprüfe ich nur die ersten 8 nachbarpixel ich möchte aber auch die 16 pixel mit abstand einsweiter und die 32 pixel mit abstand einsweiter und ...40,48....und so weiter überprüfen.
Also eine art wachsender quadrat in der jede schicht geprüft wird bis die letzte schicht keine zu markierenden pixel mehr hat.
Hoffe konnte das einiger maßen gut erklären
_________________
MMAAAAAATTTTTLLAAAAABBBB
|
|
|
Hilbert86 |
Themenstarter
Forum-Century
|
|
Beiträge: 113
|
|
|
|
Anmeldedatum: 08.09.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.08.2011, 12:52
Titel: Veranschaulichung des Problems
|
|
Ich habe mein Problem mal mit einem Bild verdeutlicht ich denke man erkennt es besser wenn man es visuell vorliegen hat.
Die ersten 8 Nachbarn zu überprüfen hätte ich so gemacht wie Titus es beschrieben hatte.
Aber wie überprüfe ich jetzt die nächsten Schichten von Nachbarn Pixel in einer Schleife?
Abbruch kriterium ist ganz einfach wenn alle Pixel einer Schicht ein Kriterium nicht mehr erfüllen wird aufgehört.
Man könnte den Code von Titus erweitern so das für jede Schicht 2 Zeilen Code geschrieben werden (16,24,32 unsw ) bei großen Matrixen 400x400 ist das aber nicht sinvoll, es müsste doch eine elegantere Lösung geben?
Wäre für jeden Tipp dankbar
Hilbert
Beschreibung: |
|
Download |
Dateiname: |
regiongrow.png |
Dateigröße: |
3.9 KB |
Heruntergeladen: |
960 mal |
_________________
MMAAAAAATTTTTLLAAAAABBBB
|
|
|
Sco |
Forum-Meister
|
|
Beiträge: 699
|
|
|
|
Anmeldedatum: 15.08.10
|
|
|
|
Wohnort: Dundee
|
|
|
|
Version: 2008a, 2010a
|
|
|
|
|
|
Verfasst am: 06.08.2011, 13:57
Titel:
|
|
Hallo,
ich denke die folgende Lösung sollte sowohl schnell als auch variabel genug sein:
Das einzige was hier noch zusätzlich beachtet werden müsste sind die Randpixel, bzw. jene Pixel in der Filter-Maske für die im Testdatensatz die zugehörigen Indexe nicht existieren. Also haben wir z.B. einen 5x1 Filter dann bräuchten wir mindestens 2 Pixel zur linken und rechten Seite, ansonsten würden wir einen Dimensionsfehler vo Matlab erhalten. Dies koennte z.B. durch vorheriges padden gelöst werden (doc padarray). So würde sichergestellt das die Indexe auch im Originaldatensatz existieren.
MFG
Sco
|
|
|
Hilbert86 |
Themenstarter
Forum-Century
|
|
Beiträge: 113
|
|
|
|
Anmeldedatum: 08.09.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.08.2011, 15:04
Titel:
|
|
Das ist echt ein toller Ansatz den kann man weiter ausbauen.
Was mich jetzt aber noch stört ist das am ende die Komplette Maske mit Werten gesetz wird. Wie könnte man das machen das eben nur die Randwerte gesetz werden? Weil wenn später eine Schleife eingebaut werden soll würde das die Stellen die vlt nicht mit 1 gesetz werden sollen einfach überschreiben!
Wie setz ich also nun nur die Rand Pixel von Values der Maske?
Sco hat Folgendes geschrieben: |
|
_________________
MMAAAAAATTTTTLLAAAAABBBB
|
|
|
Sco |
Forum-Meister
|
|
Beiträge: 699
|
|
|
|
Anmeldedatum: 15.08.10
|
|
|
|
Wohnort: Dundee
|
|
|
|
Version: 2008a, 2010a
|
|
|
|
|
|
Verfasst am: 07.08.2011, 16:51
Titel:
|
|
Hallo,
köntest du vielleicht ein Beipiel geben (mit Matrix davor und wie du sie möchtest), ich stehe gerade ein wenig auf dem Schlauch und verstehe nicht so ganz was du meinst.
Vielleicht sowas in der Art, damit würdest du nur die Werte der Randpixel bekommen:
Aber ich habe so das dumpfe Gefühl dass du was anderes meinst .
MFG
Sco
|
|
|
Hilbert86 |
Themenstarter
Forum-Century
|
|
Beiträge: 113
|
|
|
|
Anmeldedatum: 08.09.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.08.2011, 17:27
Titel:
|
|
Also wenn du das Bild in der Anlage mal anschaust. Da haben wir ja wie beim Atom Hüllen. Und ich möchte in ner Schleife die Hüllen überprüfen. So wie es jetzt ist wird die Komplette Maske mit 1er gesetzt. Ich will aber nur die jeweilige Hüllen (Randpixel der Maske).
Bsp:
Ich überprüfe die 8er Hülle und setze diejenigen Pixel mit 1 die eine Bedingung erfüllen. Dann Überprüfe ich die 16er Hülle wobei die 8er Hülle nicht Überschrieben werden darf und so weiter. Das wächst dann solange bis eine Hülle keine Pixel mehr hat die eine bestimmte Bedingung erfüllen somit hört die Schleife auf.
Ich hoffe das war besser erklärt ? sorry für meine Formulierung ich hatte Deutsch immer ne 4
Gruß
Hilbert
Beschreibung: |
|
Download |
Dateiname: |
regiongrow.png |
Dateigröße: |
3.9 KB |
Heruntergeladen: |
915 mal |
_________________
MMAAAAAATTTTTLLAAAAABBBB
|
|
|
Sco |
Forum-Meister
|
|
Beiträge: 699
|
|
|
|
Anmeldedatum: 15.08.10
|
|
|
|
Wohnort: Dundee
|
|
|
|
Version: 2008a, 2010a
|
|
|
|
|
|
Verfasst am: 07.08.2011, 17:55
Titel:
|
|
Hallo,
du musst es so machen wie du es schon in deinem ersten Post angedeutet hattest. Du erzeugst eine leere Matrix mit der Größe deines Bildes, nennen wir sie "result".
Nun am Beispiel von:
Als erstes nehmen wir die Filteraske für 8 Nachbarn (3x3). Jetzt macht du deine Überprüfung NUR an den Pixeln die nicht NaN enthalten (natürlich sollte dein ürsprüngliches Bild kein Nan enthalten), welche ja die Randpixel sind. Erfüllt das Randpixel deine Bedingung, so setzt du für diese Stelle in der Matrix "result" den Wert 1. Dies machst du nun für alle Randpixel.
Daraufhin vergrößerst du die Filtermske (nächste Nachbarn-Schicht = 16 Nachbarn = 5x5 Filter) und wiederholst die vorherigen Schritte.
Da du die Bild- und "result"-Matrix immer getrennt voneinander behandelst wird auch nix überschrieben.
MFG
Sco
|
|
|
Hilbert86 |
Themenstarter
Forum-Century
|
|
Beiträge: 113
|
|
|
|
Anmeldedatum: 08.09.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.08.2011, 18:25
Titel:
|
|
Super danke
_________________
MMAAAAAATTTTTLLAAAAABBBB
|
|
|
Sco |
Forum-Meister
|
|
Beiträge: 699
|
|
|
|
Anmeldedatum: 15.08.10
|
|
|
|
Wohnort: Dundee
|
|
|
|
Version: 2008a, 2010a
|
|
|
|
|
|
Verfasst am: 07.08.2011, 18:39
Titel:
|
|
Hallo,
hier noch ein lauffähiges Beispiel:
Die temporäre Matrix habe ich nur erzeugt, weil mir auf die schnelle kein eleganter Weg einfiel um von den Indexen des ausgeschnittenen Bildes (Filter-Maske) auf die korrespondierenden Indexe im Originalbild (bzw. der result-Matrix) zu kommen (da die Matrixgrößen uns somit die Indexe ja verschieden sind). Vielleicht hätte dafür ja jemand eine Lösung parad?
MFG
Sco
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|