2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Распознавание узлов шахматной доски с большой аберрацией
Сообщение29.09.2022, 18:44 


11/08/18
363
Добрый день,

имею сильно широкоугольный (${\rm 160}^o$) объектив с большой аберрацией-дисторсией без зума. Сфотографировал на него плоскую шахматную доску на слегка разных расстояниях и пытаюсь вытащить узлы, чтобы посчитать коэффициенты дисторсии. Попробовал стандартными средствами OpenCL - он видит на картинке с максимально большими квадратиками центральные 7х7, на остальных - все идет юзом.

Попробовал посчитать разными классическими методами - Moravec, Harris, Shi-Tomasi - получается не лучше.

Решил потребовать, что в моих понятиях, узловая точка, это та, у которой во-первых, в ее районе высокий градиент интенсивности, во-вторых, среднее зеркальное отклонение
$$s(x,y) = \sum_{d_x=-L,...L} \sum_{d_y=-L,...L} |f(x+d_x,y+d_y) - f(x-d_x,y-d_y)|^2$$
меньше какого-то на перед заданного значения. Результаты получились лучше, но все еще не ахти, то есть или у меня хорошо центр распознается, или край, или то, что близко, или то, что далеко. Там, где критерий достигается, я на картинках покрасил в синий цвет.

Я понимаю, что картинки у меня очень не ахти, но калибровать объектив как-то надо.

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

Спасибо!

Сами картинки:

Изображение
Изображение
Изображение
Изображение
Изображение
Изображение

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение29.09.2022, 20:27 


31/08/22
183
ilghiz в сообщении #1565707 писал(а):
чтобы гораздо точнее распознавать узлы в любых условиях

Практического опыта в таких задачах не имею, но много читал.
Первое что делают в задах всякого рода распознавания это предобрабатывают изображение, если это конечно возможно.
В вашем случае кажется разумным перейти к монохрому из 2х цветов, черного и белого. Тогда и квадратики и границы станут гораздо контрастнее.
Далее, задача кажется похожей на задачу детектирования карт.
Вот например:
https://habr.com/ru/company/yandex/blog/431108/?ysclid=l8nbg6x122317184528
Похожим способом при помощи U-net (топология нейронной сети, автоэнкодер похожий на U) распознают кучевые облака.
Похожими вещами занимался один парниша, который написал целый фреймворк AForge.
http://www.aforgenet.com/
Он там всякие QR коды на листах бумаги распознавал и прочее. Написана хорошая либа по предобработке изображений.

Номера авто предварительно поворачивают, избавляются от перспективы и только потом в нейросеть чтобы цифры распознать.

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение29.09.2022, 22:46 


31/08/22
183
Можно попробовать задачу разбить на 2.
1 Распознать саму доску, получить ее контуры, а следовательно и ее края и углы.
По этой информации уже можно попробовать избавиться от перспективы (я пока рассматриваю идеальный случай когда на фото края прямые), выровнять доску, чтобы она смотрела на нас.
2 Распознавание чего угодно по уже выровненной доске.

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение30.09.2022, 00:16 


11/08/18
363
Спасибо большое Schrodinger's cat, что советуете!

Возможно я не точно смог сформулировать основную задачу - я распознаю узлы как раз для того, чтобы понять и вычислить дисторсию объектива!

У меня пара десятков объективов в аппаратуре, возможно таких плохих, как этот, возможно будет чуть по-лучше, но, в любом случае, у них есть сильные искажения и мне надо их откалибровать, чтобы потом "на лету" разворачивать полученные картинки на плоскость на довольно слабом микроконтроллере, у которого меньше 512К оперативки.

То есть фактически, я могу сделать бесконечно большую доску (например, напечатаю это все на А1 в типографии), или, наоборот, определюсь, что доска всегда А4 лист и все.

Но дисторсия мне нужна по всей поверхности, и у меня нет возможности точно измерить расстояние от объектива до доски, поэтому надо сделать несколько фото под разным углом и расстоянием до доски, распознать узлы, и далее все скормить какому-нибудь простому минимизатору по параметрам дисторсии.

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

Я понимаю, что можно городить огород с обучением и нейронками, что де - мы научились распознавать узлы в центре, далее по аналогии ползем в края. Я не хотел бы так делать, так как фото получается на том самом пресловутом МК, у которого очень немного памяти и не сильно много вычислительных ресурсов, а, самое главное - очень медленный канал на внешний мир, что перетащить картинку вовне - будет реально мучительно сложно, и я хочу узлы вычислять на этом МК (конкретно это esp32 с двумя процессорами по 240МГц и оперативкой в 512К).

Кстати, про картинку - она в реальности черно-белая, вернее ИК - черно-белая, просто я когда ее пересохранял, и в форумные размеры подгонял, в ней красок-то и добавилось.

То есть задача - предельно проста - нужны максимально точно узлы сетки по битовой картинке, и, желательно, когда есть только фрагмент картинки в памяти (даже 2 мегапикселя - это уже 2МБ, то есть в память оно уже не лезет).

Цитата:
В вашем случае кажется разумным перейти к монохрому из 2х цветов, черного и белого. Тогда и квадратики и границы станут гораздо контрастнее.


Спасибо! Пробовал - лажа получается, реально... Монохром примерно от 32 оттенков уже как-то бывает похож на истину, но 32 или 256 оттенков вроде уже разницы почти нет.

Цитата:
Он там всякие QR коды на листах бумаги распознавал и прочее. Написана хорошая либа по предобработке изображений.


Спасибо. Познавательно. Но у него как я понимаю, калибровка еще до, и мне как раз калибровать надо.

PS: предвижу возражения - если для калибровки - можно один раз откалибровать и далее всегда использовать. Нет. Так не получится. Аппаратура носимая, и я ее регулярно роняю, и все настройки камер сбиваются. Поэтому я хочу иметь по крайней мере по первости способ простой и полностью автоматизированной калибровки, а, когда-то потом, возможно удастся решить механику объективов, чтобы уже калиброваться один раз на всегда.

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение30.09.2022, 08:56 


31/08/22
183
А вот насколько все плохо.

ilghiz в сообщении #1565707 писал(а):
Moravec, Harris, Shi-Tomasi

Ну это просто детекторы углов. Вы их куда то потом скармливаете?

Про это тоже читал, но очень обзорно, вообще никакого практического опыта не имею :D
Припоминаю там есть какие то оценки прямолинейности... погуглил да вот быстрое преобразование Хафа. И можно калибровать по образцам...
Но там детектят не углы а ребра предметов, те резкие переходы цветов. У AForg'a есть соответствующий фильтр. Потом уже по оценкам восстанавливают.
Да, вот нагуглился мануал про эти темы
https://docs.yandex.ru/docs/view?tm=1664515725&tld=ru&lang=ru&name=dissertatsiya-kuninoy.pdf&text=%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%B8%D1%81%D1%82%D0%BE%D1%80%D1%81%D0%B8%D0%B8&url=https%3A%2F%2FMIPT.ru%2Fupload%2Fmedialibrary%2Ffe6%2Fdissertatsiya-kuninoy.pdf&lr=2&mime=pdf&l10n=ru&sign=d260455e3ac599a2b6ff9dfc4c5bf085&keyno=0&serpParams=tm%3D1664515725%26tld%3Dru%26lang%3Dru%26name%3Ddissertatsiya-kuninoy.pdf%26text%3D%25D1%2583%25D0%25B4%25D0%25B0%25D0%25BB%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5%2B%25D0%25B4%25D0%25B8%25D1%2581%25D1%2582%25D0%25BE%25D1%2580%25D1%2581%25D0%25B8%25D0%25B8%26url%3Dhttps%253A%2F%2FMIPT.ru%2Fupload%2Fmedialibrary%2Ffe6%2Fdissertatsiya-kuninoy.pdf%26lr%3D2%26mime%3Dpdf%26l10n%3Dru%26sign%3Dd260455e3ac599a2b6ff9dfc4c5bf085%26keyno%3D0
Наверно я говорю и так очевидные Вам вещи... :D

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение30.09.2022, 10:25 


