WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Untermatritzen finden und Null setzen

 

Dionysos
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 16.09.09
Wohnort: ---
Version: R2011a
     Beitrag Verfasst am: 12.09.2011, 08:10     Titel: Untermatritzen finden und Null setzen
  Antworten mit Zitat      
Guten Morgen zusammen,

ich versuche schon paar Tage eine Untermatrix von einer großen Hauptmatrix Null zu setzen, aber bekomme immer den Fehler "Could not determine the size of this expression".
Insgesamt geht es um das Untersuchen von Bewegung in einem Bild, aber es scheitert an der Formulierung des Nullsetzens.
Ich habe eine 240x320 Matrix die ich mit einem 27x27 Fenster überprüfe (Blockmatching). Daraus bekomme ich eine 9x12 Matrix die mir die Pixelverschiebung des Fensters ausgibt. Jede einzelne Stelle der zweiten Matrix steht für ein 27x27 Fenster der großen Matrix. Ist nun eine Stelle kleiner als ein Schwellenwert, soll dieses Fenster in der Hauptmatrix zu 0 gesetzt werden.
Das Ganze erfolgt in einem Embedded File in Simulink.

Mein Script sieht wie folgt aus:

Code:
P=rand(240,320);
[y,x] = size(P);    

R=rand(9,12);
[s,t] = size(R);

w= s*t;     % 108
u=round(y/s);   %27

for j= 1:w      % Zählt die einzelnen Stelle der R Matrix hoch
    if R(j) <= 1     % Prüft ob Stelle kleiner Schwellwert
        P(j:j+(u-1),j:j+(u-1))=0;    % Soll Null-Untermatrix erstellen <-- FEHLER
    end
end


Danke schonmal fürs reindenken.
Falls jemand natürlich eine bessere Methode kennt, z.B. mit Simulink nehme ich diese auch gerne an.

Gruß
_________________

Dionysos
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.09.2011, 22:36     Titel: Re: Untermatritzen finden und Null setzen
  Antworten mit Zitat      
Hallo Dionysos,

Wenn ich Deinen Code in Matlab laufen lassen, erhalte ich keinen Fehler.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Dionysos
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 16.09.09
Wohnort: ---
Version: R2011a
     Beitrag Verfasst am: 13.09.2011, 13:45     Titel:
  Antworten mit Zitat      
Tatsächlich, nur wenn man ungeschickte Dimensionen wählt, sorry.
Jedoch macht der Code nicht das was er soll. Wie kann ich eine dynamische Untermatrix einer Hauptmatrix Null setzen lassen?

Bsp:
Code:
P=rand(10,10)*100;             % Hauptmatrix
[y,x] = size(P);    % 10x10
R=rand(2,5);             % Inhalt Submatrix
[s,t] = size(R);    % 2x5


Die Suchmaske ist eine 5x2 Matrix, diese kann man also insgesamt 10mal nach rechts verschieben. Sobald der Inhalt der R Matrix kleiner als ein Schwellwert ist, soll die Maske ein Loch in die Hauptmatrix reißen.
Manuell würde das so aussehen:
Code:
P(1:5,3:4)=0              % Falls der zweite Wert von R kleiner Schwellwert
P(6:10,7:8)=0             % Falls der neunte Wert von R kleiner Schwellwert


Der Block "Overwrite Values" macht genau das, jedoch nicht dynamisch, deshalb unbrauchbar. Ich hoffe man vresteht was ich vorhabe.
_________________

Dionysos
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.09.2011, 14:20     Titel:
  Antworten mit Zitat      
Hallo Dionysos,

Ich verstehe Deine Frage nicht.
Im Beispiel-Code is R eine [2x5] Matrix.
Wieso ist die Suchmaske dann eine 5x2 Matrix?
Wie kann man die 10 mal nach rechts schieben? Ich würde erwarten, dass man eine 2x5 Matrix in einer 10x10 Matrix 9 mal nach rechts schieben kann.
Wie kann der Inhalt von R kleiner als ein Schwellenwert sein, wenn R doch eine Matrix ist? Welche Norm verwendest Du hierfür?

Was bedeutet "Falls der zweite Wert von R kleiner Schwellwert"? Welcher zweite Wert? R ist doch eine Matrix, oder?

Da ich nicht mit Simulink arbeite, habe ich da vielleicht ein Verständnisproblem. In Matlab sollte das Einfügen von Nullen aber genauso gehen, wie von Duir gezeigt, nur halt eben mit Variablen im Index.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Dionysos
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 16.09.09
Wohnort: ---
Version: R2011a
     Beitrag Verfasst am: 13.09.2011, 14:21     Titel:
  Antworten mit Zitat      
So, ich habe es nun hinbekommen, aber ist dies auch ohne for-Schleife möglich? Irgendwie geschickter, schneller? Dafür muss es doch irgendwelche Simulink Blöcke geben, oder etwa nicht?

Code:
P=(rand(10,10)*100);
[y,x] = size(P);    % 10x10
R=rand(2,5);
[s,t] = size(R);    % 2x5  

n=1;
m=1;
for j= 1:t      % Zählt die einzelnen Stelle der R Matrix hoch
    if R(j) <= 0.5     % Prüft ob Stelle kleiner Schwellwert
        P(n:n+(t-1),m:m+(s-1))=0;    % Erstellt Null-Untermatrix
    end
    m=m+s;
end

n=1+(t-1);      % Reset der Zähler, neue Zeile
m =1;           % Reset der Zähler

for j= t+1:y      % Zählt die einzelnen Stelle der R Matrix hoch
    if R(j) <= 0.5     % Prüft ob Stelle kleiner Schwellwert
        P(n:n+t,m:m+(s-1))=0;    % Erstellt Null-Untermatrix
    end
    m=m+s;
end

Erg = P;


Edit:
Mein Beispiel hat eine Suchmaske 5x2. Diese schiebt sich 9 mal (sorry) durch die 10x10 Matrix. Nehmen wir an sie würde als Ergebnis einen Mittelwert ausgeben, so hätte man als Ergebniswerte eine 2x5 Matrix. Diese dient dann als Schwellwert, dass die Suchmaske Nullen auf der 10x10 Matrix hinterlässt.
_________________

Dionysos
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.