【问题标题】:Image composition based on "pattern matrix"基于“模式矩阵”的图像合成
【发布时间】:2020-06-08 05:45:10
【问题描述】:

我想将 numpy 中的 c rgb 图像拼接在一起,从而得到更大的图像。图像表示为 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]]} 
  1. 我有一个大小为n * m = c 的“模式”矩阵,其中图像0...c 的每个索引都是随机分散的。一个随机生成的大小为n = 3m = 7c = 21的“模式矩阵”如下所示
P_matrix = [[14, 3, 19, 5, 16, 18, 0],
            [17, 1, 13, 7, 6, 15, 11],
            [4, 9, 10, 12, 8, 20, 2 ]]

根据c 图像,使用模式矩阵组成更大的 numpy 数组的最佳方法是什么?

【问题讨论】:

  • 你能提供一些代码并展示你到目前为止所得到的吗?所有图像的大小都相同吗?还有MRE.
  • 您好,感谢您的提纲,我编辑了我的帖子,但需要阅读有关 MRE 的内容,我会不断更新它

标签: python-3.x image numpy


【解决方案1】:

也许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.]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多