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

Bilderauswahl anhand der Aufnahmezeit

 

Luebbi310
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2014, 11:27     Titel: Bilderauswahl anhand der Aufnahmezeit
  Antworten mit Zitat      
Hallo,

folgendes Problem, ich habe einen Schießversuch dabei werden pro Schuss mehrere Bilder aufgezeichnet. Nun habe ich am Ende einen Ordner voll mit Bildern, ich brauche aber für meine Auswertung nur das jeweils erste Bild von jedem Schuss.
Ich möchte also anhand der Zeitdaten einen neuen Ordner erstellen welcher nur das jeweils erste Bild beinhaltet.

Habe das schonmal versucht so weit wie möglich zu erstellen
Code:
filepath = uigetdir('pwd','Bitte Ordner waehlen.');
 
            Dateiliste = dir(fullfile(filepath,'*.jpg')); % Erstellt einen Vektor mit allen Bildern
           
            Images = cell(50,2);
           
            for i = 1:length(Dateiliste)
                Images{i,1} = Dateiliste(i,1).name; % Speichert Name des Bildes
                Images{i,2} = Dateiliste(i,1).date; % Speichert Aufnahmezeitpunkt
            end
           
            disp(Images) %Zeigt die Dateiliste          
           
            [~,~,~,HH,MM,SS] = datevec(Images(:,2),'~-~-~ HH:MNMN:SS'); % Speichert Aufnahmezeitpunkt in 3 Vektoren; h,min,sec
           
            SS(1,3)=1;
            SS(:,2)=MM;
           
            % folgende Schleife sucht jeweils das erste Bild einer Bildfolge anhand des
            % Aufnahmezeitpunkts (nur die Sekunden werden berücksichtig)
            % Wird die Lücke zwischen 2 Bildern größer als 2 Sekunden handelt es sich um
            % eine neue Bildfolge
           
            for k=1:(length(SS)-1)
                if SS(k+1)-SS(k)>2
                    SS(k+1,3)=1;
                else
                    SS(k+1,3)=0;
                    if SS(k+1)-SS(k)>(-57) && SS(k+1)-SS(k)<0
                        SS(k+1,3)=1;
                    end
                end
            end
           
            disp (SS)
            neu = find (SS(:,3)==1);  % neu beinhaltet die ersten Bilder der Folgen
            length (neu)


bekomme aber immer eine Fehlermeldung

: The input to DATEVEC was not an array of strings.

Im Anhang noch drei Bilder

Schonmal Danke !

IMG_5552.JPG
 Beschreibung:

Download
 Dateiname:  IMG_5552.JPG
 Dateigröße:  5.89 MB
 Heruntergeladen:  526 mal
IMG_5551.JPG
 Beschreibung:

Download
 Dateiname:  IMG_5551.JPG
 Dateigröße:  6 MB
 Heruntergeladen:  551 mal
IMG_5550.JPG
 Beschreibung:

Download
 Dateiname:  IMG_5550.JPG
 Dateigröße:  5.97 MB
 Heruntergeladen:  547 mal
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 28.07.2014, 12:13     Titel:
  Antworten mit Zitat      
Hallo
Der Fehler kommt zur Stande, weil du wahrscheinlich leeren Cellen hast in deiner Images-Variable

also ändere mal einmal diese Zeile

Code:

Images = cell(length(Dateiliste),2);
 



und einmal passt diese Zeile an:
Code:


[~,~,~,HH, MM, SS]= datevec(Images(:, 2), 'dd-mmm-yyyy HH:MM:SS')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Luebbi310
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2014, 14:35     Titel:
  Antworten mit Zitat      
jetzt funktioniert es Danke,

hab nur noch eine kleine Frage die für einen von euch Profis wahrscheinlich schnell zu lösen ist und zwar hab ich ja jetzt in der Variablen "neu" alle Nummer des jeweils ersten Bildes stehen.

Wie kann ich denn das übertragen so das ich am Ende eine Dateiliste habe in der nur noch diese Bilder drin sind?

Danke

der aktuelle Code:
Code:
filepath = uigetdir('pwd','Bitte Ordner waehlen.');
 
            Dateiliste = dir(fullfile(filepath,'*.jpg')); %Erstellt einen Vektor mit allen Bildern
           
            Images = cell(length(Dateiliste),2);
           
            for i = 1:length(Dateiliste)
                Images{i,1} = Dateiliste(i,1).name; %Speichert Name des Bildes
                Images{i,2} = Dateiliste(i,1).date; %Speichert Aufnahmezeitpunkt
            end
           
            disp(Images) %Zeigt die Liste mit allen Bildern und Aufnahmedatum          
           
            [~,~,~,HH,MM,SS] = datevec(Images(:,2),'dd-mmm-yyyy HH:MM:SS'); %Speichert Aufnahmezeitpunkt in 3 Vektoren; h,min,sec
           
            SS(1,3)=1;
            SS(:,2)=MM;
           
            %folgende Schleife sucht jeweils das erste Bild einer Bildfolge anhand des
            %Aufnahmezeitpunkts (nur die Sekunden werden berücksichtig)
            %Wird die Lücke zwischen 2 Bildern größer als 2 Sekunden handelt es sich um
            %eine neue Bildfolge
           
            for k=1:(length(SS)-1)
                if SS(k+1)-SS(k)>2
                    SS(k+1,3)=1;
                else
                    SS(k+1,3)=0;
                    if SS(k+1)-SS(k)>(-57) && SS(k+1)-SS(k)<0
                        SS(k+1,3)=1;
                    end
                end
            end
           
           
            neu = find (SS(:,3)==1);  %neu beinhaltet die ersten Bilder der Folgen
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: 02.08.2014, 13:50     Titel:
  Antworten mit Zitat      
Hallo Luebbi310,

Anmerkungen zum Code:
uigetdir('pwd') sucht einen Ordner, dessen Name 'pwd' ist. Ich vermute, Du meinst:
Code:
uigetdir(pwd, 'Bitte Ordner wählen');

ohne Anführungsstriche um pwd.

Noch eine Vereinfachung:
Code:
filepath = uigetdir(pwd, 'Bitte Ordner waehlen.');
  Dateiliste = dir(fullfile(filepath, '*.jpg')); %Erstellt einen Vektor mit allen Bildern
  % Ohne Schleife:
  Image = cat(2, {Dateilist.name}.', {Dateiliste.date}.');
  disp(Images) %Zeigt die Liste mit allen Bildern und Aufnahmedatum          
 
  % Time as serial number format:
  Time = datenum(Image(:, 2));
 
  Step = find(diff(Time) > 2 / 86400);  % Index of time steps > 2 seconds
 

Gruß, Jan
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.