31/08/22
183
https://habr.com/ru/post/244541/?ysclid=l8o5rt6zwi208911139
Есть сравнительная таблица методов.

Так нельзя тоже самое считать не по углам а по краям(ребрам)? Тогда детектор заменяется на соответствующий фильтр изображения.

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение30.09.2022, 15:39 


11/08/18
363
Спасибо большое, Schrodinger's cat, за советы!

Цитата:
Ну это просто детекторы углов. Вы их куда то потом скармливаете?


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

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

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

Еще момент, чтобы хорошо откалибровать дисторсию и фокусное расстояние, мне надо взять фотографии шахматной доски на расстояниях хотя бы в 3 раза отличающихся друг от друга, то есть клетки на одной картинке в центре должны по размеру отличаться в 3 раза от клеток на другой картинке, то есть мне надо на самой мелкой сетке иметь примерно $40 \times 30$ узлов сетки на шахматной доске, чтобы на самой крупной было $13 \times 10$. Фактически, это означает около 20 пикселей на квадратик на самой мелкой сетке на краю и 40 пикселей на квадратик в центре. Если сетки будут грубее, то я не получу дисторсию достаточно точно.

Цитата:
Есть сравнительная таблица методов.


Спасибо! Я как раз оттуда подчерпнул идеи для Moravec, Harris, Shi-Tomasi и предположил, что остальное не сильно улучшит распознавание.

Цитата:
Да, вот нагуглился мануал про эти темы


Спасибо! А у меня он почему-то не открывается. Скажите, пожалуйста, что я делаю не так?

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение30.09.2022, 17:51 


31/08/22
183
ilghiz в сообщении #1565834 писал(а):
А у меня он почему-то не открывается. Скажите, пожалуйста, что я делаю не так?

Не знаю, у меня открывается.
Пересохранил.
https://disk.yandex.ru/i/1i408ghI-mnmVw

ilghiz в сообщении #1565834 писал(а):
Moravec

Но он же пишет, что "эффективность обнаружения" и "устойчивость к шуму" на троечку. В таблице есть то, что на четверочку, я и предположил возможно другие методы будут чуть лучше.
Краем глаза заметил что в OpenCV есть еще на халяву метод FAST.

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение01.10.2022, 00:03 


11/08/18
363
Schrodinger's cat в сообщении #1565845 писал(а):

Спасибо, теперь открылось!!!

Schrodinger's cat в сообщении #1565845 писал(а):
ilghiz в сообщении #1565834 писал(а):
Moravec

Но он же пишет, что "эффективность обнаружения" и "устойчивость к шуму" на троечку. В таблице есть то, что на четверочку, я и предположил возможно другие методы будут чуть лучше.
Краем глаза заметил что в OpenCV есть еще на халяву метод FAST.

Не спорю, все не пробовал, но, так как результаты были очень неудовлетворительные, и с OpenCV - тоже, предположил, что надо делать что-то кардинально другое.

Единственно, что работает гарантированно - оконное двухмерное Фурье - оно позволяет вычислить шаг сетки для заданной точки, но его арифметическая сложность просто получается ужасной. Окно надо брать по 300 пикселей в каждом направлении, что приводит к Фурье на 360000 (уже в память МК не полезет), и просто дикой арифметической сложности - для каждой точки надо сделать примерно 100 миллионов арифметических операций и точек в общем случае по идее должно быть около 2 миллионов (сколько и мегапикселей). Даже небольшое разрежение (с шагом 20 например) все равно засаживают довольно хорошую рабочую станцию на десятки минут, а это дохлый процессор будет считать дни.

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение07.10.2022, 07:41 


