Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Простой и понятный алгоритм сравнения картинок

464  
  ilghiz знакомое лицо02.09.18 18:46
02.09.18 18:46 
Последний раз изменено 02.09.18 18:52 (ilghiz)

Добрый день,


ищу понятный, легко объясняемый и, по возможности короткий (на одну-две страницы текста) с оптимальной или субоптимальной асимптотически сложностью алгоритм сравнения двух картинок, которые могут соответствовать одному объекту, но афинно преобразованному, ну то есть как, например, в аттаче. Картинка не моя, взято с доклада "Multiscale analysis of similarities between images on Riemannian manifolds" Coloma Ballester. То есть чтоб на входе было две картинки, а на выходе - коэффициенты афинного преобразования + величина достоверности в какой-нибудь адекватной метрике. Через риманово преобразование с CNN объяснить и запрограммировать могу, но это - тонна кода. Нужно просто и понятно. У кого-то есть идеи? Буду премного благодарен!


Спасибо!

#1 
AlexNek патриот02.09.18 19:44
AlexNek
NEW 02.09.18 19:44 
в ответ ilghiz 02.09.18 18:46, Последний раз изменено 02.09.18 19:48 (AlexNek)

Хоть и опыта у меня в этой области 0, что то не верится, что есть простой алгоритм сравнения подобных картинок.

Для других случаев инфы полно, может какая идея и возникнет.

https://habr.com/post/120562/

https://habr.com/post/136530/

https://sohabr.net/habr/post/320720/

#2 
  ilghiz знакомое лицо02.09.18 20:02
NEW 02.09.18 20:02 
в ответ AlexNek 02.09.18 19:44

Спасибо большое, AlexNek, за ссылки! При беглом просмотре по Вашим ссылкам происходит сравнение без поворота, а это - очень просто двухмерным FFT делается. Грубо говоря, берем каждую картинку добиваем с краем немного нулей, делаем Фурье, потом, поэлементно результаты друг на друга умножаем и ищем максимум. Этот максимум, вернее его двухмерный индекс, соответствует сдвигу первой картинки относительно второй. То есть если у меня аффинное преобразование - только сдвиг, то тут все идеально. Но у меня-то как раз поворот с приближением-удалением...


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


Если задача простая и понятная, то и решение должно быть простым и понятным.

#3 
AlexNek патриот02.09.18 20:34
AlexNek
NEW 02.09.18 20:34 
в ответ ilghiz 02.09.18 20:02
происходит сравнение без поворота, а это - очень просто

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


Если задача простая и понятная

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

В 3-д можно ещё как то преобразовать. А после крутить кубики и считать. Но скорость будет весьма низкой.

#4 
Программист коренной житель03.09.18 08:12
NEW 03.09.18 08:12 
в ответ ilghiz 02.09.18 18:46, Последний раз изменено 03.09.18 08:18 (Программист)

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


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

#5 
  ilghiz знакомое лицо03.09.18 17:48
NEW 03.09.18 17:48 
в ответ Программист 03.09.18 08:12, Последний раз изменено 03.09.18 18:03 (ilghiz)

> Картинки хорошо сравниваются нейронной сетью. Вроде есть какие фремворки, позволяющие собрать простейшую сетку.


ой, надо же, я а не знал даже ничего про какие-то фреймворки, когда 7 лет назад CNN (Convolutional Neural Network) сам программировал для сравнения картинок, вот, блин, спасибо мил человек, на путь истинный наставили!


А по теме-то моего вопроса, возможно таки у вас есть чего сказать, поделитесь, пожалуйста, чтоб не флеймить много?

#6 
AlexNek патриот03.09.18 22:25
AlexNek
NEW 03.09.18 22:25 
в ответ ilghiz 03.09.18 17:48
А по теме-то моего вопроса, возможно таки у вас есть чего сказать

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

Слишком уж специфическая область.

Да и как найти простую фукнцию, которая инваринтна к аффиному преобразованию? Это тянет на хорошее исследование.

Разве что найти специфические особенности ваших изображений и от этого уже плясать.

Могу кинуть опять какое "фуфло", в надежде что проскользнет какая то полезная идея

https://courses.graphicon.ru/files/courses/vision/2012/lec...

http://books.ifmo.ru/file/pdf/1979.pdf


Понятно что и сами роете, но обычно ищешь "свои" ключевые слова.

#7 
  moose старожил03.09.18 22:34
NEW 03.09.18 22:34 
в ответ ilghiz 03.09.18 17:48

вам следовало бы в первом же посте прямо указать: "я еще 7 лет назад сам лично программировал CNN (Convolutional Neural Network) для сравнения картинок, поэтому знаю об этом очень много".

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

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

#8 
  ilghiz знакомое лицо03.09.18 23:47
NEW 03.09.18 23:47 
в ответ moose 03.09.18 22:34
Я спросил, так как 7 лет этой темой не занимался, и, ИМХО, в Германии все штели делятся на либо на легаси, либо на ИИ, следовательно для хотя бы половины - это пройденный этап жизни, а я со своим обычным опытом численного решения диффуров и интегральных уравнений уже отстал от жизни и в этой теме позиционирую себя новичком.


Реально не хотел ни кого обидеть и не хотел чем-либо хвалиться ибо хвастаться-то нечем, знание мудреного неустойчивого алгоритма (я про CNN) без доказанной сходимости ИМХО является почти бесполезный багажом знаний применительно к этой постановке задачи.

#9 
  ilghiz знакомое лицо04.09.18 00:03
NEW 04.09.18 00:03 
в ответ AlexNek 03.09.18 22:25

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

#10