【问题标题】:How to undo or reverse np.meshgrid?如何撤消或反转 np.meshgrid?
【发布时间】:2018-11-20 03:03:17
【问题描述】:

在图像大小调整插值问题中,可以在对网格索引进行操作之前对行和列索引使用np.meshgrid

nrows = 600
ncols = 800
image_in = np.random.randint(0, 256, size=(nrows, ncols, 3))
scale_factor = 1.5

r = np.arange(nrows, dtype=float) * scale_factor
c = np.arange(ncols, dtype=float) * scale_factor

rr, cc = np.meshgrid(r, c, indexing='ij')

# Nearest Neighbor Interpolation
# np.floor if scale_factor >= 1. np.ceil otherwise
rr = np.floor(rr).astype(int).clip(0, nrows-1)
cc = np.floor(cc).astype(int).clip(0, ncols-1)

image_out = image_in[rr, cc, :]

现在,我将如何扭转这个过程?假设给定rr_1cc_1np.meshgrid 的乘积)以未知方式处理(此处由np.random.randint 说明),我如何获得r_1c_1,即输入np.meshgrid(最好带有ij 索引)?

# Suppose rr_1, cc_1 = np.meshgrid(r_1, c_1, indexing='ij')
rr_1 = np.random.randint(0, nrows, size=(nrows, ncols, 3))
cc_1 = np.random.randint(0, ncols, size=(nrows, ncols, 3))

r_1 = ?
c_1 = ?

更新:

我在发布后立即想通了。答案是:

# Suppose rr_1, cc_1 = np.meshgrid(r_1, c_1, indexing='ij')
rr_1 = np.random.randint(0, nrows, size=(nrows, ncols, 3))
cc_1 = np.random.randint(0, ncols, size=(nrows, ncols, 3))

r_1 = rr_1[:, 0]
c_1 = cc_1[0]

【问题讨论】:

    标签: python numpy image-processing


    【解决方案1】:

    numpy.meshgrid 从输入数组创建更高维数组,以创建类似网格的数组。因此,假设您想通过使用一些输入 1D 向量 rc 来获得 2D 网格。 numpy.meshgridrrcc 返回为 2D 数组,它们分别在 2D 数组的任何地方保持 y 轴或 x 轴不变(这就是它是网格的原因)。

    这是一个测试用例:

    import numpy as np
    
    r = np.arange(5)      # [0 1 2 3 4]
    c = np.arange(5,10,1) # [5 6 7 8 9]
    
    rr, cc = np.meshgrid(r,c,indexing='ij')
    
    r_original = rr[:,0]
    c_original = cc[0,:]
    
    print(r_original)     # [0 1 2 3 4]
    print(c_original)     # [5 6 7 8 9]
    

    请注意,我们为rrcc 创建的网格是

    rr = [[0 0 0 0 0]
          [1 1 1 1 1]
          [2 2 2 2 2]
          [3 3 3 3 3]
          [4 4 4 4 4]]
    
    cc = [[5 6 7 8 9]
          [5 6 7 8 9]
          [5 6 7 8 9]
          [5 6 7 8 9]
          [5 6 7 8 9]]
    

    由于您在您的情况下使用 indexing='ij' 并且二维数组已转置。因此,对于 rrcc 保持不变的值分别是 x 轴和 y 轴(与不使用 indexing='ij' 的情况相反)。

    【讨论】:

      猜你喜欢
      • 2012-10-22
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多