12/07/15
3311
г. Чехов
Не кажется, что шахматная доска - это какое-то усложнение? Фактически на изображении не два-три объекта, а тысячи.

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение07.10.2022, 09:22 


11/08/18
363
Спасибо Mihaylo за комментарий!

Mihaylo в сообщении #1566215 писал(а):
Не кажется, что шахматная доска - это какое-то усложнение? Фактически на изображении не два-три объекта, а тысячи.

не знаю, что можно взять по проще.

Можно городить альтернативу ввиде двигающегося светодиода, но тогда надо делать довольно прецезионную механику. Если сейчас на шахматной доске у меня около $70 \times 50 = 3500$ узлов, скорострельность камеры на максимальном разрешении 10 кадров в секунду, скажем механике для передвижения нужно еще 0.5 секунд, то для получения той же информации мне потребуется с пол часа, а то и больше. А создать механику с хорошей точностью я может быстро и не смогу.

Ставить точечки вместо узлов? Но вроде тоже все не однозначно...

Почему-то все настраиваются по шахматной доске.

То есть если знаете что проще и удобнее, подскажите, пожалуйста!

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение07.10.2022, 14:29 
Экс-модератор
Аватара пользователя


23/12/05
12063
ilghiz в сообщении #1566218 писал(а):
Почему-то все настраиваются по шахматной доске.

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

ilghiz в сообщении #1565834 писал(а):
Могу взять доску с бОльшими клетками, тогда все распознается лучше, но тогда результаты работы будут менее информативны, и я хотел бы этого избежать.
Есть стандартные модели дисторсии. В большинстве случаев их хватает, то есть задача сводится к определению нескольких коэффициентов в этих моделях - действительно ли нужны для этого тысячи точек? Или достаточно сотни, относительно равномерно распределенных по кадру и достаточно надежно определенных?

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение07.10.2022, 14:41 


05/09/16
12055
ilghiz в сообщении #1566218 писал(а):
Можно городить альтернативу ввиде двигающегося светодиода, но тогда надо делать довольно прецезионную механику.

Так зачем вам клетки? Напечатайте мелкие кружки (точки) или крестики...
Чтоб мусора мешающего на картинке не было, можно светодиодами утыкать поверхность (зачем двигающийся светодиод? они стоят-то рубль кучка можете все сразу включить или имитировать двигающийся просто включением какого надо), тогда там где светодиоды, будет пересвет, и распознавать особо ничего не надо, просто отфильтровать все непересвеченное в ноль.

-- 07.10.2022, 14:48 --

photon в сообщении #1566227 писал(а):
Можно делать и более интересные сцены, в которых каждую точку на кадре можно будет однозначно сопоставить с конкретной точкой на фотографируемой сцене (то есть в качестве сцены делается некий неповторяющийся узор фичей,

Во. Штрихкоды, например.

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение07.10.2022, 15:15 
Экс-модератор
Аватара пользователя


23/12/05
12063
wrest в сообщении #1566228 писал(а):
Штрихкоды, например.

Штрихкод одномерен, но да, идея такая

 Профиль  
                  
 
 Re: Распознавание узлов шахматной доски с большой аберрацией
Сообщение10.10.2022, 22:25 
Заслуженный участник


26/05/14
981
Возьмите крупную клетку, решите задачу грубо. Возьмите клетку мельче, примените к ней грубое решение. По полученной почти прямоугольной сетке установите углы мелкой клетки. Обратным грубым преобразованием переведите углы на исходную картинку и решите задачу более точно. Повторяйте до получения нужной точности.

-- 10.10.2022, 22:27 --

И да, Shi-Tomasi (good features to track) - идеальный детектор углов для такого рода картинок.

-- 10.10.2022, 22:28 --

Чтобы не изобретать велосипед используйте https://github.com/ethz-asl/kalibr .

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group