Създайте мозайка от припокриващи се изображения в python

Имам набор от изображения, предоставен от система за изображения с дрон. Отделните изображения се припокриват около 70%. Всяко изображение е tif файл, от който мога да прочета GPS местоположение (едно местоположение за всяко изображение). Това, което искам да направя с изображенията, е да ги обединя в един и същи tif файл. С други думи, бих искал да създам мозайка от всички налични изображения.

Освен това всъщност имам 5 комплекта изображения. Всеки представлява отделна спектрална лента. И така, бих искал да създам мозайка, която да се състои от 5 ленти.

Мозайката за отделен набор от изображения е по-илюстративно показана на снимката: https://i.stack.imgur.com/41gZm.png

Представям си работен процес за маржиране като този:

1.) Създайте мозайка A_i от припокриващи се изображения от i-тия набор от изображения, където i=1..5 за всяка спектрална лента

2.) Създайте окончателна мозайка B от всички A_i мозайки, където i=1..5 за всяка спектрална лента

Чудя се какъв би бил най-добрият подход за създаване на такава мозайка. Чух за dgal, rasterio, pygis и т.н., но не знам коя библиотека е най-подходяща, мощна и интуитивна. В крайна сметка бих искал всичко да е внедрено в Python. За предпочитане в библиотеката, но извикванията на командния ред в рамките на python също ще свършат работа.

Надявам се, че обясних проблема си достатъчно ясно. Всяка помощ и предложения са добре дошли. Примерите ще бъдат високо оценени.


person user6274417    schedule 05.11.2020    source източник


Отговори (1)


можете да опитате да използвате PIL за свързване на изображения. Пример е:

from PIL import Image

im1 = Image.open(image_file1)
im2 = Image.open(image_file2)

newIm = Image.new('RGB', (im1.width + im2.width, im1.height))
dst.paste(im1, (0, 0))
dst.paste(im2, (im1.width, 0))

ако изображенията се припокриват, ще трябва да коригирате стойностите, където да ги поставите. Надявам се това да помогне с проблема ви.

person Flavio Moraes    schedule 05.11.2020
comment
Благодаря за отговора, но се страхувам, че това няма да помогне. Моите изображения са сиви (едноцветни) и ще ми трябва автоматично подравняване, което ще включва GPS данни. - person user6274417; 06.11.2020
comment
не можете ли да програмирате автоматичното подравняване, като преобразувате GPS данните в размера на изображението? Ако знаете разстоянието между двата края на изображението, просто го факторизирайте по ширината на изображението. - person Flavio Moraes; 06.11.2020
comment
Здравейте, да, мислех за това, но не знам как да го направя. Знам само размера на изображението и GPS местоположението в средата на изображението. Но не знам какво разстояние представлява изображението в действителност. Имате ли решение как да го изчисля. Предполагам, че това е възможно, но просто не знам как да направя точно това. - person user6274417; 08.11.2020
comment
ако единствената информация, която имате, е GPS координатата в средата на картината, единствената възможност за автоматизиране на този процес е, ако всички снимки имат еднакво увеличение. Ако можете да разчитате на това, тогава трябва ръчно да коригирате припокриването на две изображения (опитайте различни стойности в предишната позиция) и да сравните стойностите, които сте използвали, с разстоянието между позицията на всяка картина въз основа на техните координати. Можете да използвате калкулатор за разстояние, базиран на gps координати, които лесно се намират в google. - person Flavio Moraes; 09.11.2020
comment
Имайте предвид, че ако припокриването между две изображения е винаги едно и също, това не е необходимо, просто го намерете ръчно и го приложете за всички изображения - person Flavio Moraes; 09.11.2020
comment
Здравейте, да, единствената информация е едно GPS местоположение, но метаданните включват също информация като отклонение, накланяне и наклон. Всички снимки са с еднакво увеличение, защото когато дронът сканира земята, той лети на една и съща височина. Какво имате предвид под ръчно регулиране на припокриването на две изображения? Мислите ли, че това буквално или чрез използване на някакъв алгоритъм за подравняване на дескриптори, който се базира например на sift? Смятате ли, че информацията за местоположението може да се използва само за груба оценка на превода? Точно преди да извършите настройката на фината позиция? - person user6274417; 09.11.2020
comment
използвайте последната функция от PIL в моя отговор и опитайте различни стойности за позицията x и y. Започнете с x = im1.width (без припокриване) и го намалете, докато две изображения се припокрият перфектно. - person Flavio Moraes; 09.11.2020
comment
Добре. Благодаря ви, ще опитам това. - person user6274417; 10.11.2020