Композиция изображения на основе «матрицы шаблонов» - PullRequest
1 голос
/ 24 февраля 2020

Я хочу сшить c RGB изображения в numpy, чтобы получить увеличенное изображение. Изображения представлены в виде numpy массивов. Однако у меня есть следующие ограничения:

  1. Я хочу соединить вместе c изображения RGB в форме n * m = c, хранящиеся в словаре, вот пример словаря, содержащего 21 изображение:
c_images = { 5:numpy.array[[x,y,3]], 1:numpy.array[[x,y,3]], ... 21:numpy.array[[x,y,3]]} 
У меня есть «шаблонная» матрица размером n * m = c, в которой каждый из индексов изображений 0...c разбросан случайным образом. Случайно сгенерированная «матрица шаблонов» размером n = 3, m = 7, c = 21 выглядит следующим образом:
P_matrix = [[14, 3, 19, 5, 16, 18, 0],
            [17, 1, 13, 7, 6, 15, 11],
            [4, 9, 10, 12, 8, 20, 2 ]]

Как лучше всего использовать матрицу шаблонов для составления больший массив numpy, основанный на c изображениях?

1 Ответ

1 голос
/ 24 февраля 2020

Может быть np.block может помочь вам. Не все изображения должны быть одинакового размера, но они должны соответствовать друг другу . Сначала некоторые примеры данных:

import numpy as np
n, m = 3, 4
img_size = np.array([3, 3])

img_list = [np.zeros(img_size)+i for i in range(n*m)]
# [array([[1., 1., 1.],  array([[2., 2., 2.],   ...array([[12., 12., 12.],
        # [1., 1., 1.],         [2., 2., 2.],             [12., 12., 12.],
        # [1., 1., 1.]]),       [2., 2., 2.]]),,          [12., 12., 12.]])

rnd_idx = np.random.permutation(range(n*m)).reshape((n, m))
# array([[ 9, 10,  0,  4],
#        [ 3, 11,  6,  5],
#        [ 2,  8,  7,  1]])

Чем вам нужно создать вложенный список ваших изображений на основе заданного шаблона, np.block сделает все остальное за вас:

img_list_nested = [[img_list[col] for col in rows] for rows in rnd_idx]

img = np.block(img_list_nested)
# array([[ 9.,  9.,  9., 10., 10., 10.,  0.,  0.,  0.,  4.,  4.,  4.],
#        [ 9.,  9.,  9., 10., 10., 10.,  0.,  0.,  0.,  4.,  4.,  4.],
#        [ 9.,  9.,  9., 10., 10., 10.,  0.,  0.,  0.,  4.,  4.,  4.],
#        [ 3.,  3.,  3., 11., 11., 11.,  6.,  6.,  6.,  5.,  5.,  5.],
#        [ 3.,  3.,  3., 11., 11., 11.,  6.,  6.,  6.,  5.,  5.,  5.],
#        [ 3.,  3.,  3., 11., 11., 11.,  6.,  6.,  6.,  5.,  5.,  5.],
#        [ 2.,  2.,  2.,  8.,  8.,  8.,  7.,  7.,  7.,  1.,  1.,  1.],
#        [ 2.,  2.,  2.,  8.,  8.,  8.,  7.,  7.,  7.,  1.,  1.,  1.],
#        [ 2.,  2.,  2.,  8.,  8.,  8.,  7.,  7.,  7.,  1.,  1.,  1.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...