Frimen 0 Жалоба Опубликовано January 26, 2012 Вопрос вызван моим недопониманием как работает cvSobel. Мне необходимо найти угол наклона объекта на картинке. При этом у меня логика построена так, что изначально я знаю положение объекта из которого он начинает вращаться. Необходимо определять его угол и вращением возвращать в исходное состояние. Вопрос заключается в следующем: Будет ли правильно если я буду определять угол наклона объекта вычисляя cvSobel(image, dstX, 1, 0, 3); - нахождение градиента по X cvSobel(image, dstY, 0, 1, 3); - нахождение градиента по Y А затем обращаться к центральному пикселю изображений distX и distY и находить арктангенс отношения значений пикселей distY на distX ? Вопрос вызван тем что мне не очень понятно что какое конкретно значении записывается в изображение dist при вычислении градиента в направлении оси x, y и в случае если мы передаём функции cvSobel 1 по обоим осям. Также может быть ктонибуть подскажет ещё какойнибуть способ определение угла на который повёрнут объект на изображении. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 А затем обращаться к центральному пикселю изображений distX и distY и находить арктангенс отношения значений пикселей distY на distX ? не понял. а вообще cvCanny + HoughLines или более продвинутые алгоритмы Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано January 26, 2012 А затем обращаться к центральному пикселю изображений distX и distY и находить арктангенс отношения значений пикселей distY на distX ? не понял. а вообще cvCanny + HoughLines или более продвинутые алгоритмы На сколько я понимаю это следует из определения нахождения угла по вектору градиента. А по поводу cvCanny + HoughLines - на сколько это будет эффективно с точки зрения производительности. И тем более на мой взгляд было бы проще найти градиент чем выделять контур более сложным алгоритмом, а потом ещё и преобразование находить. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 как направление градиента в точке связано с поиском линий? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано January 26, 2012 как направление градиента в точке связано с поиском линий? Я не линию пытаюсь найти, а угол на который был повёрнут исходный объект на картинке. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 тогда задача еще сложнее. у вас есть первое неповёрнутое изображение? или хотя бы неповёрнутый образ того что вы ищете на втором изображении? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано January 26, 2012 тогда задача еще сложнее. у вас есть первое неповёрнутое изображение? или хотя бы неповёрнутый образ того что вы ищете на втором изображении? Да есть. Я же написал в первом посте Мне необходимо найти угол наклона объекта на картинке. При этом у меня логика построена так, что изначально я знаю положение объекта из которого он начинает вращаться. Необходимо определять его угол и вращением возвращать в исходное состояние. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 ну могу тогда предложить поиск особых точек. про градиент надо подумать, но точно не по одной точке. есть такое вот Matching Images by Comparing their Gradient Fields Daniel Scharstein Department of Computer Science Cornell University Ithaca NY USA вообще многие алгоритмы поиска особых точек построены каким то образом на градиенте. есть еще какой то относительно быстрый алгоритм для нахождения особых точек, где считаются градиенты по разным направлениям и потом то ли считаются проэкции, то ли гистограммы и таким образом выбираются максимумы, которые и есть особые точки.(документ не могу найти) вообще наверно если посчитать cvSobel и найти потом максимумы то можно это использовать как особые точки. только метод не очень хороший, но если картинка не особо меняется то пойдет. еще есть An image registration technique for recovering rotation, scale and translation parameters. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано January 26, 2012 Также может быть ктонибуть подскажет ещё какойнибуть способ определение угла на который повёрнут объект на изображении. В простейшем случае можно найти моменты и по ним сразу определить наклон. Физический смысл моментов как раз и заключается в поиске осей объекта, углов их наклона и соотношений между геометрическими параметрами. Как раз то, что нужно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 http://www-graphics.stanford.edu/papers/viewfinderalignment/ нашел 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано January 26, 2012 mrgloom сопоставление изображений по особым точкам строится на вычислении инвариантного дискриптора особой точки. Инвариантный дискриптор как раз и представляет собой нахождение направления (тоесть угла) вектора градиента локальной области. В моём случае какраз и анализируются области особых точек (я их уже нашёл). Я рассматриваю изображение размером 20 на 20 пикселей. Мне необходимо взять центр изображения (в котором какраз и находится особая точка) и найти какраз этот самый угол. Поэтому неплохо было бы вернится к моему изначальному вопросу по поводу нахождения угла наклона вектора градиента. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 26, 2012 Ядра свертки для Собеля: cvSobel(image, dstX, 1, 0, 3); - нахождение градиента по X -1 0 1 -2 0 2 - по x -1 0 1 cvSobel(image, dstY, 0, 1, 3); - нахождение градиента по Y -1 -2 -1 0 0 0 - по y 1 2 1 [/code] Это должно ответить на вопрос какое именно значение записывается в dst. И еще, вот Собелевские ядра (может для определенности результата вручную вводить? при помощи cvFilter2D): Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано January 26, 2012 Да ядра я вижу. Но вопрос по поводу вычисления угла наклона остаётся открытым. Как имея значения dstX и dstY вычислить угол объекта ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 26, 2012 Как у Вас и написано: atan2 или cvFastArctan. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 сопоставление изображений по особым точкам строится на вычислении инвариантного дискриптора особой точки. Инвариантный дискриптор как раз и представляет собой нахождение направления (тоесть угла) вектора градиента локальной области. можно вообще не использовать дескрипторы, а только геометрическое положение особых точек между собой, правда можно не значит нужно. ну вообще можно восстановить угол поворота исходя только из геометрического расположения пар точек. ну если вы знаете что одна точка соответсвует другой на изображении, то http://en.wikipedia.org/wiki/Sobel_operator где Gx и Gy это значения в точке в результирующих dstX и dstY. http://en.wikipedia.org/wiki/Atan2 как вычислить atan2 тут п.с. думаю погрешность по 1 точке будет очень большой. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 http://www.codeproject.com/Articles/99457/Edge-Based-Template-Matching вот даже еще кой чего про cvFastArctan похоже точность с точностью до 45 градусов (хотя может и нет) http://dasl.mem.drexel.edu/alumni/bGreen/www.pages.drexel.edu/_weg22/can_tut.html Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 26, 2012 Можно еще фильтры Габора использовать. Хотя, ядро там не такое маленькое. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано January 26, 2012 Можно ли повысить точность вычсления угла рассматривая по мимо центрального пикселя, на изображениях distX и distY, соседнии пиксели от центра ? Возможно ли построить качественный дескриптор дающий пограешность хотябы до 5 градусов при вычислении угла ? Можно еще фильтры Габора использовать. Хотя, ядро там не такое маленькое. У меня картинка размером 20 на 20 пикселей. Если ядро слишком большое то я думаю не имеет смысла. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 Можно ли повысить точность вычсления угла рассматривая по мимо центрального пикселя, на изображениях distX и distY, соседнии пиксели от центра ? Возможно ли построить качественный дескриптор дающий пограешность хотябы до 5 градусов при вычислении угла ? про 45 градусов может я и ошибся,там это вроде используется для отнесения к секторам по 45 град. для детектора Канни, хотя учитывая дискретность изображения может быть и так. вообщем чего то не соображу. ну если определите 2 точки и найдёте им соответствие на второй картинке, то просто как угол наклона линии, но учитывая что у вас маленькая картинка, то погрешность atan(1/len)/2 тоже не маленькая. наверно надо выделить каким то образом особые точки, взять самые "сильные" из них и потом взять самые удаленные из них и получить соответствия между точками на картинках и потом вычислить поворот по точкам. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано January 26, 2012 Дело в том, что в область рассматриваемого изображения попадает лиш одна особенность, которая находится в центре изображения. Поэтому построить линию по двум особым точкам неполучится. Может быть есть ещё какиенибуть характеристики по которым можно посчитать направление кнтура относительно зарание заданого ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 26, 2012 http://blancosilva.wordpress.com/teaching/mathematical-imaging/edge-detection/ хотя не вроде вот мужик строит направление градиента. http://dsp.stackexchange.com/questions/3016/how-to-detect-gradients-in-images Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах