Cześć,
Piszę pracę inżynierksą o wykrywaniu burz za pomocą nagrań z kamery wizyjnej. Potrzebuję pomocy w zrobieniu kodu w Matlabie, który będzie pełnił następujące funkcje:
-
wgrywanie nagrania oraz wykrycie na nim wyładowania/pioruna zarówno z obrazu jak i samego dźwięku wyładowania;
-
gdy nastapi wykrycie pierwszego wyładowania, ma nastąpić odliczanie w sekundach od 0 aż do następnego wyładowania;
-
gdy nastąpi kolejne wyładowanie, odliczanie ma zostać zatrzymane, a następnie program ma napisać ile czasu trwał okres między mierzonymi wyładowaniami, a następnie znowu odliczać od 0 do następnego wyładowania;
Czas między wyładowaniami będzie okreslał odległość burzy od stanowisko, zakładając, że prędkość rochodzenia się dźwięku w powietrzu to ok. 340m/s
Na ten moment udało mi się napisać coś takiego, lecz nadal program nie działa jak należy:
% Wczytywanie nagrania video
videoFile = 'burza_x.mp4';
videoObj = VideoReader(videoFile);
% Wczytanie dźwięku z nagrania
[soundData, fs] = audioread(videoFile);
% Wczytanie parametrów detekcji pioruna/wyładowania
threshold = 0.1; % Próg progowania dla kanału niebieskiego
frameInterval = 10; % Minimalna liczba klatek między kolejnymi wyładowaniami
% Licznik czasu do kolejnego wyładowania
timeToNextLighting = 0;
% Odtworzenie dźwięku
sound(soundData, fs);
% Odtwarzanie klatek
while hasFrame(videoObj)
frame = readFrame(videoObj)
% Wyświetlanie
%imshow(frame);
%title(['Analiza nagrania: ' videoFile]);
% Analiza klatki do detekcji pioruna
blueChannel = frame(:, :, 3); % Kanał niebieski
lightningDetected = any(blueChannel(:) > threshold);
% Detekcja dźwięku
soundDetected = any(abs(soundData) > 0.1);
% Gdy nastąpi wykrycie wyładowania, następuje odliczanie
if lightningDetected || soundDetected
disp('Wykryto piorun/wyładowanie');
% Odliczanie [s]
for i = timeToNextLighting:1:40
disp(['Następne wyładowanie: ' num2str(i) ' sekund']);
pause(1);
end
% Zerowanie licznika
timeToNextLighting = frameInterval;
end
% Zmniejszenie licznika czasu
timeToNextLighting = max(timeToNextLighting - 1, 0);
end
Proszę o pomoc co zmienić, co dodać, co odjąć lub jakiś nowy pomysł na ten program, gdyż nie znam się za bardzo na Matlabie, a to jedyne co udało mi się wymyślić.
Z góry bardzo dziękuję