Использование исправления

Что такое патчи?

Патчи — это небольшие части большого изображения.

Почему они сделаны?

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

Как генерировать патчи из изображения дистанционного зондирования?

В этой статье используется изображение в коротковолновом инфракрасном диапазоне (SWIR), полученное из набора данных LANDSAT-8 USGS Earth Explorer. Полученное изображение из Индии имеет пространственное разрешение 30 м. Вы можете скачать изображение для тестирования кода по следующей ссылке:



Шаг 1. Импортируйте библиотеки

import numpy as np
import rasterio as rio
import tifffile as tiff
from patchify import patchify
from rasterio.plot import show

Шаг 2. Определите пути

IMG_PATH = 'LC08_L2SP_141044_20220519_20220525_02_T1_SR_B6.TIF'
OUT_PATH = 'Folder/'

IMG_PATH — это строка, содержащая путь к изображению, для которого мы хотим сгенерировать патчи, а OUT_PATH — это строка, содержащая путь к папке, в которую мы хотим сохранить наши патчи.

Шаг 3: Чтение изображения в виде массива

imge = rio.open('LC08_L2SP_141044_20220519_20220525_02_T1_SR_B6.TIF')
img_array = imge.read()
print(img_array.shape)

Мы получаем выходную форму массива, как показано ниже:

Здесь первое измерение массива представляет количество каналов, а второе и третье измерения представляют количество пикселей в вертикальном и горизонтальном направлениях соответственно. Патчи создаются с помощью функции patchify(). Для использования этой функции необходимо переместить количество каналов в последнее измерение массива.

Шаг 4: Переместите полосы в последнее измерение массива

img_array = np.moveaxis(img_array, 0, 2) 
print(img_array.shape)

Теперь форма массива:

Шаг 5: Создайте патчи и сохраните их в виде файлов .tiff, используя цикл for

PATCH_SIZE = 256
PATCH_STEP = 256
patches = patchify(img_array,(PATCH_SIZE, PATCH_SIZE,1), step=PATCH_STEP)
for x in range(patches.shape[0]):
    for y in range(patches.shape[1]):
            single_patch = patches[x,y,:,:,:]
            tiff.imwrite(OUT_PATH + 'Image_' + str(x) + '_' + str(y) + ".tiff", single_patch)

PATCH_SIZE — это переменная, определяющая требуемый размер патчей. Мы сохраняем шаг равным размеру патча, чтобы создавать патчи без перекрытия.

Использованная литература:

  1. https://www.researchgate.net/publication/336970007_A_Unified_View_on_Patch_Aggregation
  2. https://stackoverflow.com/questions/72518968/using-patchify-to-create-patches-from-images-with-other-shapes
  3. https://youtu.be/7IL7LKSLb9I

Другие участники: Бхавнит Сингх