mov = VideoReader('test_.avi') %Einlesen der Videodaten (Frames)

% Einstellungen für die Anzahl der eingeladenen Bilder und die betrachteten
% Pixel
Anzahl_Bilder=178;
i=1


 for (r = 1:Anzahl_Bilder )
      clearvars -except mov Anzahl_Bilder r Erg i
     Bilddaten=read(mov,r)%Bilddaten für gewünschtes Bild in Q schreiben
     Bilddaten=Bilddaten(:,4,1)   %Auswahl der Grauwerte (alle R-Werte aus Spalte 4
     
     Bilddaten=double(Bilddaten) %Datentyp in double umändern
for (o=1:140)           % Eine Zeile hat 140 Pixel
    Bilddaten_2(o)=Bilddaten(o)  %aus nx1, 1xn Matrix machen
end

%Filter (gleitender Mittelwert (Gauß) zum Glätten des Signals
windowSize = 7;   
g=filter(ones(1,windowSize)/windowSize,1,Bilddaten_2)   

L2 = length(g);           %Anzahl der Datenpunkte (x-Achse)
x2=1:1:L2;                   %Normierung der x-Achse
n2=3;                        %Ordnung

xx2=1:0.1:L2;                % Normierung der polyval x-Achse

p = polyfit(x2,g,n2) %berechnet die Koeffizienten
pp = polyval(p,xx2) %auswertung des polynoms



%Suche nach Maximum und Minimum
for (o=2:length(pp)-1)
    if (pp(o)>pp(o-1)& pp(o)>pp(o+1))
        S1=o
         for (j=o:length(pp)-1)
                   if (pp(j)<=pp(j-1) & pp(j)<=pp(j+1)) 
                     S2=j
                     break,
                  end
          end
    end
end

%%Neue Kurve für den relevanten Bereich erzeugen
 for (o=S1:S2)
    Kurve(o-S1+1)=pp(o)
 end
 
%Ableitung der neuen Kurve
ableitung1 = diff (Kurve);          %1. Ableitung von p (polyfit)
ableitung2 = diff (ableitung1); %2. Ableitung von p (polyfit)

%Wendepunkt bestimmen
for k=1:length(ableitung2)-1
    if (ableitung2(k)<0 & ableitung2(k+1)>0) | (ableitung2(k)>0 & ableitung2(k+1)<0)
              
                yWert=round(k*0.1)
                Wendepunkt =k*0.1+S1-1 %Position des Wendepunktes auf der x-Achse
                
                
    end
end
i=i+1
double Erg(i);
Erg(i)= Wendepunkt; %Speichern der x-Werte des Wendepunktes in Array

 end

plot(Erg) 

windowSize = 7;   
Erg2=filter(ones(1,windowSize)/windowSize,1,Erg); 
Erg2=filter(ones(1,windowSize)/windowSize,1,Erg2) 


ableitung11 = diff(Erg2);          %1. Ableitung von p (polyfit)

for k=1:length(ableitung11)-1
    if (ableitung11(k)<0 & ableitung11(k+1)>0) | (ableitung11(k)>0 & ableitung11(k+1)<0)
              
                yWert=round(k*0.01)
                E(k) =k*0.01 %Position des Wendepunktes auf der x-Achse
                
    end

end
%Für den Fall das es mehrere Werte nacheinander gibt für die die 1.Abl=0
%ist werden die benachbarten auf 0 gesetzt

l1=1
for l=2:length(E)-1
    if (E(l)> E(l+1) &E(l)> E(l-1))
        E(l+1)=0
        E(l-1)=0
       
    end
end

%Alle Extrempunkte in eigenem Array speichern
l1=1
for l=1:length(E)
    if (E(l)>0)
        Z(l1)=l
        l1=l1+1
    end
end

%Periodenlänge bestimmen
l1=1
for f=4:2:length(Z)
    Dauer(l1)=Z(f)-Z(f-2)
    l1=l1+1
end
%bestimmung der Frequenz
Dauer1=mean(Dauer)
P = (Dauer1/24)
Frequenz= 1/P
    




