|
|
Matrix mit 1er füllen zw. den Rändern |
|
goenzo |

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 22.11.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.10.2010, 19:40
Titel: Matrix mit 1er füllen zw. den Rändern
|
 |
Hallo Forum!
Gibt es eine Methode in Matlab um in einer Matrix die nur aus 0 und 1 besteht die Einträge zwischen zwei 1er alle auf 1 zu setzen?
Kleines Beispiel:
0 1 0 0 0 1 0
0 0 1 0 1 0 0
und als Ergebnis würde ich gerne folgendes haben wollen:
0 1 1 1 1 1 0
0 0 1 1 1 0 0
Ich könnte jetzt mit zwei for-Schleifen das durchgehen und eine if-Abfrage benutzen, aber das geht doch sicherlich auch einfacher oder?
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 24.10.2010, 21:22
Titel:
|
 |
Hallo,
ich sehe auf Anhieb keine sinnvolle Möglichkeit, eine Schleife zu vermeiden.
Hier wäre eine (vielleicht noch optimierbare) Möglichkeit, mit einer statt zwei Schleifen auszukommen:
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 24.10.2010, 22:00
Titel: Re: Matrix mit 1er füllen zw. den Rändern
|
 |
Hallo goenzo,
Sind die 1 symmetrisch verteilt? Oder ist die zweite 1 in jeder Zeile garantiert rechts vom Mittelpunkt? Dann könnte man das etwas vereinfachen. Aber ein wenig umständlich geht's auch so:
Gruß, Jan
|
|
|
Achi |

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 25.10.2010, 09:24
Titel: Re: Matrix mit 1er füllen zw. den Rändern
|
 |
goenzo hat Folgendes geschrieben: |
Kleines Beispiel:
0 1 0 0 0 1 0
0 0 1 0 1 0 0
und als Ergebnis würde ich gerne folgendes haben wollen:
0 1 1 1 1 1 0
0 0 1 1 1 0 0
|
Hi,
ich hab das gegenteilige Porblem.
Ich möchte nicht zusammenhängende Bereiche auf Null setzen
Bsp.:
0 1 0 0 0 1 0
0 0 0 0 1 0 0
0 1 1 1 1 1 0
0 0 1 1 1 0 0
Also die 1 an Position 5 soll hier 0 werden
Ich hab mir findsubmat aus dem FEX geholt und mehrere Masken angefertigt die mir solche Bereiche auf Null setzten. Konnte aber nicht immer das gewünschte Ergeniss erhalten.
Hat jemand ne Idee?
Danke
|
|
|
Achi |

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 25.10.2010, 11:02
Titel:
|
 |
Meine Idee wäre:
ich lege den Bereich (5x5MAtrix) in eine 7x7 Matrix
leg eine Schleife darüber die mir 1er sucht und dann in dessen Umgebung schaut ob wieder ne 1 vorkommt. Falls ja wird diese Position(erstere) gespeichert um dann später diese Matritzen zu einem Bild (Segmentierung)
zusammenfügt. Dazu die Frage, gibts eine Befehle, der mir sozusagen den Overlap bestimmt?
|
|
|
Achi |

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 25.10.2010, 11:07
Titel:
|
 |
Ok ich denk ich weiss wie ichs mache. Ich such mir dann noch die doppeltend Einträge und dies Teilmatritzen gehören dann zusammen
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 25.10.2010, 17:58
Titel: Re: Matrix mit 1er füllen zw. den Rändern
|
 |
Hallo Achi,
Zitat: |
ich hab das gegenteilige Porblem.
Ich möchte nicht zusammenhängende Bereiche auf Null setzen
Bsp.:
0 1 0 0 0 1 0
0 0 0 0 1 0 0
0 1 1 1 1 1 0
0 0 1 1 1 0 0
Also die 1 an Position 5 soll hier 0 werden |
Leider verstehe ich schon die Aufgabenstellung nicht. Welches ist die "Position 5"? Meinst Du das 5. Element, also die 1 auf Position (1,2)?
Das sind dann "nicht-zusammenhängende Bereiche"?
Willst Du einzelen Subvektoren [0, 1, 0] mit [0, 0, 0] ersetzen? Da wäre STRFIND brauchbar. STRREP macht das auch, gibt in modernen Matlabversionen aber eine Warnug aus.
Aber wie gesagt, ich habe die Frage nicht verstanden.
Gruß, Jan
|
|
|
Achi |

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 26.10.2010, 08:33
Titel:
|
 |
Hi Jan,
es ist ja egal ob ich das Element mit (1,2) anspreche oder mit dem linearen Index (5).
Eigentlich suche ich nicht nur die einzelne 1 an Position 5 sondern den grrößen Bereich in dem 1 ununterbrochen vorkommen. Dabei ist es egal, ob diese darunter daneben oder diagonal dazu stehen, ohne einer 0 dazwischen.
Ich für meinen Teil teste jetzt erst mal paar seed-Algorithmen aus dem FEX.
Gruß Achi
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 26.10.2010, 12:23
Titel:
|
 |
Hallo Achi,
Du meinst also tatsächlich mit "Position 5" den linearen Index.
Und Du suchst nach Einsen, die andere Einsen berühren, oder?
Wenn Du also in allen 3x3-Submatrizen, die:
sind, die mittlere 1 durch 0 ersetzt, wäre Dein Problem gelöst, oder?
Da sollte schon ein 2D Moving-Mean-Filter über 3x3-Fensert schaffen: Alle Zahlen <= 1/9 werden auf Null gesetzt, alle anderen auf 1. Um den Rand muss man sich gesondert kümmern.
Neben dem effizienten FILTER2 könnte man das auch manuell berechnen:
Nun ist bis auf den Rand und einzelne, von Nullen umgebene Einsen, y gleich x.
Gruß, Jan
|
|
|
Achi |

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 26.10.2010, 12:53
Titel:
|
 |
HAb mir wie gesagt einen Seed (Region growing) Algo rausgesucht und angepasst. Funktioniert bestens.
Aber Danke für die Anregung!
|
|
|
|
|
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.
|
|