Алгоритмы совмещения изображений
Даже не изображений, а проще скриншотов.
Есть у нас большая картинка
|==================| |====| |====| |====| ...
Но видна она через маленькое окно. И вот набираем таких картинок, а после их нужно объединить
часть 1
часть 2
Алгоритмов полно, но все они "работают" для разных типов изображений. Многие на этом тесте только вертикально скролла, обламываются, так как фон "мешает"
Разные сетки страшно зависят от шага и т.п.
А хочется иметь что-то одно, чтобы нелажало часто.
Видимо, нужна определенная комбинация, вот весь вопрос какая, пока не находится. Что посоветуете?
Ну явно же задача для ИИ. Или этот ваш ИИ только копипастным поиском заниматься может да по 4 завязанных в узлы пальца генерировать?
Ну явно же задача для ИИ
Блин, ну устал уже повторять, что нужно вначале самому хорошо разбираться в теме. Нужно знать, что именно спрашивать и понимать, что отвечает.
Ну вот выдали с десяток алгоритмов, а будут ли они с твоим классом изображений работать?
А так конечно, сам столько бы вариантов не перебрал. По крайней мере знаю, что уже точно не будет работать. И чему-то научился.
Пока вот ограничился только вертикальным скроллом и нашел относительно рабочий вариант. Пирамида изображений + сетка через окошко.
Блин, ну устал уже повторять, что нужно вначале самому хорошо разбираться в теме. Нужно знать, что именно спрашивать и понимать, что отвечает.
Мою мысль стали повторять, немного изменив, и выдают за свою собственную. ))
Ну вот выдали с десяток алгоритмов, а будут ли они с твоим классом изображений работать?
Какие алгоритмы, алё? Просто скармливаешь ему пачку картинок и говоришь, чтобы склеил на... И стучать кулаком по столу, чтобы побыстрее на..., а то вилку из розетки мол выдерну на... и кабзда этому интеллекту на...
вертикальным скроллом
Пирамида изображений
сетка через окошко
Какая скука. Так вы этих кнопкодавов бесполезных на ИИ не замените.
Это значит к требованиям знать всю ту байду, что сейчас на собесах спрашивают, добавят ещё и "уметь рамсить с ИИ", чтобы на работе был нормальный такой движ-париж, а не эти ваши постоянные переносы на следующий спринт.
Мою мысль стали повторять, немного изменив
странно, когда вы успели ее присвоить?
Просто скармливаешь ему пачку картинок и говоришь, чтобы склеил
сайтик мона?
добавят ещё
Добавят, добавят
Может, математик забежит. После анализа графика совпадений выяснилось, что имеются скриншоты с одним пиком и со многими.
Нужно только найти максимумы функции z=f(x,y) или для чисто вертикально совмещения z=f(y) за минимальное количество вызовов функции.
вот тут один пик и он в минусе по Х. Пока просто сетка с 0 по Y и затем пик по Х
Чёт не понял, почему график совпадений какие-то линии, а не поверхность? Вы не всю площадь картинки сравниваете, а лишь в точках, образующих эту линию?
У вас функции конвергенции изображений не являются аналитическими, а скорее кусочно-заданными, потому искать там максимумы и минимумы с помощью матанализа нельзя. Тогда остаётся банальный и привычный программистам численный метод - перебор всех значений.
Вы не всю площадь картинки сравниваете,
Ну так в этом же и есть проблема — минимизировать количество сравнений. Что-то не могу найти, как выглядит вся поверхность. Но как ни странно форма кривой сохраняется и вдалеке от максимума.
Если бы была возможность сравнить всю картинку, так и проблемы и не было.
У вас функции конвергенции изображений не являются аналитическими,
откуда? есть две картинки сдвигаешь и сравниваешь. Хорошо хоть функцию сравнения нашел относительно быструю.
Вы совмещаете разрезанное изображение, о котором заранее известно, что кусочки совпадают лишь краями? Или кусочки взяты произвольно и в некоторых могут быть повторяющиеся части картинки?
Если первый вариант, то всё проще - сравниваете на совпадение лишь границы. Т.е. всю площадь картинки и не надо сравнивать. Если кусочки прямоугольные, то ещё упрощается.
У вас функции конвергенции изображений не являются аналитическими,откуда? есть две картинки сдвигаешь и сравниваешь. Хорошо хоть функцию сравнения нашел относительно быструю.
Тогда только полный перебор по всем точкам, в которых хотите сравнить картинки. Т.е. вам надо оптимизировать алгоритм по местам сравнений.
ну откройте эту страницу и скроллируйте, попутно делая скриншоты. Это самый простой вариант, который уже работает в полуавтоматическом режиме.
Проблема то, где именно пересекаются картинки. Но тут должен быть один максимум, так что попроще.
Тогда только полный перебор по всем точкам, в которых хотите сравнить картинки.
нифига, слишком грубо.
Ищи контрастные места. Контуры. Выделяй небольшой кусочек с контуром (что тоже не тривиально) и ищи его на большой картинке. Нашёл совпадение - проверяй.
Ищи контрастные места. Контуры
пробовал, OpenCV имеем спец. функцию для этого, для фоток, может, и работает для моих скриншотов нет. Там есть KeyPoint-ы и DMatch-и
MSE отлично сравнивает
Выделяй небольшой кусочек с контуром (что тоже не тривиально) и ищи его на большой картинке.
ну так в этом и проблема, быстро что найти. небольшой кусок фиг найдешь и ошибки очень большие.
вот где проблема, самый максимум не годится. Там на картинке скругленные прямоугольники с текстом. И лучше всего совпадает низ одного прямоугольника с другим. А на самом деле совпадение на один прямоугольник выше. Глаз то всё видит, а комп ну никак :)
И в каждой новой серии картинок своя особая фигня.
И это я забил на изменение по Х пока.
ну откройте эту страницу и скроллируйте, попутно делая скриншоты. Это самый простой вариант, который уже работает в полуавтоматическом режиме.
Проблема то, где именно пересекаются картинки. Но тут должен быть один максимум, так что попроще.
Вам надо вашу реальную задачу описать, а не в общем отвлечённом виде. В общем виде задача решается полным перебором всех точек изображения. А оптимизации идут уже от задачи - скроллить картинку и склеивать потом, или собирать мозаику из кусочков - это разные задачи. И по сути, в первой надо оптимизировать процесс снятия скриншотов, а не склейки. Т.к. если скриншоты сняты оптимально, то ничего оптимизировать вообще не надо. А если случайным образом, т.е. каждый новый скриншот может содержать произвольное число пикселей вдоль скролла исходной картинки, то придётся придумывать разные анализы по цвету или статистике. Но если исходная картинка содержит не ограниченное число цветов, как скажем веб-страница без фотографий, а какое угодно, как скажем фотография, то точность обеспечит лишь полный перебор всех пикселей. Все остальные алгоритмы дадут погрешность и какой-то процент неправильных склеек. Но даже полный, но последовательный перебор пикселей не сработает, если исходная картинка имеет повторяющиеся паттерны (как частный случай - плошная однотонная заливка) по всей длине склейки.
Вобщем, все оптимизации идут после максимально полного описания задачи. А "на все случаи жизни" - только полный перебор с каким-то решением против повторяющихся паттернов.
Такое ощущение, что вам шеф дал задачку "решить по-быстрому", на более-менее нормальное решение которой надо писать докторскую диссертацию и проводить долгие исследования. Ну, если нет готовых алгоритмов или софта для склеек. Люди, коллективы людей над подобными задачами годами бьются, получая огромные зарплаты и всё равно неуниверсальные и неоптимальные решения, а вы хотите с наскока и сразу в калашный ряд. Если получится, шеф конечно вас поблагодарит, что вы ему миллионы принесли, а вас пожурит "чё так долго возился?!". )))
Вот вы всё графики какие-то анализируете. А у вас решена граничная задача, когда надо склеить сплошную однотонную заливку, сохраняя при этом площадь этой заливки как в исходном изображении? А методами анализа полученных кусочков картинки это решить невозможно - только зная, как проводилось снятие скриншотов и имея контроль над этим алгоритмом.
Вам надо вашу реальную задачу описать
Для кого и для чего? И что изменится? Если просто Вам интересно, то к тому что есть можно добавить, что изображения идут один за другим и каждое последующее изображение должно иметь относительно большую область пересечения с предыдущим. И это всегда одна сессия. Ну и очень нежелательно иметь динамические части на картинке.
В общем виде задача решается полным перебором всех точек изображения
Заблуждение, которым тоже страдал
Вот у вас два 3000х2000 скриншота, значит нужно 6 000 000 сравнений?
или собирать мозаику из кусочков
А кто где-то говорил о мозаике?
т.е. каждый новый скриншот может содержать произвольное число пикселей
Речь всегда идет об одном окне "просмотра"
в первой надо оптимизировать процесс снятия скриншотов
ну давайте идеи. Если одно маленькое ограничение - управлять скроллингом другого окна невозможно. Передвигать можно исключительно мышкой.
Люди, коллективы людей над подобными задачами годами бьются...Такое ощущение, что вам шеф дал задачку "решить по-быстрому",
странности не замечаете? Ну и кто интересно один в команде решает свою задачу?