|
|
Flächen zählen + Größen bestimmen |
|
HansiHans |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 11:46
Titel: Flächen zählen + Größen bestimmen
|
 |
Hallo Leute!
ich konnte mein Bild jetzt soweit bearbeiten, dass ich es auswerten kann. (Siehe Anhang, es ist eigtl ein .bmp Format aber das kann ich hier nicht hochladen).
Jetzt würde ich gerne die Anzahl der weißen Flächen bestimmen (=6)
Und die Größe von jeder Fläche und mir die Größte Fläche ausgeben lassen, also einfach die Pixelanzahl!
Wie kann ich das verwirklichen? Könnte mir da evtl jemand weiterhelfen?
Danke
Gruß
Hans
Beschreibung: |
|
 Download |
Dateiname: |
SpeckleBild.jpg |
Dateigröße: |
8.65 KB |
Heruntergeladen: |
422 mal |
|
|
|
|
|
raptus93 |

Forum-Fortgeschrittener
|
 |
Beiträge: 52
|
 |
|
 |
Anmeldedatum: 14.10.13
|
 |
|
 |
Wohnort: nrw
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 12:04
Titel:
|
 |
Hi!
Ich hatte mal ein ähnliches Problem, bzw. mein Problem ging einen Schritt weiter, denn ich musste noch die Mittelpunkte der weißen Flächen bestimmen.
Meine Lösung (theoretsich): Ich habe mit find die erste 1 gesucht, und die koordinaten, dann einen Flood-fill algorithmus laufen lassen, und alle weiteren Koordinaten der Flächenzugehörigen Punkte abgespeichert in einem neuen Vektor. Als der Flood fill abbrach, musste ich nur noch die länge dieses neuen Vektor betrachten, und ich wusste wie viele Pixel ihr zugehörig sind, und wo diese Liegen. Im Anschluss setzt man die gesamte Fläche auf 0, und iteriert so von Fläche zu Fläche. Solltest du programmierschwierigkeiten damit haben, melde dich nochmal.
Gruß, r93
|
|
|
HansiHans |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 12:12
Titel:
|
 |
Puh,
also damit werde ich sicherlich Schwierigkeiten haben. Bin ein ziemlicher Anfänger auf diesem Gebiet. Gibt es dazu keinen integrierten MatlabBefehl?
Wäre gut wenn du mir ausführlicher weiterhelfen könntest.
Gruß
Hans
|
|
|
raptus93 |

Forum-Fortgeschrittener
|
 |
Beiträge: 52
|
 |
|
 |
Anmeldedatum: 14.10.13
|
 |
|
 |
Wohnort: nrw
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 12:19
Titel:
|
 |
Okay.
Ich habe die Lösung gerade geöffnet, und mir nochmal angeschaut. Soweit ich weiß (und meine MATLAB Bibliothekskenntnis ist SEHR begrenzt) gibt es das nicht schon vorgegeben. Deswegen schlage ich folgendes vor:
Ich helfe dir beim Unterteilen des Problems und bei den einzelnen Lösungen, gebe dir aber nicht die komplettlösung (wo bliebe da der Lerneffekt?). Ich selbst würde das bevorzugen, und deswegen will ich das auch dir gegenüber so handhaben. Dann wirst du es auf jeden Fall verstehen. Also, lass uns nochmal ausführlich den Ablauf durchgehen, ich gehe davon aus, dass deine Matrix binär/logical ist.
1. Schritt: Finde die Koordinaten der ersten 1.
Schaue dir dazu die Methode "find" in der Matlab Dokumentation an.
Versuche die Koordinaten irgendwie abzuspeichern in zwei neuen Variablen (zB [row, col]), dann meld dich hier mit dem Ergebnis (dem Code und der Ausgabe).. ich werde dich jetzt live unterstützen.
|
|
|
HansiHans |

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 10.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 13:02
Titel:
|
 |
Hi Raptus,
habe mich jetzt hier angemeldet.
Hab es jetzt mal mit dem Befehl "I=find(BW2, 1);" probiert.
BW2 ist mein Bild und er soll praktisch die erste 1 finden...
Jedoch zeigt er in meinem Workspace nichts für die 1 an
|
|
|
raptus93 |

Forum-Fortgeschrittener
|
 |
Beiträge: 52
|
 |
|
 |
Anmeldedatum: 14.10.13
|
 |
|
 |
Wohnort: nrw
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 13:42
Titel:
|
 |
Erster Schritt: hervorragend (damit meine ich die Anmeldung).
Zweiter Schritt: Ich habe es mit
[code][row, col] = find(picWithAreas)[/code]
gelöst.
Sorry für die lange Pause grade, ich war Mittag essen
Klappt das bei dir?
|
|
|
HansiHans |

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 10.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 13:51
Titel:
|
 |
;
er zeigt mir bei den klammern vor/nach i und j einen Klammerfehler an :/
|
|
|
raptus93 |

Forum-Fortgeschrittener
|
 |
Beiträge: 52
|
 |
|
 |
Anmeldedatum: 14.10.13
|
 |
|
 |
Wohnort: nrw
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 14:05
Titel:
|
 |
