Smorodov 579 Жалоба Опубликовано March 5, 2012 Может это будет интересно, картинки интересные, правда немного по-японски , но это мак кого сейчас останавливает. http://echinocactus.blogspot.com/2009_02_01_archive.html Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано March 6, 2012 ну в итоге я пользуюсь Zhang-Suen algorithm для скелетизации, это помогает в плане того, что не надо работать с толщиной, но потом то все равно надо как то обрабатывать, хотя бы как то спрямить линии. нашел кстати неплохую программу WinTopo.(она вроде как бесплатная(еще есть pro версия вроде платная), но на сайте производителя её скачать нельзя т.к. ссылки битые, но можно найти в интернете) кстати этот японский код после подключения новых библиотек даже заработал, только там все написано через cvSet2D. что наверно не супер быстро. + еще коментарии не отображаются нормально. посмотрел еще, они там делают скелетизацию через морфологию, получается хреново и там еще 2 процедуры которые делают соединение и разъединение и на них тратится всё основное время, вообще конца я смог дождаться только для маленьких тестовых картинок. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано March 6, 2012 про сглаживание все таки нашел информацию некую https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxnbHlob3ZnbnxneDo0ZjljZmNhYWNkZmEyYTgz&pli=1 https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxnbHlob3ZnbnxneDoxZWVmOTkxYzA0YzIwNWJi Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 6, 2012 Ну тогда и это туда-же: http://research.microsoft.com/en-us/um/people/kopf/pixelart/ http://en.wikipedia.org/wiki/Pixel_art_scaling_algorithms Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано March 7, 2012 ну там не та векторизация. вот еще нашел http://faculty.nps.edu/ncrowe/oldstudents/cardosothesis.htm но такое ощущение, что все это пляски с бубном. вот еще нечто похожее на интересное, но там вроде заранее надо знать форму объекта. http://users.ntua.gr/karank/Demos/2D.htm т.е. детектор границ никак не будет нормально работать, если не знает чего мы хотим на этой картинке найти. я сейчас филтьтрую,делаю otsu threshold, потом скелет делаю чтобы получить однопиксельные границы(вот это я может делаю зря, ибо возможно можно как то блобы сразу преобразовать в линии) , потом эти границы я фильтрую и связанные отрезки заменяю на ортогональные линии (хотя по-хорошему то их надо заменять наклонными линями, т.к. линии у меня действительно немного наклонные(0.3-0.5 град)) постоянные проблемы с маленькими элементами и с разрывами. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано March 7, 2012 + еще бывает, что контуры как бы немного округлые у углов. вообщем вот эти картинки должны быть квадратами. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
trinka 1 Жалоба Опубликовано March 25, 2012 при применении детектора границ Кении не всегда выделаются все границы (рис1). тогда я решил использовать dilate в несколько итераций(рис2) как видно, пол определился относительно нормально. теперь нужно применить erode так, чтобы изменения, привнесенные dilate, были устранены: линии стали тоньше. но erode не дает нужного эффекта(рис3). мне нужно чтобы после erode оставалась линия толщиной минимум в 1 пиксель. тогда все будет камильфо. что же делать? возможно есть другие подходы? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 25, 2012 Можно попробовать определять границы при помощи вейвлет-преобразования: http://www.nbuv.gov.ua/portal/natural/Vkhdtu/2009_1/01_fundamentalnie_nauki.htm там статья (чтобы посмотреть результат) СЕГМЕНТАЦИЯ КОМПЬЮТЕРНЫХ ТОМОГРАММ НА ОСНОВЕ ВЕЙВЛЕТ-ПРЕОБРАЗОВАНИЯ или еще интересный подход: http://www.svgopen.org/2007/papers/RaveGrid/index.html 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
trinka 1 Жалоба Опубликовано March 25, 2012 интересует лишь то что реализовано в opencv, либо самые простейшие алгоритмы Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 25, 2012 Вот тут есть готовая реализация вейвлет-преобразования, если интересно. http://www.compvision.ru/forum/index.php?showtopic=734 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано March 26, 2012 можно делать не erode, a скелетонизацию или что то самописное. можно выделять границы для многих параметров канни ,а потом как то обрабатывать их в общую картинку. вообще не очень понятно, что там надо определить, по большому счету не обязательно иметь связную границу чтобы определить что это пол. вообщем дело это неблагодарное, за просто так нормальную границу (в человеческом плане) нельзя получить, надо либо использовать какие то эвристики для постобработки(которые могут не всегда улучшать, но и ухудшать) или использовать оценку результатов с разрывами или использовать обучение. п.с. какое преимущество от вейвлетов? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
trinka 1 Жалоба Опубликовано March 26, 2012 дело в том, что по задаче граница не должна охватывать площади с узким горлышком(положим, 10 пискелей). dilate как раз и объеденяет линии(реально существующие, но не уловленные детектором границ), и объединяет близко расположенные границы(с узким горлышком). в голову приходит только то, что после заливки пола нужно "расширить" эту область в каждой точке границы в направлении вектра нормали к границе в этой точке, на те же 10 пикселей. как можно получить этот вектор? я думаю нужно анализировать несколько соседних точек. но опять: как границу хранить? точками, или линиями(через каждые неск. пикселей проводится прямая) самое обидное окажется, если потом будут частные случаи, которые мой алгоритм портит. пока в голову таких не приходит, но блин так часто бывает( как вариант, использовать findcontours, и там все просто. позже попробую Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 26, 2012 какое преимущество от вейвлетов? Так навскидку не скажу, просто видел результаты работы, визуально мне они больше нравятся. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
trinka 1 Жалоба Опубликовано March 27, 2012 можно как-нибудь сделать противоположное эквализации: нужно более темные и более светлые участки сделать однотипными. еще: есть ли готовый алгоритм постеризации? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 27, 2012 Сегментация Вам нужна. Например, meanshift сегментация (в примерах есть). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
trinka 1 Жалоба Опубликовано March 28, 2012 эта сегментация очень медленная. к тому же на границах появляются много "несегментированных" пикселей. watershed требует предварительных маркеров. возможно нужна предобработка? я делал blur (5). можно ли применить ее на серое изображение? (не получилось) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано March 28, 2012 Pyramid segmentation есть. cvPyrSegmentation Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
trinka 1 Жалоба Опубликовано March 28, 2012 что-то не понимаю что означают пороги у этой функции? немного поигрался, мне кажется рез-т намного хуже чем у meanshift. в принципе, если уменьшить изображение и применять meanshift, то рез-т неплох, но проблема в другом: у камеры нужно вручную настраивать яркость, контрастность и тд. я это делаю на глаз, и не всегда получается оптимально. т.е. для каждого изображения нужно подбирать параметры для meanshift вручную. а т.к. работает она долго, это может занять слишком много времени. к тому же программа претендует на некоторую самостоятельную работу. но это конечно гораздо круче чем то что я предлагал делать dilate можно ли как-то автоматически подгонять яркость и тд к заданным параметрам? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 28, 2012 По поводу скорости, вроде есть версия meanshift для GPU. Для улучшения контрастности можно попробовать cvEqualizeHist Тут пример использования: http://dasl.mem.drexel.edu/~noahKuntz/openCVTut5.html PS: А что такое "заданные параметры" и чему они равны? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
trinka 1 Жалоба Опубликовано March 28, 2012 нужно согласовать параметры meanshift с парамтерами картинки так, чтобы сегментация выполнилась качественно за 1 раз . если не получается, что-то поменять, и за 2-3 уж точно. т.е. все картинки приводить к каким-то параметрам яркости, контрастности и уже для них подобрать параметры meanshift. эквализация делает не совсем то, мне кажется. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 28, 2012 Что это значит для компьютера? сегментация выполнилась качественно Попробуйте определить это строго. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
trinka 1 Жалоба Опубликовано March 28, 2012 Что это значит для компьютера? Попробуйте определить это строго. по задаче пол является одноцветным. нужно выделить всю плоскость пола. для компьютера это понятное дело не определить никак. оценивает человек. дело в другом. я опытным путем подобрал параметры для изображений, но они работают не для всех изображений: если слишком темно/светло сегмент пола определяется неверно. для "средних" по яркости, контрастности алгоритм отрабатывает хорошо. и я понимаю, что комп всегда может ошибиться, в программе будет возможность пользователю "подкрутить ползунок". нужно грубо говоря "автовыравнивание яркости". что-то вроде. может быть не только яркости. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 28, 2012 Тогда, вероятно стоит посмотреть здесь: http://www.compvision.ru/forum/index.php?showtopic=818 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
slicktail 1 Жалоба Опубликовано April 3, 2012 Продолжу тему с моментами в Opencv. Допустим, есть две матрицы 8х8 с числами от 0 до 255. Задача - вычислить моменты такой матрицы и сравнить их. Mat M_Block_yPrev(8,8,CV_8UC1); Moments moments_Block_yPrev = moments(M_Block_yPrev,false); double Hu_moments_Block_yPrev[7]; HuMoments(moments_Block_yPrev,Hu_moments_Block_yPrev); В moments_Block_yPrev и Hu_moments_Block_yPrev я получу данные. Для второй матрицы - аналогично. Теперь, каким образом сравнить моменты двух матриц с помощью matchShapes() ? Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 3, 2012 что за матрица 8х8? моменты вычисляются для контуров же Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах