Matlab видео обработка биения сердца.код дополнен - PullRequest
7 голосов
/ 06 февраля 2012

Я пытаюсь написать код, который помогает мне в моей биологической работе.Концепция кода заключается в анализе видеофайла сжимающихся клеток в ткани

Пример 1

Пример 2: youtube.com/watch?v=uG_WOdGw6Rk

И вычеркните следующее:

  1. Количество ударов в минуту.
  2. Сила удара
  3. Регулярность избиения

И поэтому я написал код Matlab, который будет циклически проходить по видео и сравнивать каждый кадр с тем, который следует за ним, и видеть, есть ли какие-либо изменения в кадрах, и отображать эти изменения на кривой.

ПримерМой код Результаты enter image description here

Ядро Текущего кода, который я написал:

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);

====================

Итак, это мой код, но есть ли способ улучшить его, чтобы получить лучшие результаты?

, потому что мне кажется, что imabsdiff не совсем то, что я должен использовать, потому что мое видео содержит многошума и это влияет на мои результаты много, и я думаю, что все мои данные усилителя на самом деле подделаны!

Кроме того, я на самом деле могу извлечь только избиениеОцените это путем подсчета пиков, но как я могу улучшить свой код, чтобы иметь возможность получать из него все необходимые данные ??

спасибо, также очень ценю вашу помощь, это небольшая часть кода,если вам нужна дополнительная информация, пожалуйста, дайте мне знать.спасибо

Ответы [ 3 ]

9 голосов
/ 07 февраля 2012

Вы говорите, что пытаетесь написать «простой код», но на самом деле это не простая проблема.Если вы хотите точно измерить движение, вы должны использовать алгоритм оптического потока или посмотреть на поле деформации из алгоритма регистрации.

РЕДАКТИРОВАТЬ: как Мэттговоря, и, как мы видим из вашей кривой, ваш метод подходит для извлечения количества ударов и регулярности.Однако, чтобы точно определить силу ударов, вам необходимо рассчитать движение клеток (больше движения = более сильный удар).К сожалению, это не так просто, и именно поэтому я дал вам ссылки на два алгоритма, которые могут рассчитать движение для вас.

4 голосов
/ 12 февраля 2012

Какие структуры мы видим на видео? Например, что такое большой темный объект в нижней части изображения? Этот объект будет относительно легко отслеживать, но будут ли данные из этого объекта иметь отношение к получению данных о сокращении клеток?

Это изображение из светового микроскопа? При каком увеличении? Какой масштаб? Из видео видно, что есть несколько движений и областей движения. Так следует ли вам сосредоточиться на меньшей или большей области, чтобы получить ваши измерения? На клеточное сокращение или сокращение области? По своему опыту я знаю, что изменение того, что вы делаете в микроскопе, может быть намного лучше, чем сложная обработка изображений;)

Мне повезло с Ганном и Никсоном Дуал Снейк по аналогичной проблеме: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.64.6831

Я поместил первое приближение в первый кадр вручную и использовал результат сегментации в качестве начальной кривой следующего кадра и т. Д. Моя реализация для этого с 2000 года, и у меня есть только на бумаге, но если вы найдете бумаги Ганна и Никсона интересными, я, вероятно, могу найти свой код и отсканировать его.

@ Мэтт предложил сглаживание и обнаружение краев, чтобы улучшить ваши результаты. Это хороший совет. Вы можете комбинировать сглаживание, определение пороговых значений и обнаружение краев в одном вызове функции, детекторе краев Canny. Затем вы можете набрать края, чтобы получить большее перекрытие между кадрами. Небольшое перекрытие, вероятно, будет означать большое движение между кадрами. Вы можете использовать это так же, как и раньше, чтобы найти ритм. Теперь вы можете сделать второй проход и добавить все изображения набранного края, относящиеся к одному удару. Это должно дать вам представление об области, отслеживаемой клетками при их сокращении. Может быть, это можно использовать в качестве полезной меры для сокращения большого скопления клеток.

У меня нет доступа к Matlab и Toolbox Toolbox, поэтому я не могу дать вам проверенный код. Вот несколько подсказок: http://www.mathworks.se/help/toolbox/images/ref/edge.html, http://www.mathworks.se/help/toolbox/images/ref/imdilate.html и http://www.mathworks.se/help/toolbox/images/ref/imadd.html.

4 голосов
/ 10 февраля 2012

Несколько довольно простых вещей, которые можно попробовать:

  • Я бы подробно посмотрел на то, что делает ваш порог, и действительно ли это то, что вы хотите делать.Я не знаю, что именно делает Graythresh, но, возможно, он объединяет различные функции, которые вы хотели бы выделить в одинаковые значения пикселей.Вы пробовали рисовать различия между изображениями без порога?Или вы можете использовать пороговые значения для нескольких классов, а не только для черно-белых.
  • Если основная проблема связана с шумом, вы можете попробовать сгладить изображения, прежде чем принимать разницу, чтобы различия в шумах были сглажены, а различияв больших объектах, вызванных движением, они все еще будут присутствовать.
  • Вы можете попробовать определить края изображения, прежде чем принимать разницу.

Как упоминал предыдущий ответчик, вы также можетеПосмотрите на алгоритмы отслеживания движения и регистрации, которые будут оценивать фактическое движение между каждым изображением, а не просто сообщать вам, отличаются ли изображения или нет.Я думаю, что это достойное резюме по Википедии: http://en.wikipedia.org/wiki/Video_tracking. Но они могут быть довольно сложными.

Я думаю, что если все, что вам нужно, это найти время и период сокращений, то вы бы неНе обязательно делать детальное отслеживание движения или деформируемую регистрацию между изображениями.Все, что вам нужно знать, это когда они значительно меняются.(«Сила» сокращения - другой вопрос, чтобы точно определить, что вам, вероятно, нужно знать фактическое движение.)

...