Используя python, как добавить достаточное количество строк и столбцов в изображение / массив, чтобы я всегда мог разделить входное изображение на сегменты требуемой формы? - PullRequest
0 голосов
/ 30 апреля 2019

Предположим, у меня есть изображение формы 512x512, я должен добавить к нему еще 8 строк и еще 8 столбцов, чтобы получить его форму 520x520. чтобы изображение можно было разделить на сегменты формы 40х40.

Использование кода:

import numpy as np
from skimage.util.shape import view_as_blocks
import gdal

ds = gdal.Open('D:\512.tiff')
band = ds.GetRasterBand(1)
arr1 = band.ReadAsArray()
arr1.shape
>>(512,512)
arr2 = np.zeros((8,512), dtype='float32')
arr3=np.vstack((arr1,arr2))
arr4=np.zeros((520,8), dtype='float32')
arr=np.hstack((arr3,arr4))
arr.shape
>>(520,520)
#Now, I can use this command to divide the image in to segements each of shape of 40x40 :
img= view_as_blocks(arr, block_shape=(40,40))

Здесь моя проблема в том, что я всегда хочу разделить изображение на сегменты формы 40x40, но всегда мое входное изображение не будет иметь одинаковый размер (512x512), т.е. это может быть (512x516) (529x517) или что угодно.

Таким образом, мое требование к коду состоит в том, что код должен иметь возможность считывать форму входного изображения и автоматически добавлять n и n строк и столбцов, необходимых для преобразования моего изображения в сегменты формы 40x40

.

1 Ответ

0 голосов
/ 30 апреля 2019

Вы можете использовать функцию потолка для этого:

import math
import numpy as np
new_width = int(math.ceil(float(arr1.shape[1])/segment_width)*segment_width)
new_height = int(math.ceil(float(arr1.shape[0])/segment_height)*segment_height)
new_arr1 = np.zeros((new_height, new_width), dtype=arr1.dtype)
new_arr1[:arr1.shape[0], :arr1.shape[1]] = arr1

Преобразование float просто для того, чтобы убедиться, что есть разделение float и не требуется в Python 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...