простой случай оптического потока - PullRequest
11 голосов
/ 26 мая 2011

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

Исследования, которые я уже сделал: Я начал читать Оценка оптического потока с высокой точностью на основеТеория деформирования бумаги, и я планирую просмотреть Particle Video .Я нашел реализацию оптического потока MATLAB High Accuracy Optical Flow .Тем не менее, статьи (и код), кажется, описывают концепции, которые являются очень сложными и могут потребовать много времени для меня, чтобы разобраться и понять.Я надеюсь, что решение моей проблемы может быть более простым.

Проблема: У меня есть последовательность изображений.Изображения изображают процесс разрушения материала, когда материал и фон черные, а трещины - белые.Я заинтересован в том, чтобы пересмотреть последовательность изображений в обратном порядке, пытаясь отобразить все трещины, которые образовались в процессе разрушения, на первое черное изображение.Вы можете думать о материале как о большой загадке, и я пытаюсь собрать кусочки в обратном порядке, в котором они разбились.

На каждом изображении могут быть только возникающие трещины и / или трещины, которые полностью сформировались (и таким образом создали фрагмент).В течение всего процесса разрушения некоторые фрагменты могут отделяться и разрушаться дальше.Фрагменты также могут перемещаться дальше друг от друга (небольшое изменение между последующими кадрами).

Требуемый выход: Все трещины / линии в последовательности, сопоставленные с первым изображением в последовательности.

Дополнительные примечания: Изображениядоступны в формате градаций серого (т.е. в оригинале), а также в двоичном формате, где трещины выделены белым цветом, а фон полностью черным.Ниже приведены некоторые примеры изображений.

orig_img1 orig_img2 orig_img3

binary_img1 binary_img2 binary_img3

В верхней строке показаны исходные изображенияи нижний ряд показывает двоичные изображения.Как вы можете видеть, трещина, которая идет по середине, становится все шире и шире по мере развития последовательности изображений.Таким образом, нижняя трещина движется вместе с нижним фрагментом.Обходя последовательность в обратном порядке, я надеюсь алгоритмически понять, что средняя трещина объединяется в единое целое (и правильно сопоставить ее с первым изображением), а также правильно отобразить нижнюю трещину, сохраняя ее правильное соответствие (размер и положение) снижний фрагмент.

Последовательность обычно содержит около 30 ~ 40 изображений, поэтому я только что показал начальное подмножество.Кроме того, хотя эти изображения не показывают его, возможно, что конкретное изображение содержит только начало трещины (то есть его первоначальный вид), а на последующих изображениях оно становится все длиннее и длиннее и может соединяться с другими трещинами.

Язык: Хотя это и не обязательно, я хотел бы реализовать решение с использованием MATLAB (просто потому, что большая часть другого кода, относящегося к проекту, была сделана в MATLAB).Однако, если OpenCV может быть проще, я гибко использую свой язык / библиотеку.

Любые идеи очень ценятся.

Ответы [ 3 ]

4 голосов
/ 13 июня 2011

Пройдите вперед, а не назад, и не используйте оптический поток. Используйте линии разлома, чтобы сегментировать черные части, отслеживать центроид каждого черного сегмента с течением времени. Всякий раз, когда появляется новая линия разрушения, которая пересекает черный сегмент, разделите сегмент на две части и продолжайте отслеживать каждый сегмент отдельно.

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

0 голосов
/ 17 ноября 2015

Я согласен с Дамианом.Большинство методов оптического потока, таких как HAOF, основаны на приближении Тейлора первого порядка константного уравнения интенсивности I (x, t) = I (x + v, t + dt).Это означает, что решение зависит от производных изображения, где градиент определяет величину и угол вектора движения, т.е. вам нужно определенное количество текстуры.Однако очень низкой текстуры ваших небинарных изображений может быть достаточно.Вы можете попробовать выравнивание гистограммы, чтобы увеличить контрастность ваших входных данных, но важно применить одно и то же преобразование для обоих входных изображений.например, следующим образом:

cv::Mat equalizeMat(grayInp1.rows, grayInp1.cols * 2 , CV_8UC1);
grayInp1.copyTo(equalizeMat(cv::Rect(0,0,grayInp1.cols,grayInp1.rows))); 
grayInp2.copyTo(equalizeMat(cv::Rect(grayInp1.cols,0,grayInp2.cols,grayInp2.rows)));
cv::equalizeHist(equalizeMat,equalizeMat);
equalizeMat(cv::Rect(0,0,grayInp1.cols,grayInp1.rows)).copyTo(grayInp1);
equalizeMat(cv::Rect(grayInp1.cols,0,grayInp2.cols,grayInp2.rows)).copyTo(grayInp2);
// estimate optical flow
0 голосов
/ 01 августа 2013

Я бы посоветовал вам следовать вашей первоначальной идее возврата трещин. Вы знаете, как выглядят трещины, чтобы вы могли отслеживать все точки, которые принадлежат трещине. Вы просто отслеживаете все белые точки с помощью оптического трекера потока, начинаете с трекера Lukas-Kanade и смотрите, где вы находитесь. Высокоточный метод оптического потока является глобальным и более общим, я буду отслеживать все пиксели в изображении, стараясь сохранить некоторую плавность повсюду. LK - это локальный метод, который будет использовать небольшое окно вокруг каждой точки для отслеживания. Проблема в том, что в трещинах все пиксели просто черного цвета, поэтому ничего не нужно отслеживать, вы просто потратите время, пытаясь отследить то, что не можете отследить, и вам не нужно отслеживать. Если линии очень прямые, у вас может возникнуть проблема с апертурой , и вы получите неточные результаты. Вы также можете попробовать некоторую подгонку / деформацию формы на основе змей.

...