Ist BW2 eine logische Matrix? Das sieht man im Workspace. Ich gehe davon aus. Ein Klammerfehler liegt definitiv nicht in dieser Zeile vor, wenn also, dann in einer vorherigen Zeile oder einer folgenden.
Am besten machst du eine neue Funktion und benennst sie.
Als Eingabe nimmst du picWithAreas (da gibst du dein BW2 rein), als Ausgabe machst du areas, die werden wir später füllen.
ist die erste Zeile, die du in diese niegalnagelneue funktion schreibst einfach nur
[code][row, col] = find(picWithAreas)[code]
und führst in deinem workspace deine methode aus und gibst dein BW2 rein.
Was schreibt die Konsole dann?
_________________
Nicht jeder der "Weswegen" fragt,
meint: "Wem gehört dieser Weg?".
|
|
|
HansiHans |

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 10.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 14:29
Titel:
|
 |
Hi, also das ist mein Code den ich verwende.
Im Workspace wird mir nur ein "ans 320x320 logical" angezeigt. Was mich wundert, eigtl sollte er doch die ganzen Images anzeigen.
hab es jetzt mal so gemacht wie du meinst
|
|
|
raptus93 |

Forum-Fortgeschrittener
|
 |
Beiträge: 52
|
 |
|
 |
Anmeldedatum: 14.10.13
|
 |
|
 |
Wohnort: nrw
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 14:34
Titel:
|
 |
ARGH! Mein Fehler, die [code} und /code] müssen weg, das war, um hier im Forum das in einem Codeblock anzuzeigen, klappte nicht. Sorry. Also ohne das!
_________________
Nicht jeder der "Weswegen" fragt,
meint: "Wem gehört dieser Weg?".
|
|
|
raptus93 |

Forum-Fortgeschrittener
|
 |
Beiträge: 52
|
 |
|
 |
Anmeldedatum: 14.10.13
|
 |
|
 |
Wohnort: nrw
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 14:36
Titel:
|
 |
Wenn du jetzt noch das Semikolon am Ende weglässt, gibt er dir die erste Koordinate in deiner Console aus, die eine 1 ist.
_________________
Nicht jeder der "Weswegen" fragt,
meint: "Wem gehört dieser Weg?".
|
|
|
HansiHans |

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 10.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 14:50
Titel:
|
 |
Er gibt mir da jede Zeile/Spalte mit einer 1 aus. Hab da mal ein paar Zahlen noch weggeschnitten sonst wäre es zuviel geworden.
Also nehme an die Koordinaten der ersten 1 sind i=144 j=154 ?
i =
144
144
149
144
148
....
j =
154
155
155
156
156
156
....
|
|
|
raptus93 |

Forum-Fortgeschrittener
|
 |
Beiträge: 52
|
 |
|
 |
Anmeldedatum: 14.10.13
|
 |
|
 |
Wohnort: nrw
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 14:54
Titel:
|
 |
Hi!
So ist es.
curPoint = [ row(1),col(1) ];
gibt dir jetzt die allererste 1 aus. Ist ein Anfang, oder?
Jetzt solltest du das Prinzip von flood fill verstehen.
Schau dir dazu vielleicht ein-zwei Videos auf youtube an oder lies ein Kapitel darüber.
Wenn du die Idee dahinter verstanden hast, melde dich hier.
_________________
Nicht jeder der "Weswegen" fragt,
meint: "Wem gehört dieser Weg?".
|
|
|
HansiHans |

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 10.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 15:09
Titel:
|
 |
Also das Prinzip habe ich verstanden, ich lasse ihn jetzt nachschauen ob jedes pixel eine 1 oder 0 als nachbarn hat und dadurch kann ich praktisch die grenzen der "fläche" bestimmen => größe + anzahl.
Jedoch weiß ich leider nicht wie ich das programmtechnisch umsetzen kann...
whrsl. über eine if schleife?
|
|
|
raptus93 |

Forum-Fortgeschrittener
|
 |
Beiträge: 52
|
 |
|
 |
Anmeldedatum: 14.10.13
|
 |
|
 |
Wohnort: nrw
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 15:27
Titel:
|
 |
Eins nach dem anderen. If-Schleifen gibt es nicht. Es gibt while-schleifen.
Wir lösen das aber heute iterativ, weil der Algorithmus bei Wikipedia es so vorschlägt, und ich mich damals dran gehalten habe. Dafür bitte ich dich, eine innere function zu schreiben. Das heißt in der gleichen .m-file schreibst du, am besten ganz unten:
.
Dann füllen wir die in eine Richtung gemeinsam, in die anderen drei Richtungen machst du es dann daraufhin alleine.
Die erste Richtung, sagen wir mal, es ist unter dem eingegebenen Punkt x,y
fragen wir ab:
hier passiert genau das, was in den Kommentaren beschrieben wird.
Da es jedoch sein kann, dass sich unter dem Pixel kein weiteres Pixel mehr befindet, weil das Bild dort zuende ist, fügen wir noch eine weitere Bedingung von außen dran:
Sag bescheid, wenn du soweit bist.
_________________
Nicht jeder der "Weswegen" fragt,
meint: "Wem gehört dieser Weg?".
|
|
|
|
Gehe zu Seite 1, 2, 3 Weiter
|
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 - 2025
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.
|
|