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

200*5 Bilder addieren/mitteln und speichern

 

ChristianS

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2014, 14:12     Titel: 200*5 Bilder addieren/mitteln und speichern
  Antworten mit Zitat      
Hallo,

ich möchte mit Matlab gerne Bilder addieren und mitteln. Es sind 8-bit .png Dateien. Pro Ordner habe ich 200 Bilder. Gesamt sind es fünf Ordner. Es sollen jeweils die ersten Bilder aus den Ordnern addiert und durch 5 geteilt werden, dann die jeweils die zweiten usw.

Die entstandenen Bilder sollen wieder als .png in gleicher Auflösung abgespeichert werden.

Bisher habe ic folgenden Code zusammengebastelt:
Code:

clc;
clear all;
path1=uigetdir;
path2=uigetdir;
files1=dir(path1); %liste aller dateien in ordner 1
files2=dir(path2); %liste aller dateien in ordner 2
count1=length(files1); % anzahl der dateien in ordner 1
count2=length(files2); % anzahl der dateien in ordner 2
count1
files1
files2

j=0; %Startwert für korrekte Anzahl an Bilddateien am Ende
x=0;

for i=1:count1
    if files1(i).isdir==0
       
        j=j+1;
        fname1 = [path1 '\' files1(i,1).name];
        Bild1 = imread(fname1);
        Bild1 =  double(Bild1)+1;
        fname2 = [path2 '\' files2(i,1).name];
        Bild2 = imread(fname2);
        Bild2 = double(Bild2)+1;
        Summenbild = Bild1 + Bild2;    
        imwrite(Summenbild,x.png);
        x = x+1;
    end
end

       


Damit will ich zunächst zwei Ordner wählen um jeweils die ersten, zweiten,.. Bilder zu addieren. Leider gibt er mir beim Befehl "imwrite(..)" einen Fehler aus:
"Attempt to reference field of non-structure array."

Weiß jemand wieso er das Bild nicht abspeichern kann?

Viele Grüße und schon mal danke für die Hilfe.. da ich kompletter Matlab-Anfänger bin wäre es hilfreich wenn ihr etwas ausführlicher antwortet sonst werde ich eher nicht mitkommen :X


BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 14.03.2014, 14:20     Titel:
  Antworten mit Zitat      
Hallo Christian,

Punkt mit Komma verwechselt? Smile du versuchst auf x.png zuzugreifen, was natürlich nicht existiert Wink
Code:
imwrite(Summenbild,x.png);
imwrite(Summenbild,x,png);


Grüße
Chris
_________________

--> Kapieren statt Kopieren <---
____________________________________________________
FAQs sind dazu da, FAQs zu beantworten Wink
Richtig fragen!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 14.03.2014, 16:42     Titel:
  Antworten mit Zitat      
Hallo

der Name der Datei muss ein String sein, sonst ist das ein Zugriff auf eine Struct, mit dem Feld das nicht existiert

richtig wäre so:


Code:

imwrite(Summenbild,  'x.png');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
ChristianS

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2014, 19:59     Titel:
  Antworten mit Zitat      
Und wie mache ich das x im Dateinamen dann variabel? Ich will ja 200 Bilder in einem Ordner haben und nicht nur eines :X
Im Moment erstellt er mir ein Bild und das war es.. oder er überschreibt das jpg 200 mal.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 14.03.2014, 20:59     Titel:
  Antworten mit Zitat      
Hallo

z.B mit SPRINTF oder NUM2STR

Code:

datei_name = sprintf('Bild_%d.png', x)
imwrite(Summenbild,  datei_name );
 


schau dazu mehr in der Doku
Private Nachricht senden Benutzer-Profile anzeigen
 
ChristianS

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2014, 12:53     Titel:
  Antworten mit Zitat      
Hey super, das hat geklappt!

Ich hätte noch mal eine Frage:

Die Bilder sind alle Schwarz-Weiß. Es gibt 256 "Graustufen" von schwarz bis weiß und ich möchte die Bilder gerne "einfärben", am besten mit einem Gradienten von Rot über Grün bis Blau.
Wie kann man das machen? Und wie kann ich mir gleich eine Skala neben das Bild einblenden lassen indem die Intensitäten von 0 bis 255 beschriftet sind?

Und: welche Doku zu Matlab könnt ihr empfehlen? Als Einsteiger ohne Vorkenntisse hat man es recht schwer. Mir geht es lediglich um die Bildbearbeitung.

Viele Grüße,
Christian
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.03.2014, 13:58     Titel:
  Antworten mit Zitat      
Hallo,

z.B.
Code:


Ähnliche Befehle: image, imagesc

Zitat:
Und: welche Doku zu Matlab könnt ihr empfehlen?

Die Dokumentation von MATLAB an sich. Beispielsweise die Startseite zur Image Processing Toolbox:
http://www.mathworks.com/help/images/index.html

Bücher zum Thema Bildverarbeitung in MATLAB:
http://www.mathworks.de/support/boo.....orytitle.html?category=14

Die in diesem Thread gestellten Fragen sind allerdings noch im Bereich von Standard-MATLAB angesiedelt.

Zudem hilft Forumsuche oder Google. Die Frage nach variablen Dateinamen habe ich z.B. schon etliche Male beantwortet.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ChristianS

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.03.2014, 13:50     Titel:
  Antworten mit Zitat      
Hi,

bin jetzt schon ein Stück weiter gekommen und die Bilder werden mittlerweile so dargestellt wie ich das gerne hätte. Allerdings gibt es das Problem, dass ich das Bild, zum Einfügen der Colorbar, aus der figure-Darstellung mit imshow heraus speichere.

Dabei entstehen mir um das Bild und um die colorbar herum große weiße Ränder. Diese würde ich gerne entfernen.

Dazu habe ich bereits folgenden Artikel gefunden:
http://undocumentedmatlab.com/blog/axes-looseinset-property/

Nur scheinbar funktioniert diese Funktion nicht richtig, wenn man imshow verwendet:
Code:
set(gca,'LooseInset',get(gca,'TightInset'))


Mein aktueller Code schaut so aus:
Code:
clc;
clear all;
path1=uigetdir;
path2=uigetdir;
files1=dir(path1); %liste aller dateien in ordner 1
files2=dir(path2); %liste aller dateien in ordner 2
count1=length(files1); % anzahl der dateien in ordner 1
count2=length(files2); % anzahl der dateien in ordner 2

j=0; %Startwert für korrekte Anzahl an Bilddateien am Ende
x=0;

for i=95:140 %Bildnr für start und Ende
    if files1(i).isdir==0
       
        j=j+1;
        fname1 = [path1 '\' files1(i,1).name];
        Bild1 = imread(fname1);  
        fname2 = [path2 '\' files2(i,1).name];
        Bild2 = imread(fname2);  
       
        %Bildberechnung
        Summenbild = (Bild1 + Bild2)/2;
       
        %Bild-Crop des Summenbilds
        Summenbild2 = Summenbild(162:610, 160:1205);
       
        %Variabler Dateiname
        datei_name = sprintf('Bild_%d.png',x);
        x=x+1;
       
        %Einfügen der Colorbar
        f = figure('visible','off');
        imshow(Summenbild2,jet);  
        cb = colorbar('vert'); % Y-Achsenbeschriftung
        zlab = get(cb,'ylabel'); % Y-Achsenbeschriftung
        set(zlab,'String','Intensität [counts]'); %-Achsenbeschriftung
       

        saveas(f, datei_name);
        close(f);
       
    end
end


Wie krieg ich diese Looseinset Funktion auch bei mir zum laufen?

Anbei noch ein Beispielbild, das die Problematik zeigt:

Bild_0.png
 Beschreibung:

Download
 Dateiname:  Bild_0.png
 Dateigröße:  115.86 KB
 Heruntergeladen:  402 mal
 
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.