mrgloom 242 Жалоба Опубликовано July 29, 2011 наткнулся на статью об разных методах позволяющих выделить линии лучше чем преобразование Хафа. line segment detector (LSD) http://www.ipol.im/pub/algo/gjmr_line_segment_detector/ там есть код, демо и сравнение с другими алгоритмами. Hough transform method Burns method Desolneux method Etemadi method Multisegment detection видимо т.к. использует канни, получаются двойные границы. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 29, 2011 Спасибо интересный сайт. То что находит по 2 линии, связано с тем, что определяется перпендикуляр к градиенту яркости. А у каждой линии (не идеальной), имеется четыре таких перепада. И тут еще вопрос: что считаем линией? Если нарисованный на экране отрезок, то 2 (4) границы, или границу какого-то объекта, то 1 граница. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано July 29, 2011 LSD is aimed at detecting locally straight contours on images. This is what we call line segments. и там даже выдается не столько линия, сколько прямоугольник который имеет толщину. ну понятное дело хотелось бы чтобы "прямоугольник" на реальном изображении превращался в линию, если его толщина мала, а если больше заданной толщины, то оставался прямоугольником. у алгоритма оказалось аж 9 параметров, но и на полном дефолте хорошо работает. но получается много разрывных линий и главный вопрос как их потом использовать? пока есть идея брать каждую точку контура и смотреть разность, потом суммировать, смещать контур по всей области попиксельно, соответственно искать минимум этой суммы. еще вопрос в случае когда у нас все представляется отрезками какую выбрать метрику, т.е. что такое расстояние от отрезка до отрезка.(например расстояние между их центрами, или сумма расстояний между кончеными точками) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 29, 2011 Я как-то переводил кусок одной книги касающийся проблемы группировки отрезков: http://www.compvision.ru/forum/index.php?app=core&module=attach§ion=attach&attach_id=89 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 8, 2011 +более интеллектуальные edge detectors http://www.icgst.com/gvip/Volume6/Issue4/p1150649005.pdf Boie-Cox edge detector http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.22.896 Canny Canny edge detector uses smoothing before edge detection and thresholding. Frei Kirsch Performs convolution with 8 masks calculating gradients. Marr (Marr-Hildreth) edge detector. Performs two convolutions with Laplacian of Gaussian and then detects zero crossings. Prewitt Calculates the Prewitt compass gradient filters. Returns the result for the largest filter response. Roberts calculates the square root of the magnitude squared of the convolution with the Robert's row and column edge detectors. Shen (Shen-Castan) optimized edge detector. Supposed to be effective in the presence of noise. Sobel Sobel edge detector using convolutions with row and column edge gradient masks. Детектор Канни-Дерише (Derish) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 15, 2011 http://www.cs.utoronto.ca/~strider/publications/POCV_adaptive.pdf группировка контуров Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано September 30, 2011 есть какие то алгоритмы или соображения для выделения только горизонтальных и вертикальных линий? возможно с некоторой погрешностью в смысле небольшое отклонение. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано September 30, 2011 Построить уравнение прямой и посмотреть на коэффициенты? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано September 30, 2011 ну это только позволяет отсеить ненужные. не знаю может пройтись edge detector' ом каким либо и потом объединить\апроксимировать каким либо образом в горизонтальные\вертикальные линии. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 30, 2011 Можно попробовать большим ядром (собелем) свернуть по X , найдем частную производную по Х. Затем бинаризация по порогу. Аналогично с Y. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано October 31, 2011 пробовал так IplImage* dest_dx = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1); IplImage* dest_dy = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1); IplImage* dest = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1); /*create temp images*/ IplImage* df_dx = cvCreateImage(cvGetSize(src),IPL_DEPTH_16S,1); IplImage* df_dy = cvCreateImage(cvGetSize(src),IPL_DEPTH_16S,1); /* use sobel to find derivatives */ cvSobel( src, df_dx, 1, 0, 3); cvSobel( src, df_dy, 0, 1, 3); /* Convert signed to unsigned 8*/ cvConvertScaleAbs( df_dx , dest_dx, 1, 0); cvConvertScaleAbs( df_dy , dest_dy, 1, 0); cvAdd(dest_dx,dest_dy,dest); получается очень шумно и куда надо впихивать фильтрацию и какую именно не очень понятно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано October 31, 2011 или не надо биться с идеальной бинаризацией? а анализировать на последующих шагах. в итоге надо что то типа такого http://www.mmorph.com/mxmorph/html/mmdemos/mmdairport.html Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 1, 2011 а в opencv как то можно получить hysteresis thresholding? http://imagejdocu.tudor.lu/doku.php?id=plugin:segmentation:hysteresis_thresholding:start Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах