Возникла задача:
Берем монетку и снимаем её камерой в нормальном положении (так что бы можно было прочитать номинал) на произвольном фоне. Ось поворота монетки совпадает с центром кадра. Назовем углом d угол поворота монетки относительно центра. Назовем эту картинку эталонной и условно будем считать что d = 0. Поле этого представим что монетку произвольно поворачивают на любой угол.
Нужно придумать алгоритм вычисления угла d после поворота монетки. У кого какие идеи?
P.S. просьба тривиальный случай с поворотом шаблона на кратные градусы не рассматривать
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Всем добрый день!
ATP>Возникла задача: ATP>Берем монетку и снимаем её камерой в нормальном положении (так что бы можно было прочитать номинал) на произвольном фоне. Ось поворота монетки совпадает с центром кадра. Назовем углом d угол поворота монетки относительно центра. Назовем эту картинку эталонной и условно будем считать что d = 0. Поле этого представим что монетку произвольно поворачивают на любой угол. ATP>Нужно придумать алгоритм вычисления угла d после поворота монетки. У кого какие идеи?
ATP>P.S. просьба тривиальный случай с поворотом шаблона на кратные градусы не рассматривать
Если есть номинал, то есть и текст, показывающий, чего номинал (например: рубль, копейка). А для нахождения угла текста, существуют различные алгоритмы. Можно вычислить угол текста до, и после.
Здравствуйте, Neo27, Вы писали:
N>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Всем добрый день!
ATP>>Возникла задача: ATP>>Берем монетку и снимаем её камерой в нормальном положении (так что бы можно было прочитать номинал) на произвольном фоне. Ось поворота монетки совпадает с центром кадра. Назовем углом d угол поворота монетки относительно центра. Назовем эту картинку эталонной и условно будем считать что d = 0. Поле этого представим что монетку произвольно поворачивают на любой угол. ATP>>Нужно придумать алгоритм вычисления угла d после поворота монетки. У кого какие идеи?
ATP>>P.S. просьба тривиальный случай с поворотом шаблона на кратные градусы не рассматривать
N>Если есть номинал, то есть и текст, показывающий, чего номинал (например: рубль, копейка). А для нахождения угла текста, существуют различные алгоритмы. Можно вычислить угол текста до, и после.
Не, текст не обязательно есть и вообще не нужно думать про монетку. Пусть это будет пуговица .
Так вопрос и состоит в просьбе посоветовать или подсказать алгоритм.
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Не, текст не обязательно есть и вообще не нужно думать про монетку. Пусть это будет пуговица . ATP>Так вопрос и состоит в просьбе посоветовать или подсказать алгоритм.
А на "круглый" предмет, можно наносить какие-нибудь опозновательные знаки?
и есть ли они там? точки, линии и т.д. и т.п. что может сильно выделяться?
if (можно наносить знаки){
мысленно вписать квадрат в крутящийся предмет и на предмете, пометить 3 точки, соответствующие углам квадрата.
А далее определять положение этих точек. Главное, чтобы эти точки можно было распознать.
} else{
есть еще множество вариантов.
}
Здравствуйте, Neo27, Вы писали:
N>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Не, текст не обязательно есть и вообще не нужно думать про монетку. Пусть это будет пуговица . ATP>>Так вопрос и состоит в просьбе посоветовать или подсказать алгоритм.
N>А на "круглый" предмет, можно наносить какие-нибудь опозновательные знаки? N>и есть ли они там? точки, линии и т.д. и т.п. что может сильно выделяться? N>if (можно наносить знаки){ N>мысленно вписать квадрат в крутящийся предмет и на предмете, пометить 3 точки, соответствующие углам квадрата. N>А далее определять положение этих точек. Главное, чтобы эти точки можно было распознать. N>} else{ N>есть еще множество вариантов. N>}
Нановить знаки нельзя, так как все взаимодействие производится через камеру. Отличительные знаки конечно есть, иначе задача бы не имела смысла. Будем считать что на нем есть рисунок.
Еще дополнительные замечания:
1. Предмет действительно круглый
2. В поле зрения камеры попадает фон за предметом (как от него можно избавиться?)
ATP>1. Предмет действительно круглый ATP>2. В поле зрения камеры попадает фон за предметом (как от него можно избавиться?)
А что мешает сохранить рисунок до поворота и после поворота.
Потом программно поворачивать изображение, которое получилось после поворота.
И поворачивать до тех пор, пока изображение, которое мы поворачиваем программно не станет
схожим с тем, что мы сохранили до начала поворота?
А по поводу удаления фона, можно создать маску "видимости" в виде 2х мерной матрицы, где отображено, какие пикселы показывать, а какие нет.
К тому же нам известно, что объект круглый
Здравствуйте, Neo27, Вы писали:
N>А что мешает сохранить рисунок до поворота и после поворота.
Ничто не мешает — так и делается.
N>Потом программно поворачивать изображение, которое получилось после поворота. N>И поворачивать до тех пор, пока изображение, которое мы поворачиваем программно не станет N>схожим с тем, что мы сохранили до начала поворота?
Это лобовой способ который сразу же приходит в голову. На мой взгляд чрезчур медленный. Дело в том, что положение нужно высчитывать ну хотябы с точностью до градуса, а при таком подходе шаг будет очень маленьким, следовательно количество вычислений слишком большим.
N>А по поводу удаления фона, можно создать маску "видимости" в виде 2х мерной матрицы, где отображено, какие пикселы показывать, а какие нет. N>К тому же нам известно, что объект круглый
Согласен. Сам склоняюсь к этому же. Просто еще теплится надежда что её можно вычислять автоматически исходя из того что известно что предмет круглый.
Re: Положение монетки
От:
Аноним
Дата:
08.04.08 13:36
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Всем добрый день!
ATP>Возникла задача: ATP>Берем монетку и снимаем её камерой в нормальном положении (так что бы можно было прочитать номинал) на произвольном фоне. Ось поворота монетки совпадает с центром кадра. Назовем углом d угол поворота монетки относительно центра. Назовем эту картинку эталонной и условно будем считать что d = 0. Поле этого представим что монетку произвольно поворачивают на любой угол. ATP>Нужно придумать алгоритм вычисления угла d после поворота монетки. У кого какие идеи?
Найди контур своей монетки (диаметр)
Отгрызи лишнее
Посчитай моменты
Для произвольно повёрнутой монетки тоже самое
Найди контур своей монетки (диаметр)
Отгрызи лишнее
Посчитай моменты
Пересчитай моменты в угол.
Моменты лучше получать с помощью функций которые легко поворачивать на произвольный угол Типа Ylm
но можно и просто разложить в полярной системе координат и потом по свёртке или по какому-нить выразительному моменту определить угол.
ps: для равномерно белого круга таких моментов найти не удасться
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Здравствуйте, Neo27, Вы писали:
N>>Потом программно поворачивать изображение, которое получилось после поворота. N>>И поворачивать до тех пор, пока изображение, которое мы поворачиваем программно не станет N>>схожим с тем, что мы сохранили до начала поворота?
ATP>Это лобовой способ который сразу же приходит в голову. На мой взгляд чрезчур медленный. Дело в том, что положение нужно высчитывать ну хотябы с точностью до градуса, а при таком подходе шаг будет очень маленьким, следовательно количество вычислений слишком большим.
Так ведь можно не весь рисунок крутить и сравнивать, а только некую полоску, тем самым сократится время обработки.
N>>А по поводу удаления фона, можно создать маску "видимости" в виде 2х мерной матрицы, где отображено, какие пикселы показывать, а какие нет. N>>К тому же нам известно, что объект круглый
ATP>Согласен. Сам склоняюсь к этому же. Просто еще теплится надежда что её можно вычислять автоматически исходя из того что известно что предмет круглый.
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>P.S. просьба тривиальный случай с поворотом шаблона на кратные градусы не рассматривать
Можно попробовать упростить шаблон до нескольких точек. Например, найти все острые углы. Или дырки у пуговицы.
Это делается наложением каких-то фильтров.
После чего — пытаешься сопоставить какую-нибудь точку повёрнутой монетки с точкой исходной, находишь угол, смотришь — совмещаются ли остальные точки.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>P.S. просьба тривиальный случай с поворотом шаблона на кратные градусы не рассматривать
К>Можно попробовать упростить шаблон до нескольких точек. Например, найти все острые углы. Или дырки у пуговицы. К>Это делается наложением каких-то фильтров.
Самые устоичивые точки на изображении как известно минимумы и максимумы. Так что планирую какой-нибудь фильтр связанный с этим.
К>После чего — пытаешься сопоставить какую-нибудь точку повёрнутой монетки с точкой исходной, находишь угол, смотришь — совмещаются ли остальные точки.
Я пока что придумал следующее — переводить монетку в полярные координаты и истать совпадение там простым сдвигом по оси угла. Может я замудрил и можно
еще проще как-нибудь?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Всем добрый день!
ATP>>Возникла задача: ATP>>Берем монетку и снимаем её камерой в нормальном положении (так что бы можно было прочитать номинал) на произвольном фоне. Ось поворота монетки совпадает с центром кадра. Назовем углом d угол поворота монетки относительно центра. Назовем эту картинку эталонной и условно будем считать что d = 0. Поле этого представим что монетку произвольно поворачивают на любой угол. ATP>>Нужно придумать алгоритм вычисления угла d после поворота монетки. У кого какие идеи?
А>Найди контур своей монетки (диаметр) А>Отгрызи лишнее А>Посчитай моменты
А>Для произвольно повёрнутой монетки тоже самое А>Найди контур своей монетки (диаметр) А>Отгрызи лишнее А>Посчитай моменты А>Пересчитай моменты в угол.
Какие моменты имеются ввиду? что то я в графике такое слышал но не уверен... можно поподробней?
А>Моменты лучше получать с помощью функций которые легко поворачивать на произвольный угол Типа Ylm А>но можно и просто разложить в полярной системе координат и потом по свёртке или по какому-нить выразительному моменту определить угол. А>ps: для равномерно белого круга таких моментов найти не удасться
... его и вертеть не нужно. Интересно всетаки про моменты — можно пожалуйста поподробней?
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Всем добрый день!
ATP>Возникла задача: ATP>Берем монетку и снимаем её камерой в нормальном положении (так что бы можно было прочитать номинал) на произвольном фоне. Ось поворота монетки совпадает с центром кадра. Назовем углом d угол поворота монетки относительно центра. Назовем эту картинку эталонной и условно будем считать что d = 0. Поле этого представим что монетку произвольно поворачивают на любой угол. ATP>Нужно придумать алгоритм вычисления угла d после поворота монетки. У кого какие идеи?
ATP>P.S. просьба тривиальный случай с поворотом шаблона на кратные градусы не рассматривать
порезать монетку на половинки, для которых посчитать "центры тяжести". исходя из этого и данных эталона посчитать угол.
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Самые устоичивые точки на изображении как известно минимумы и максимумы. Так что планирую какой-нибудь фильтр связанный с этим.
главное чтобы фильтр был инвариантным вращению.
можно взять sift-дескрипторы, они привязывают сист.коорд. в точке экстремума к градиенту.
ATP>Я пока что придумал следующее — переводить монетку в полярные координаты и истать совпадение там простым сдвигом по оси угла. Может я замудрил и можно ATP>еще проще как-нибудь?
надо именно проще?
Здравствуйте, piAnd, Вы писали:
A>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Самые устоичивые точки на изображении как известно минимумы и максимумы. Так что планирую какой-нибудь фильтр связанный с этим. A>главное чтобы фильтр был инвариантным вращению. A>можно взять sift-дескрипторы, они привязывают сист.коорд. в точке экстремума к градиенту.
А можно ссылочку с чего начать. Google — что-то невнятное выдает на "Shift-descriptors". Или это части какого-то более известного метода?
ATP>>Я пока что придумал следующее — переводить монетку в полярные координаты и истать совпадение там простым сдвигом по оси угла. Может я замудрил и можно ATP>>еще проще как-нибудь? A>надо именно проще?
Да нет . Просто вы не поверите, но задача реальная. Используется в автомате по пришиванию пуговиц. Заказчик американец.
Здравствуйте, Leonidze, Вы писали:
L>порезать монетку на половинки, для которых посчитать "центры тяжести". исходя из этого и данных эталона посчитать угол.
А зачем на половинки?
Если рисунок достаточно не однородный есть такой вариант:
посчитать координаты гемоетрического центра монеты, и центров тяжести, до и после поворота.
Если же центры тяжести и геометрическей близки — можно попытаться вычленить рисунок монетки (пороговым сечением)
Здравствуйте, Кос, Вы писали:
Кос>Здравствуйте, Leonidze, Вы писали:
L>>порезать монетку на половинки, для которых посчитать "центры тяжести". исходя из этого и данных эталона посчитать угол. Кос>А зачем на половинки?
Кос>Если рисунок достаточно не однородный есть такой вариант: Кос> посчитать координаты гемоетрического центра монеты, и центров тяжести, до и после поворота. Кос> Если же центры тяжести и геометрическей близки — можно попытаться вычленить рисунок монетки (пороговым сечением)
А можно пожалуйста ссылочку на данную тему? Что за центры тяжести на картинке?
Здравствуйте, Neo27, Вы писали:
N>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Здравствуйте, Neo27, Вы писали:
N>>>Потом программно поворачивать изображение, которое получилось после поворота. N>>>И поворачивать до тех пор, пока изображение, которое мы поворачиваем программно не станет N>>>схожим с тем, что мы сохранили до начала поворота?
ATP>>Это лобовой способ который сразу же приходит в голову. На мой взгляд чрезчур медленный. Дело в том, что положение нужно высчитывать ну хотябы с точностью до градуса, а при таком подходе шаг будет очень маленьким, следовательно количество вычислений слишком большим.
N>Так ведь можно не весь рисунок крутить и сравнивать, а только некую полоску, тем самым сократится время обработки.
А как определить какую полоску сравнивать. Она ведь должна с большой вероятностью характеризовать угол на который повернуто изображение, не так ли?
Здравствуйте, piAnd, Вы писали:
A>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Самые устоичивые точки на изображении как известно минимумы и максимумы. Так что планирую какой-нибудь фильтр связанный с этим. A>главное чтобы фильтр был инвариантным вращению. A>можно взять sift-дескрипторы, они привязывают сист.коорд. в точке экстремума к градиенту.
ATP>>Я пока что придумал следующее — переводить монетку в полярные координаты и истать совпадение там простым сдвигом по оси угла. Может я замудрил и можно ATP>>еще проще как-нибудь? A>надо именно проще?
Как вы считаете такой способо будет работать:
1. Найдти на изображение екстремумы (например пусть буду максимумы)
2. Выделить из них N точек. Здесть у меня остается вопрос по какому критерию их выделять?
3. Вычислить для этих точек градиены.
4. Сравнить градиенты с исходными
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Да нет . Просто вы не поверите, но задача реальная. Используется в автомате по пришиванию пуговиц. Заказчик американец.
Так ёлы палы, сразу бы про пуговицы сказал. Там четыре или две дырки, казалось бы, не так уж сложно их найти на картинке? Это во-первых.
А во-вторых, имхо, пуговицы должны быть ориентированы на одежде одинаково — а не пришиты так, как они легли. Поэтому всё равно придётся решать задачу о физической ориентировке пуговиц, и проще всего это делать с помощью проволочных направляющих. Зачем здесь видеокамера и распознавание образов?