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

Нахождение угла наклона объекта с помощю cvSobel

Recommended Posts

Вопрос вызван моим недопониманием как работает cvSobel.

Мне необходимо найти угол наклона объекта на картинке. При этом у меня логика построена так, что изначально я знаю положение объекта из которого он начинает вращаться.

Необходимо определять его угол и вращением возвращать в исходное состояние.

Вопрос заключается в следующем:

Будет ли правильно если я буду определять угол наклона объекта вычисляя

cvSobel(image, dstX, 1, 0, 3); - нахождение градиента по X

cvSobel(image, dstY, 0, 1, 3); - нахождение градиента по Y

А затем обращаться к центральному пикселю изображений distX и distY и находить арктангенс отношения значений пикселей distY на distX ?

Вопрос вызван тем что мне не очень понятно что какое конкретно значении записывается в изображение dist при вычислении градиента в направлении оси x, y и в случае если мы передаём функции cvSobel 1 по обоим осям.

Также может быть ктонибуть подскажет ещё какойнибуть способ определение угла на который повёрнут объект на изображении.

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


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

А затем обращаться к центральному пикселю изображений distX и distY и находить арктангенс отношения значений пикселей distY на distX ?

не понял.

а вообще cvCanny + HoughLines

или более продвинутые алгоритмы

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


Ссылка на сообщение
Поделиться на других сайтах
А затем обращаться к центральному пикселю изображений distX и distY и находить арктангенс отношения значений пикселей distY на distX ?

не понял.

а вообще cvCanny + HoughLines

или более продвинутые алгоритмы

На сколько я понимаю это следует из определения нахождения угла по вектору градиента.

А по поводу cvCanny + HoughLines - на сколько это будет эффективно с точки зрения производительности. И тем более на мой взгляд было бы проще найти градиент чем выделять контур более сложным алгоритмом, а потом ещё и преобразование находить.

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


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

как направление градиента в точке связано с поиском линий?

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


Ссылка на сообщение
Поделиться на других сайтах
как направление градиента в точке связано с поиском линий?

Я не линию пытаюсь найти, а угол на который был повёрнут исходный объект на картинке.

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


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

тогда задача еще сложнее.

у вас есть первое неповёрнутое изображение? или хотя бы неповёрнутый образ того что вы ищете на втором изображении?

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


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

у вас есть первое неповёрнутое изображение? или хотя бы неповёрнутый образ того что вы ищете на втором изображении?

Да есть. Я же написал в первом посте

Мне необходимо найти угол наклона объекта на картинке. При этом у меня логика построена так, что изначально я знаю положение объекта из которого он начинает вращаться.

Необходимо определять его угол и вращением возвращать в исходное состояние.

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


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

ну могу тогда предложить поиск особых точек.

про градиент надо подумать, но точно не по одной точке.

есть такое вот

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.

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


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

Также может быть ктонибуть подскажет ещё какойнибуть способ определение угла на который повёрнут объект на изображении.

В простейшем случае можно найти моменты и по ним сразу определить наклон. Физический смысл моментов как раз и заключается в поиске осей объекта, углов их наклона и соотношений между геометрическими параметрами. Как раз то, что нужно.

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


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

mrgloom сопоставление изображений по особым точкам строится на вычислении инвариантного дискриптора особой точки. Инвариантный дискриптор как раз и представляет собой нахождение направления (тоесть угла) вектора градиента локальной области.

В моём случае какраз и анализируются области особых точек (я их уже нашёл). Я рассматриваю изображение размером 20 на 20 пикселей. Мне необходимо взять центр изображения (в котором какраз и находится особая точка) и найти какраз этот самый угол. Поэтому неплохо было бы вернится к моему изначальному вопросу по поводу нахождения угла наклона вектора градиента.

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


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

Ядра свертки для Собеля:

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.

convolution.jpg

И еще, вот Собелевские ядра (может для определенности результата вручную вводить? при помощи cvFilter2D):

post-1-0-12244800-1327572009_thumb.png

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


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

Да ядра я вижу.

Но вопрос по поводу вычисления угла наклона остаётся открытым. Как имея значения dstX и dstY вычислить угол объекта ?

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


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

Как у Вас и написано: atan2 или cvFastArctan.

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


Ссылка на сообщение
Поделиться на других сайтах
сопоставление изображений по особым точкам строится на вычислении инвариантного дискриптора особой точки. Инвариантный дискриптор как раз и представляет собой нахождение направления (тоесть угла) вектора градиента локальной области.

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

ну вообще можно восстановить угол поворота исходя только из геометрического расположения пар точек.

ну если вы знаете что одна точка соответсвует другой на изображении, то

http://en.wikipedia.org/wiki/Sobel_operator

3237a6dc4dcb50841b532b239b4b2c62.png

где Gx и Gy это значения в точке в результирующих dstX и dstY.

http://en.wikipedia.org/wiki/Atan2 как вычислить atan2 тут

п.с. думаю погрешность по 1 точке будет очень большой.

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


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

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

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


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

Можно еще фильтры Габора использовать. Хотя, ядро там не такое маленькое.

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


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

Можно ли повысить точность вычсления угла рассматривая по мимо центрального пикселя, на изображениях distX и distY, соседнии пиксели от центра ? Возможно ли построить качественный дескриптор дающий пограешность хотябы до 5 градусов при вычислении угла ?

Можно еще фильтры Габора использовать. Хотя, ядро там не такое маленькое.

У меня картинка размером 20 на 20 пикселей. Если ядро слишком большое то я думаю не имеет смысла.

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


Ссылка на сообщение
Поделиться на других сайтах
Можно ли повысить точность вычсления угла рассматривая по мимо центрального пикселя, на изображениях distX и distY, соседнии пиксели от центра ? Возможно ли построить качественный дескриптор дающий пограешность хотябы до 5 градусов при вычислении угла ?

про 45 градусов может я и ошибся,там это вроде используется для отнесения к секторам по 45 град. для детектора Канни, хотя учитывая дискретность изображения может быть и так. вообщем чего то не соображу.

ну если определите 2 точки и найдёте им соответствие на второй картинке, то просто как угол наклона линии, но учитывая что у вас маленькая картинка, то погрешность atan(1/len)/2 тоже не маленькая.

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

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


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

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

Может быть есть ещё какиенибуть характеристики по которым можно посчитать направление кнтура относительно зарание заданого ?

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


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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×