|
|
Problem mit logical indexing |
|
madlab |

Forum-Fortgeschrittener
|
 |
Beiträge: 86
|
 |
|
 |
Anmeldedatum: 15.05.12
|
 |
|
 |
Wohnort: Freiburg
|
 |
|
 |
Version: 7.11 (R2010b)
|
 |
|
|
 |
|
Verfasst am: 19.11.2012, 14:19
Titel: Problem mit logical indexing
|
 |
|
 |
|
Hallo zusammen,
ich habe ein Frage zur logischen Indzierung von Matritzen. Ich möchte bei einem Bild "img" der Größe m,n nur jede zweite Zeile betrachten.
Um nur die ungeraden (odd) Zeilen zu betrachten, versuche ich die ungeraden Zeilen im Bild mittels logical Indexing mit "1" auszuwählen und die restlichen zeilen zu ignorieren:
Das Ergbnis ist leider nicht das, was ich erwarte. Ich hätte gerne ein Ergebnis "oddImg" das die selbe größe (also m,n Pixel) wie das Originalbild hat, jedoch jede gerade Zeile auf 0 gesetzt ist (ergo nur die ungeraden Zeilen ihre ursprünglichen Werte beinhalten). Ich erhalte stattdessen aber einen vektror der die größe (m/2)*n , 1 hat.
Könnt ihr mir weiter helfen? Wie kann ich ein Ergbnis erzeugen, welches das Originalbild im Prinzip nur "überdeckt" aber die Größe des Bildes beibehält. Ist logical Indexing hier vllt des falsche Weg? Bitte um eure Hilfe
Grüße,
Mad
*edit*
zur Erkäuterung: Im Prinzip möchte ich genau so etwas machen:
Ergebnis:
A =
0 0 0 0.4387 0.4898
0 0.0318 0 0.3816 0.4456
0.3922 0.2769 0.3171 0 0
0 0.0462 0 0 0
0.1712 0.0971 0.0344 0.1869 0
Das Ergebnis A hat die selbe Größe wie A zu Beginn. Jedoch fällt mir für meinen Fall keine Passende Matrix B ein Oo
Zuletzt bearbeitet von madlab am 19.11.2012, 14:35, insgesamt 2-mal bearbeitet
|
|
|
|
|
Thomas84 |

Forum-Meister
|
 |
Beiträge: 546
|
 |
|
 |
Anmeldedatum: 10.02.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.11.2012, 14:33
Titel:
|
 |
|
|
dmjr |

Forum-Century
|
 |
Beiträge: 199
|
 |
|
 |
Anmeldedatum: 02.10.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.11.2012, 14:33
Titel:
|
 |
|
|
madlab |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 86
|
 |
|
 |
Anmeldedatum: 15.05.12
|
 |
|
 |
Wohnort: Freiburg
|
 |
|
 |
Version: 7.11 (R2010b)
|
 |
|
|
 |
|
Verfasst am: 19.11.2012, 14:45
Titel:
|
 |
hi ihr beiden,
vielen Danke das ist gut für den Anfang. Ich werde sehen, wie ich das weiter ausbauen kann.
Meine Idee ist es später verschiedenste Möglichkeiten zu definieren, wie ich ein und das selbe Originalbild "img" unterschiedlich anspreche. Welche Methode würdet ihr mir vorschlagen wenn ich z.B. jede zweite Zeile des Bildes und jedes fünfte Pixel des Bildes kombinieren möchte? Gibt es da eine Möglichkeit diese beiden Zugriffe als "Masken" zu definieren und dann die Masken zu kombinieren? Es soll möglich sein die Masken auch einzln anzuwenden.
pseudo bsp: meinauswahlimg = img(oddZeile && step5Pixel) ;
Ich hoffe ihr versteht meine Frage, kann es momentan nicht besser erklären
|
|
|
madlab |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 86
|
 |
|
 |
Anmeldedatum: 15.05.12
|
 |
|
 |
Wohnort: Freiburg
|
 |
|
 |
Version: 7.11 (R2010b)
|
 |
|
|
 |
|
Verfasst am: 19.11.2012, 17:34
Titel:
|
 |
Hallo zusammen,
dank eurer Hilfe, bin ich mittlerweile etwas weiter. Ich scheitere aber immernoch, das Ausgabebild in die gewünschte Form zu bringen. Ich möchte mein Bild "img" mit einigen Masken bearbeiten. Als beispiel habe ich mal zwei Masken ausgewählt. Die evenMask, soll alle geraden Zeilen auswählen, die segMask soll die Pixel Spalten 1 bis 200 auswählen.
Mein Ergebnis "maskedImg" kommt jetzt als eine Spalte zurück. Dies sind schon die Werte, die ich nacher benötige. Allerdings möchte ich eine m,n matrix in der selben größe wie "img" in der die ausgewählten Werte dann an ihrer ursprünglichen Position sind. Die durch die Masken verdeckten Werte sollen einfach null sein. Habt ihr einen Tip, wie ich das elegant realisieren kann?
Grüße,
mad
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 19.11.2012, 18:30
Titel:
|
 |
|
|
madlab |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 86
|
 |
|
 |
Anmeldedatum: 15.05.12
|
 |
|
 |
Wohnort: Freiburg
|
 |
|
 |
Version: 7.11 (R2010b)
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 10:44
Titel:
|
 |
Hallo Jan,
genau das wollte ich erreichen vielen Dank auch für den Tip mit der Maskenerzeugung per "true".
Ich verstehe allerdings noch nicht wieso mein ursprünglicher Code nur eine einzelne Spalte erzeugt.
Verarbeitet Matlab das so, dass nur die Elemente welche beide Bedingungen erfüllen aus dem Orignal img herausgenommen werden? Ich finde das etwas Schade, da man die Positionsinformation mit meiner Lösung ja "wegwirft".
Bei deiner Variante ist wesentlich besser ersichtlich was passiert
Grüße,
mad
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 11:02
Titel:
|
 |
Hallo madlab,
Beim Logical Indexing wird ein Vektor zurückgegeben, weil dies die einzige konsitstent Möglichkeit ist:
Nun enthielte die erste und zweite Zeile (oder spalte) unterschiedlich viele Elemente, was ja in einem Matrix nicht möglich ist. Also wird hier ein Vektor zurückgeliefert. Für:
ist das zwar nicht zwingend, aber die Dimensionierung der Ausgabe sollte nicht von den Werten des Eingabe abhängen.
Den Logical Index auf die Linke Seite zu ziehen hat den Vorteil, dass dies wie ein linearer Index behandelt wird, also wie "X(1:4)", wobei "X(4)" genau das gleiche bedeutet wie "X(2, 2)", aber es ist ein klein wenig schneller.
Gruß, Jan
|
|
|
madlab |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 86
|
 |
|
 |
Anmeldedatum: 15.05.12
|
 |
|
 |
Wohnort: Freiburg
|
 |
|
 |
Version: 7.11 (R2010b)
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 11:18
Titel:
|
 |
stimmt, das mit der konsitens klingt logisch.
eine kleine Frage offtopic:
Kann ich möglichst einfach matritzen "Blockweise" anlegen?
z.B. immer zeilenweise 3 werte true, drei werte false:
1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 ...
1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 ...
1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 ...
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
meine idee wäre gewesen die Grundsturktur 1 1 1 0 0 0 einmal anzulegen und dann beliebig oft zu wiederholen. Ich habe allerdings keine Idee wie ich das schreiben muss, da mir nur die Schreibweise (a:b:c,d:e:f) geläufig ist und ich nicht weiß, wie ich damit eine Block-Form darstellen kann. Muss ich hierfür Schleifen nutzen oder hat matlab auch für solche Fälle eine Funtkion?
besser eigenes Thema hierfür erstellen?
Grüße,
Mad
|
|
|
dmjr |

Forum-Century
|
 |
Beiträge: 199
|
 |
|
 |
Anmeldedatum: 02.10.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 11:28
Titel:
|
 |
repmat repliziert eine Matrix X oder Y mal in je Spalte oder Zeile
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 11:39
Titel:
|
 |
Hallo madlab,
Das bereits empfohlene REPMAT ist vermutlich optimal.
Eine andere Lösung:
Gruß, Jan
|
|
|
madlab |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 86
|
 |
|
 |
Anmeldedatum: 15.05.12
|
 |
|
 |
Wohnort: Freiburg
|
 |
|
 |
Version: 7.11 (R2010b)
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 12:23
Titel:
|
 |
Hallo ihr beiden,
danke für die Empfehlungen
habe die Variante mit repmat ausprobiert und funktioniert.
Vielen Dank!
|
|
|
|
|
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.
|
|