ProgRoman 9 Жалоба Опубликовано April 24, 2012 Не могу разобраться как по distanceTransform понимать форму объекта к примеру круг, треугольник или прямоугольник... тут вроде бы написано что можно и что делали так, но как эту информация использовать для узнавания этих фигур пока идей нету http://www.lektorium.tv/lecture/?id=13539 там видео лекция и презентация Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 24, 2012 Дык скелет ведь получется (после бинаризации по порогу), по нему и узнавать. Круг -> точка Треугольник -> три отрезка, сходящиеся к центру от углов Квадрат -> четыре отрезка идущие от углов к центру и т.д., логика должна быть понятна http://reference.wolfram.com/mathematica/ref/DistanceTransform.html http://reference.wolfram.com/mathematica/ref/InverseDistanceTransform.html И здесь обязательно посмотрите: http://blog.naver.com/PostView.nhn?blogId=simonsayz&logNo=120124949358 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgRoman 9 Жалоба Опубликовано April 24, 2012 Спасибо ссылки читаю, у меня такие картинки, но вроде бы они там не как у вас на картинках.. ниже приведу код Mat img1 = imread(path1, CV_LOAD_IMAGE_GRAYSCALE); Mat gim1,gim2,gim3; Canny(img1,gim1,50,250,3); gim2 = 1-gim1/255; distanceTransform(gim2,gim3,CV_DIST_L2,3); normalize(gim3,gim3,0.0,1.0,NORM_MINMAX); imshow("original",img1); imshow("Canny",gim2*255); imshow("distanceTransform",gim3); Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 24, 2012 Все правильно у Вас на картинках. DistanceTransform в качестве яркости точки выдает расстояние до ближайшей черной точки. Если бы у Вас подсунете фигуры из статей по ссылкам, которые я дал, то и результаты будут похожи. В примерах используется бинаризованное, а не контурное изображение. Прорисуйте по-очереди (с очисткой изображения) контуры с заполнением белым цветом, над каждым выполните дистанционное преобразование, и совместите результаты. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgRoman 9 Жалоба Опубликовано April 25, 2012 Ещё вопрос по DistanceTransform как вычислить расстояние по нему от одного объекта до другого..в DistanceTransform хранятся расстояния до ближайшего края т.е. что бы получить ответ вроде бы надо строить к примеру пирамиду шаблона и её накладывать на нашу сцену потом ею двигать, пройтись скользящим окном по всей сцене и найти лучший отклик или отклики... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 25, 2012 называется chamfer matching вроде бы я даже выкладывал реализацию через distance tranform тут на форуме, версию без изменения масштаба, написал для того чтобы проверить насколько быстро работает, т.к. встроенный в опенцв очень тормозит. хотел написать еще чтобы было многопоточно. но потом забил на это, т.к. не вижу принципиальной разницы по сравнению с template matching через кросскореляцию. единственное различие в скорости работы(не могу оценить теоретически, но практически кажется, что через много потоков и FFTW работать будет быстрее) и в том что в одном случае мы работаем с контурами(а правильно выделить контуры тоже проблема),а в другом прямо с изображением. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах