Как объединить обрезанные изображения обратно в исходное изображение? - PullRequest
0 голосов
/ 21 января 2020

У меня есть изображение размером 10980x10980, и я обрезал это изображение с помощью сценария python до размера 256x256. сценарий, который я использовал для обрезки:

from PIL import Image

  infile = 'Amritsar_T43SDR.tif'
  chopsize = 256

   img = Image.open(infile)
    width, height = img.size

     for x0 in range(0, width, chopsize):
          for y0 in range(0, height, chopsize):
          box = (x0, y0,
                x0+chopsize if x0+chopsize <  width else  width - 1,
                y0+chopsize if y0+chopsize < height else height - 1)
          print('%s %s' % (infile, box))
          img.crop(box).save('Train.%s.x%03d.y%03d.tif' % (infile.replace('.tif',''), x0, y0))

изображение успешно обрезано в соответствии с заданным размером в 1855 изображениях (большая часть размера файла изображения составляет 193 КБ, но создается некоторое изображение размером 171 КБ)

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

def roll(image, delta):
    x0, y0 = img.size

delta = delta % xsize
if delta == 0: return image

part1 = image.crop((0, 0, delta, y0))
part2 = image.crop((delta, 0, x0, y0))
image.paste(part1, (x0-delta, 0, x0, y0))
image.paste(part2, (0, 0, x0-delta, y0))

return image

Альтернативно, он не улавливает исходные размеры, мы использовали программу ImageMajik и выдали команду как

montage -mode concatenate -tile 43x85 Train*.tif new_amritsar.tif

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

Пожалуйста, предложите мне решение

касается Ясира

список обрезанных изображений

список обрезанных изображений с разным размером и масштабом, поскольку 10980 x 10980 не были разделены точно 256 x 356

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Если вы используете Windows, у вас могут возникнуть трудности с моим другим ответом, поэтому вот ответ на основе Python.

Опять же, я бы предложил вам изменить имя файла, чтобы оно соответствовало нулю -дополнение до 5 цифр. Затем вы можете получить список всех смещений по y, просмотрев файлы с x00000 в их именах, и список всех смещений по x, просмотрев все файлы с y00000 в их именах.

Это может выглядеть так:

#!/usr/bin/env python3

import re
import glob

# Generate a list of all the Y offsets by looking at all the Train*x00000*tif filenames
yoffsets = []
for f in glob.glob("Train*x00000*tif"):
    # Look for a `y` followed by 5 digits
    yoffsets.append(int(re.findall(r'y(\d{5})', f)[0]))

# Generate a list of all the X offsets by looking at all the Train*y00000*tif filenames
xoffsets = []
for f in glob.glob("Train*y00000*tif"):
    # Look for an `x` followed by 5 digits
    xoffsets.append(int(re.findall(r'x(\d{5})', f)[0]))

# Generate filenames in order
for y in sorted(yoffsets):
   ypad = str(y).zfill(5)
   for x in sorted(xoffsets):
      xpad = str(x).zfill(5)
      print(f"Train...y{ypad}.x{xpad}.tif")

Теперь вы можете либо напечатать имена файлов в файл и запустить ImageMagick montage, как раньше, либо создать большой пустой canvas, открывайте файлы по одному внутри моего последнего for l oop и вставьте каждый в нужное место.

0 голосов
/ 21 января 2020

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

img.crop(box).save('Train.%s.y%05d.x%05d.tif' % (infile.replace('.tif',''), y0, x0))

Теперь ваши координаты x и y должны быть обращены для упрощения сортировки и дополнены нулями до 5 мест, а не 3 .

Тогда вы сможете получить список файлов в правильном порядке с помощью:

ls Train.Amritsar_T43SDR*tif | sort -n > files.txt

и затем смонтировать их с помощью:

magick montage -geometry +0+0 -tile 43x @files.txt result.tif

Или, если вам нужен эквивалентный однострочный:

ls Train.Amritsar_T43SDR*tif | sort -n | magick montage -geometry +0+0 -tile 43x @- result.tif

Ключевые слова : Python, обработка изображений, повторная сборка, Jigsaw, ImageMagick, Montage.

...