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

Matrizen untereinander vergleichen

 

NiSe
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.02.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2019, 10:12     Titel: Matrizen untereinander vergleichen
  Antworten mit Zitat      
Hey Leute,

ich bin neu hier, bin auf der Suche nach einer Lösung für mein Problem. Google spuckt nichts brauchbares aus und meine Matlab-Kenntnisse reichen nicht aus, um das Vorhaben in Befehlen auszudrücken. Aber im Prinzip ist es einfach, scheitert eben nur an der Umsetzung.

Im Prinzip möchte ich binäre Bilder untereinander vergleichen. Die Bilder werden eingelesen und als binäre Matrizen ausgegeben, die alle gleich groß sind. Die einzelnen Pixel haben dann den Wert 1 oder 0.

Nun sollen die Matrizen untereinander abgeglichen werden.
1) Wenn in allen Matrizen ein Pixel den Wert 1 hat, dann soll die 1 übernommen werden.
2) Wenn ein Pixel-Wert in allen Matrizen unterschiedlich ist, dann soll die 0 übernommen werden
3) Wenn ein Pixel-Wert in allen Matrizen 0 ist, dann soll die 0 übernommen werden.

Es sollen also nur die 1-en gesucht und übernommen werden, die in allen Matrizen gleich sind, alles andere soll zu 0 gesetzt werden

Am Ende soll eine neue Matrix mit den neuen Pixelwerten erstellt werden.

Ich weiß wie man einen ganzen Ordner mit Bildern in Matlab öffnet und jedes einzelne Bild durch eine Schlaufe ansteuert, aber die Sache mit den Pixeln kriege ich nicht hin.

Die Matlab-Funktion isequal oder der Vergleich durch C=(A==B) gibt ja nur einen Wert true or false raus.

Ich hoffe, ihr könnt mir helfen. Vielen Dank schon mal

Grüße
NiSe
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.458
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.02.2019, 10:22     Titel:
  Antworten mit Zitat      
Hallo,

ich würde sagen: C = A & B

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NiSe
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.02.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2019, 10:59     Titel:
  Antworten mit Zitat      
Harald, vielen Dank, das hat ja echt funktioniert. Und war doch so einfach.

Ich versuche das jetzt in eine Schlaufe umzubauen, dass ich mehr als zwei Matrizen prüfen kann.

Vielen Dank noch mal, du hast mir sehr geholfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
NiSe
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.02.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.02.2019, 15:56     Titel:
  Antworten mit Zitat      
Hmm, brauche vielleicht doch noch eine kleine Hilfestellung für die Schleife. Weiß nicht so recht, wie ich den Operator & in die Schleife einbauen soll.

Bisher habe ich nur das da:

Code:

% Erzeuge eine Liste mit allen TIFF-Dateien im Ordner
Folder = ('C:\Bilder\Test');
DirFiles = dir(fullfile(Folder,'*.tiff'));

%Initialisieren des bereinigten Bildes
tiff_clean = 0;


% Schleife über alle TIFF-Dateien
for i = 1:numel(DirFiles)
     % Aufaddieren aller tiffs
     tiff_clean = double(imread(fullfile(Folder, DirFiles(i).Name))) + tiff_clean;
   
end;
% Bereinigtes Bild
tiff_clean=(tiff_clean & numel(DirFiles));


 


Und bin mir nicht ganz sicher, ob es der richtige Ansatz ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.458
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.02.2019, 17:43     Titel:
  Antworten mit Zitat      
Hallo,

willst du denn wirklich addieren (1+1 = 2) oder ver-und-en (1&1 = 1)?
Wenn ich es richtig verstanden habe, dann letzteres, also

Code:
result = true;
% Schleife über alle TIFF-Dateien
for i = 1:numel(DirFiles)
     % Aufaddieren aller tiffs
     tiff_clean = logical(imread(fullfile(Folder, DirFiles(i).Name)));
     result = result & tiff_clean;
end;


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NiSe
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.02.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2019, 15:01     Titel:
  Antworten mit Zitat      
Hallo Harald,

im Prinzip möchte ich genau das tun, was ich im ersten Post beschrieben habe, aber jetzt mit einen ganzen Ordner mit z.B. 5 oder 8 Bildern. Also der ganze Ordner soll geladen werden und alle Bilder sollen untereinander verglichen werden. Am Ende soll ein "Bereinigtes"-Bild erzeugt werden. Wenn ich das manuell mache, also die Bilder einzeln lade und den Operator "&" verwende, dann funktioniert alles.

Ich habe den Skript nach meiner Logik und meinem Kenntnisstand aufgebaut. Als Beispiel hatte ich einen anderen Skript mit dem man ein Durchschnittsbild erzeugen kann. Ich vermute, dass mir hier einfach die Kenntnisse bzw. das Verständnis für die Befehle fehlen.

Ich habe das jetzt so umgesetzt:

Code:
% Erzeuge eine Liste mit allen TIFF-Dateien im Ordner
Folder = ('C:\Test');
DirFiles = dir(fullfile(Folder,'*.tiff'));

% Initialisieren des bereinigten Bildes

result = true;

% Schleife über alle TIFF-Dateien
for i = 1:numel(DirFiles)
     % Aufaddieren aller tiffs
    tiff_clean = logical(imread(fullfile(Folder, DirFiles(i).Name)));
    result = result & tiff_clean;
end;

% Bereinigtes Bild
tiff_clean=(tiff_clean & numel(DirFiles));

% Speichern des Bildes
filename = fullfile(Folder,'Testbild.tiff')
imwrite(tiff_clean,filename)

% Anzeigen des Bildes
figure;imshow(tiff_clean,[])
 



Ist das richtig so? Oder habe ich es falsch verstanden?

Ich bekomme auf jeden Fall eine Fehlermeldung:

"Reference to non-existent field 'Name'."
"Error in Matrizenvergleich (line 13)
tiff_clean = logical(imread(fullfile(Folder, DirFiles(i).Name)));"
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.458
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.02.2019, 15:14     Titel:
  Antworten mit Zitat      
Hallo,

du musst name statt Name verwenden. Wenn du auf DirFiles im Workspace doppelklickst, bekommst du die Variable angezeigt.

Diese Zeile ist meines Erachtens nicht sinnvoll und sollte weggelassen werden:
Code:
tiff_clean=(tiff_clean & numel(DirFiles));

In den folgenden Zeilen dann mit result weiter arbeiten.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NiSe
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.02.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2019, 10:30     Titel:
  Antworten mit Zitat      
ok, sorry, dass ich selber nicht drauf gekommen bin. Es hat alles super funktioniert, vielen, vielen Dank Harald!!!

Grüße
NiSe
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 - 2024 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.