русский
Germany.ruForen → Архив Досок→ Programmierung

Алгоритмы совмещения изображений

1478  1 2 alle
AlexNek патриот30.09.24 17:56
AlexNek
30.09.24 17:56 

Даже не изображений, а проще скриншотов.

Есть у нас большая картинка

|==================|
|====|
   |====|
     |====|
...

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

часть 1часть 2

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

Разные сетки страшно зависят от шага и т.п.

А хочется иметь что-то одно, чтобы нелажало часто.

Видимо, нужна определенная комбинация, вот весь вопрос какая, пока не находится. Что посоветуете?

#1 
alex445 патриот03.10.24 09:25
NEW 03.10.24 09:25 
in Antwort AlexNek 30.09.24 17:56

Ну явно же задача для ИИ. Или этот ваш ИИ только копипастным поиском заниматься может да по 4 завязанных в узлы пальца генерировать?

#2 
AlexNek патриот03.10.24 11:35
AlexNek
NEW 03.10.24 11:35 
in Antwort alex445 03.10.24 09:25, Zuletzt geändert 03.10.24 11:59 (AlexNek)
Ну явно же задача для ИИ

Блин, ну устал уже повторять, что нужно вначале самому хорошо разбираться в теме. Нужно знать, что именно спрашивать и понимать, что отвечает.

Ну вот выдали с десяток алгоритмов, а будут ли они с твоим классом изображений работать?


А так конечно, сам столько бы вариантов не перебрал. По крайней мере знаю, что уже точно не будет работать. И чему-то научился.


Пока вот ограничился только вертикальным скроллом и нашел относительно рабочий вариант. Пирамида изображений + сетка через окошко.

#3 
alex445 патриот03.10.24 12:10
NEW 03.10.24 12:10 
in Antwort AlexNek 03.10.24 11:35
Блин, ну устал уже повторять, что нужно вначале самому хорошо разбираться в теме. Нужно знать, что именно спрашивать и понимать, что отвечает.

Мою мысль стали повторять, немного изменив, и выдают за свою собственную. ))


Ну вот выдали с десяток алгоритмов, а будут ли они с твоим классом изображений работать?

Какие алгоритмы, алё? Просто скармливаешь ему пачку картинок и говоришь, чтобы склеил на... И стучать кулаком по столу, чтобы побыстрее на..., а то вилку из розетки мол выдерну на... и кабзда этому интеллекту на...


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

Какая скука. Так вы этих кнопкодавов бесполезных на ИИ не замените.


Это значит к требованиям знать всю ту байду, что сейчас на собесах спрашивают, добавят ещё и "уметь рамсить с ИИ", чтобы на работе был нормальный такой движ-париж, а не эти ваши постоянные переносы на следующий спринт.

#4 
AlexNek патриот03.10.24 12:20
AlexNek
NEW 03.10.24 12:20 
in Antwort alex445 03.10.24 12:10
Мою мысль стали повторять, немного изменив

странно, когда вы успели ее присвоить? смущ


Просто скармливаешь ему пачку картинок и говоришь, чтобы склеил

сайтик мона?


добавят ещё

Добавят, добавят бебе

#5 
AlexNek патриот11.10.24 17:57
AlexNek
NEW 11.10.24 17:57 
in Antwort AlexNek 30.09.24 17:56

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

Нужно только найти максимумы функции z=f(x,y) или для чисто вертикально совмещения z=f(y) за минимальное количество вызовов функции.

вот тут один пик и он в минусе по Х. Пока просто сетка с 0 по Y и затем пик по Х

#6 
alex445 патриот11.10.24 20:53
NEW 11.10.24 20:53 
in Antwort AlexNek 11.10.24 17:57, Zuletzt geändert 11.10.24 21:01 (alex445)

Чёт не понял, почему график совпадений какие-то линии, а не поверхность? Вы не всю площадь картинки сравниваете, а лишь в точках, образующих эту линию?


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

#7 
AlexNek патриот11.10.24 21:05
AlexNek
NEW 11.10.24 21:05 
in Antwort alex445 11.10.24 20:53, Zuletzt geändert 11.10.24 21:08 (AlexNek)
Вы не всю площадь картинки сравниваете,

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

Если бы была возможность сравнить всю картинку, так и проблемы и не было.


У вас функции конвергенции изображений не являются аналитическими,

откуда? есть две картинки сдвигаешь и сравниваешь. Хорошо хоть функцию сравнения нашел относительно быструю.

#8 
alex445 патриот11.10.24 21:13
NEW 11.10.24 21:13 
in Antwort AlexNek 11.10.24 21:05, Zuletzt geändert 11.10.24 21:15 (alex445)

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


