Перейти к содержимому
Compvision.ru
Smorodov

Cегментация, змеиные алгритмы, Level set метод

Recommended Posts

Level set сегментация:

http://www.engr.uconn.edu/~cmli/DRLSE/

OpenCvLevelSetSegmentation.rar

В аттаче проект для VS2008 и документ с описанием (англ).

post-1-0-07045300-1299534400_thumb.jpg

Реализован только простейший вариант.

После оптимизации должно получиться что то типа этого:

или этого:

PS: Именно эти видео сделаны матлабовским кодом localized_seg.rar взятым отсюда:

http://www.shawnlankton.com/2008/04/active-contour-matlab-code-demo/

PSS: Много полезного материала по сегментации: http://www.jgmalcolm.com/

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Имеется задача произвести сегментацию изображения. Хочу использовать PyrMeanShiftFiltering, но программа вылетает на этой строке. Оба изображения трехканальные размера 640*480.

Код:

segment = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 3 );

cvPyrMeanShiftFiltering(img, segment, 20, 40, 2);

Ошибка: Unhandled exception at 0x774e1f70 in tracking_1.5.exe: 0xC0000005: Access violation reading location 0x0000027f.

Из-за чего это может быть? msvs 2008 + opencv 2.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может ли это быть связано с библиотекой Videoinput?

Тоже самое с функцией PyrDown.

Inpaint работает, как нужно.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что-то я ни как не соображу, проект для VS2008 из файла OpenCvLevelSetSegmentation.rar запускается, но с ошибками - не может найти и подключить следующие файлы:

#include <opencv2/objdetect/objdetect.hpp>

#include <opencv2/features2d/features2d.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/calib3d/calib3d.hpp>

#include <opencv2/imgproc/imgproc_c.h> 

#include <opencv2/imgproc/imgproc.hpp>

Не подскажете где искать эти файлы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

сам недавно столкнулся с такой проблемой (делал Генератор комиксов) :)

дело в том, что в версии 2.1 в реализации этой функции есть ошибка, впрочем у меня она нормально работала в Release-версиях программы.

можете погуглить и найти как пофиксить эту ошибку и пересобрать библиотеку.

или же использовать версию 2.2, где эта ошибка пофиксена ;)

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

синтаксис похож на 2.2 версию opencv. У вас какая версия?

У меня версия 2.0. Поиском файлы не нашлись. Жаль не выходит запустить проект, хотел погонять алгоритм, очень занятный показался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

OpenSource библиотека для анизотропной фильтрации и сегментации изображений методом Level set:

http://www.sintef.no/Projectweb/Geometry-Toolkits/LSSEG/

Набор демонстрационных программ к ней:

http://www.sintef.no/upload/IKT/9011/geometri/lsseg/doc/html/sample_programs_page.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Level Set сегментация на CUDA 4.0 и VS2010.

post-1-0-60144300-1327407769_thumb.png

Время на 640 итераций примерно 0.5 сек.

Можно переделать для работы с видео.

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

Солюшн для 2010 студии. Я переделал на CUDA алгоритм c первого поста.

Пытался оптимизировать, но что-то не очень поддается :), опыта программирования GPU маловато.

В архиве небольшой бардак, но лень разбирать:

OpenCV_HW.rar

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в опенцв есть cvSnakeImage это не то же самое?

пример

http://blog.csdn.net/crond123/article/details/3951879

для ImageJ но немного не то

http://athena.physics.lehigh.edu/jfilament/index.chy

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а можно заранее задавать шаблон? чтобы контур как бы к нему сходился?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не очень понял вопрос.

В Level-Set задается начальное приближение (у меня в примерах просто рамка вокруг изображения). С него он начинает сжиматься.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да, я просто не очень понял как он работает.

что там означает что "Реализован только простейший вариант."?

т.е. без разницы какой формы начальная область?

по сути захватятся\обведутся все элементы которые попали под критерии настройки?

можно как то обвести на картинке область и чтобы все остальные области выделились уже на основе обведенной?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть еще быстрый вариант, который работает только с окрестностью границы.

Да, он должен захватывать все элементы, чтобы среднее значение по области при изменении границы разделения областей менялось заметно. Плюс обычный змеиный учет градиента на границе и критерий гладкости контура. Топология не играет большого значения, то есть контуры в процессе итераций могут сливаться/разделяться.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну я спрашивал скорее вопрос такой, что если я выделю одну "амёбу"(не знаю что там точно на картинке сверху) (причем тут учитывается, что я просто аккуратно (или даже не очень, а просто обвожу овалом и по какому либо алгоритму выделяется автоматом более точно) выделяю 1 область, т.е. я ничего не знаю о настройках змеи, а они выставляются из первого выделенного мной объекта), то все остальные амебы на картинке смогут выделится самостоятельно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вообщем если спросить еще проще, то вопрос сводится к

возможно ли получить настройки змеи из в ручную выделенной области?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно попробовать сделать так:

размываем картинку

смотрим чему равно средне по выделенной нами амебе

бинаризируем + дилатация -> бинарное изображение,

которым инициализируем Level-Set (хотя и не знаю даже уже, нужен-ли Level-Set :) ).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще одна змейка (сделано по руководству http://www.iacl.ece.jhu.edu/static/gvf/):

GVS_FIELD.cpp

post-1-0-92488000-1348491133_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поправьте интерполятор, я там накосячил:

эту строчку //p=k1*vmm+k2*vmp+k3*vpm+k4*vpp; поменяйте на эту
p=(k1*(vmp+vpm+vpp)+k2*(vmm+vpm+vpp)+k3*(vmm+vmp+vpp)+k4*(vmm+vmp+vpm))/3.0;[/code]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Солюшн для 2010 студии. Я переделал на CUDA алгоритм c первого поста.

Пытался оптимизировать, но что-то не очень поддается :), опыта программирования GPU маловато.

Вроде бы в архиве отсутствуют файлы CommonTools.h, HelloWorld.cpp и kernel.cu (я так думаю, что в нем собственно исходный код этого алгоритма на cuda), без которых проект не соберется. Было просто замечательно добавить их в архив и выложить по новой. Спасибо. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за сигнал :) , все недостающее нашел и перезалил. Даже больше :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×