Я пытаюсь написать код, который помогает мне в моей работе по биологии. Концепция кода заключается в анализе видеофайла сокращающихся клеток в ткани.
Пример 2: youtube.com/watch?v=uG_WOdGw6Rk
И начертите следующее:
- Количество ударов в мин.
- Сила удара
- Регулярность избиения
И поэтому я написал код Matlab, который будет циклически просматривать видео и сравнивать каждый кадр с тем, что следует за ним, и смотреть, есть ли какие-либо изменения в кадрах, и отображать эти изменения на кривой.
Пример результатов моего кода
Ядро текущего кода, который я написал:
for i=2:totalframes
compared=read(vidObj,i);
ref=rgb2gray(compared);%% convert to gray
level=graythresh(ref);%% calculate threshold
compared=im2bw(compared,level);%% convert to binary
differ=sum(sum(imabsdiff(vid,compared))); %% get sum of difference between 2 frames
if (differ ~=0) && (any(amp==differ)==0) %%0 is = no change happened so i dont wana record that !
amp(end+1)=differ; % save difference to array amp wi
time(end+1)=i/framerate; %save to time array with sec's, used another array so i can filter both later.
vid=compared; %% save current frame as refrence to compare the next frame against.
end
end
figure,plot(amp,time);
=====================
Итак, это мой код, но есть ли способ улучшить его, чтобы получить лучшие результаты?
потому что я чувствую, что imabdiff - это не совсем то, что мне следует использовать, потому что мое видео содержит много шума, и это сильно влияет на мои результаты, и я думаю, что все данные моего усилителя на самом деле подделаны!
Кроме того, я на самом деле могу извлечь из этого только частоту биения, подсчитывая пики, но как я могу улучшить свой код, чтобы иметь возможность получать из него все необходимые данные ??
спасибо, также очень ценю вашу помощь, это небольшая часть кода, если вам нужна дополнительная информация, пожалуйста, дайте мне знать. спасибо