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

If Bedingung

 

Fridolina
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2010, 16:20     Titel: If Bedingung
  Antworten mit Zitat      
Hallo liebe Forenmitglieder!

Ich hab ein kleines Problem bei einer if- Bedingung. Möchte bei einer Matrix, Werte die gleich 255 sind null setzen....dazu habe ich folgende schleife:
Code:
:Bild1=imread(filenames{1,1});

Bild2=imread(filenames{1,2});

[n,m]=size(Bild1);
[a,b]=size(Bild2);

for i=1:n
    for j=1:m
        if Bild1(n,m)=255
            Bild1(n,m)=0;
        end
    end
end

Dann kommt aber folgende Fehlermeldung!
The expression to the left of the equals sign is not a valid target for an assignment.
Mmmh, hoffe mir kann jemand bei meinem Fehler weiterhelfen!
Vielen, vielen Dank im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 24.09.2010, 16:32     Titel:
  Antworten mit Zitat      
Hi,

Muss das nicht:
Code:
if Bild1(n,m)==255

heißen?

Du willst ja den Wert abfragen und nicht dort dem Bild1 den Wert 255 zuweisen.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Fridolina
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2010, 16:44     Titel:
  Antworten mit Zitat      
Hallo Phate,

vielen Dank! Das war es!
Aber irgendwie ist es immer noch nicht ganz funktionstüchtig!
Weil ich aus Grauwertbildern den maximalen Wert raus lesen will, nur manche Stellen kaputten Pixeln weiß sind und die wollte ich eben eliminieren!
Was ich ja bisher hab
Code:
Bild1=imread(filenames{1,1});

Bild2=imread(filenames{1,2});

[n,m]=size(Bild1);
[a,b]=size(Bild2);

for i=1:n
    for j=1:m
        if Bild1(n,m)==255
           Bild1(n,m)=0;
        end
    end
end

for i=1:a
    for j=1:b
        if Bild2(a,b)==255
           Bild2(a,b)=0;
        end
    end
end

M1=max(Bild1)
M2=max(Bild2)


M11=max(M1)
M12=max(M2)

Nur checkt er das nicht ganz und ließt mir trotzdem 255 aus??!!
Wieso??

Danke, danke nochmal!
Private Nachricht senden Benutzer-Profile anzeigen
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 24.09.2010, 17:02     Titel:
  Antworten mit Zitat      
Hi,

Also ich seh grad auf anhieb keinen Fehler in deinem Code.
Muss leider sagen dass ich nicht viel Ahnung von Bildverarbeitung hab deswegen die Frage von mir:
Es sind nur ganzzahlige Werte von 0-255 vorhanden und keine Kommazahlen oder?
Falls doch musst du auf Abweichung kontrollieren in deine If bedingung.

Wenn nicht wieter kommst stell die Frage nochmal im anderen Unterforum Bildverarbeitung da sind die Spezailisten Smile.

Wünsche noch ein schönes WE,

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Fridolina
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2010, 17:11     Titel:
  Antworten mit Zitat      
Hey,

mercy, mercy, ne, ne sind ganze Zahl, so wie du sagst von 0-255.
Muss ich dann der Matrix, wo ich ja 255 durch 0 ersetzt habe, ne neue Bezeichnung geben?
Also, wie checkt Matlab, dass er nun die Matrix mit den nullen drin enthalten nehmen soll?
Macht er des an der Reihenfolge fest?

Grüße!
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: 24.09.2010, 17:36     Titel:
  Antworten mit Zitat      
Hallo Fridolina,

Code:
Bild1=imread(filenames{1,1});
[n,m]=size(Bild1);
for i=1:n
    for j=1:m
        %%%%% Nein: if Bild1(n,m)==255
        if Bild1(i,j)==255
           %%%%% Nein: Bild1(n,m)=0;
           Bild1(i,j)=0;
        end
    end
end
 

Du hattes immer nur das letzte Element der Matrix getestet und angepasst.
Nebenbei heißt "Matlab" aber "Matlab", weil es für das Arbeiten mit "Mat"rizen konzipiert wurde. Damit erhält man:
Code:
Bild1=imread(filenames{1,1});
[n,m]=size(Bild1);
Bild(Bild == 255) = 0;
 

Hier ist "Bild == 255" ein [n x m] LOGICAL array mit dem Wert 1, wenn das entsprechende Element gleich 255 ist. LOGICAL Indexing nennt sich das und ist sehr bedeutend beim schreiben von schnellem und kompaktem Matlab-Code.

Wie Du siehst kann man sich in "Bild(Bild == 255) = 0" beim besten Willen nicht mit den Indizes vertun, so dass das nicht nur schneller sondern auch sicherer ist.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2010, 17:42     Titel: Danke
  Antworten mit Zitat      
Hallo Jan,

Smile! Vielen Dank...manchmal sieht man den Wald vor ganzen Bäumen nicht!
Klappt nun echt gut!
Dankeeeeeeee:)!
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.