Если первый вариант, то всё проще - сравниваете на совпадение лишь границы. Т.е. всю площадь картинки и не надо сравнивать. Если кусочки прямоугольные, то ещё упрощается.

#9 
alex445 патриот11.10.24 21:14
NEW 11.10.24 21:14 
in Antwort AlexNek 11.10.24 21:05, Zuletzt geändert 11.10.24 21:14 (alex445)
У вас функции конвергенции изображений не являются аналитическими,
откуда? есть две картинки сдвигаешь и сравниваешь. Хорошо хоть функцию сравнения нашел относительно быструю.

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

#10 
AlexNek патриот11.10.24 21:52
AlexNek
NEW 11.10.24 21:52 
in Antwort alex445 11.10.24 21:13

ну откройте эту страницу и скроллируйте, попутно делая скриншоты. Это самый простой вариант, который уже работает в полуавтоматическом режиме.

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

#11 
AlexNek патриот11.10.24 21:55
AlexNek
NEW 11.10.24 21:55 
in Antwort alex445 11.10.24 21:14
Тогда только полный перебор по всем точкам, в которых хотите сравнить картинки.

нифига, слишком грубо.

#12 
MrSanders коренной житель11.10.24 22:13
NEW 11.10.24 22:13 
in Antwort AlexNek 11.10.24 21:55

Ищи контрастные места. Контуры. Выделяй небольшой кусочек с контуром (что тоже не тривиально) и ищи его на большой картинке. Нашёл совпадение - проверяй.

#13 
AlexNek патриот11.10.24 22:20
AlexNek
NEW 11.10.24 22:20 
in Antwort MrSanders 11.10.24 22:13, Zuletzt geändert 11.10.24 22:44 (AlexNek)
Ищи контрастные места. Контуры

пробовал, OpenCV имеем спец. функцию для этого, для фоток, может, и работает для моих скриншотов нет. Там есть KeyPoint-ы и DMatch-и

MSE отлично сравнивает


Выделяй небольшой кусочек с контуром (что тоже не тривиально) и ищи его на большой картинке.

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

#14 
AlexNek патриот11.10.24 22:40
AlexNek
NEW 11.10.24 22:40 
in Antwort AlexNek 11.10.24 21:52

вот где проблема, самый максимум не годится. Там на картинке скругленные прямоугольники с текстом. И лучше всего совпадает низ одного прямоугольника с другим. А на самом деле совпадение на один прямоугольник выше. Глаз то всё видит, а комп ну никак :)

И в каждой новой серии картинок своя особая фигня. хммм

И это я забил на изменение по Х пока.

#15 
alex445 патриот12.10.24 08:02
NEW 12.10.24 08:02 
in Antwort AlexNek 11.10.24 21:52, Zuletzt geändert 12.10.24 08:04 (alex445)
ну откройте эту страницу и скроллируйте, попутно делая скриншоты. Это самый простой вариант, который уже работает в полуавтоматическом режиме.
Проблема то, где именно пересекаются картинки. Но тут должен быть один максимум, так что попроще.

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


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

#16 
alex445 патриот12.10.24 08:08
NEW 12.10.24 08:08 
in Antwort AlexNek 11.10.24 22:40, Zuletzt geändert 12.10.24 08:09 (alex445)

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

#17 
alex445 патриот12.10.24 08:12
NEW 12.10.24 08:12 
in Antwort AlexNek 11.10.24 22:40, Zuletzt geändert 12.10.24 08:13 (alex445)

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

#18 
AlexNek патриот12.10.24 11:03
AlexNek
NEW 12.10.24 11:03 
in Antwort alex445 12.10.24 08:02
Вам надо вашу реальную задачу описать

Для кого и для чего? И что изменится? Если просто Вам интересно, то к тому что есть можно добавить, что изображения идут один за другим и каждое последующее изображение должно иметь относительно большую область пересечения с предыдущим. И это всегда одна сессия. Ну и очень нежелательно иметь динамические части на картинке.


В общем виде задача решается полным перебором всех точек изображения

Заблуждение, которым тоже страдал смущ

Вот у вас два 3000х2000 скриншота, значит нужно 6 000 000 сравнений?


или собирать мозаику из кусочков

А кто где-то говорил о мозаике?


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

Речь всегда идет об одном окне "просмотра"


в первой надо оптимизировать процесс снятия скриншотов

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

#19 
AlexNek патриот12.10.24 11:06
AlexNek
NEW 12.10.24 11:06 
in Antwort alex445 12.10.24 08:08
Люди, коллективы людей над подобными задачами годами бьются...Такое ощущение, что вам шеф дал задачку "решить по-быстрому",

странности не замечаете? Ну и кто интересно один в команде решает свою задачу?


#20 
1 2 alle