【问题标题】:Implement MATLAB's col2im 'sliding' in Python在 Python 中实现 MATLAB 的 col2im '滑动'
【发布时间】:2023-03-24 10:25:02
【问题描述】:

matlab 中的col2imim2col 函数对于图像处理很重要,但是通过谷歌搜索,python 没有有效的实现。

特别是我想用 numpy 为 python 重写 col2im

我有一个矩阵,我想将它的列重新排列成块。

通过测试我发现的实现并不可靠,它给出的结果与 matlab 不同。

对于 im2col,以下实现可以正常工作

def im2col_sliding(A, size):  
    dy, dx = size  
    xsz = A.shape[1] - dx + 1
    ysz = A.shape[0] - dy + 1
    R = np.empty((xsz * ysz, dx * dy))

    for i in xrange(ysz):  
        for j in xrange(xsz):  
            R[i * xsz + j, :] = A[i:i + dy, j:j + dx].ravel()
    return R  

但是相关的 col2im 是假的!

假设我有一个大小为 (V) = 1 69169 的矩阵 V 在matlab中运行:

X = col2im(V, [3 3], [265 265], 'sliding'); 

它给我的 size(X) 是 263 263

但是,在与我为 im2col 发布的代码相关的 python 实现中,返回 size (263 2) 而不是 (263 263) 的 ndarray 并且 值不正确强>!

任何帮助

【问题讨论】:

  • 也许您可以从指定您希望这些函数做什么开始?众所周知,matlab 函数名称是不言自明的。
  • @PaulPanzer 我有一个 isze size(V) 的 V 矩阵是 1 69169 X = col2im(V, [3 3], [265 265], 'sliding');它给我 size(X) is 263 263 在与我为 im2col 发布的代码相关的 python 实现中,返回一个大小为 (263 2) 而不是 263 263 的数组,并且值不正确
  • @hpaulj Im2col 对我来说很好并且工作正常,但是 col2im 不是这样
  • 你试过什么col2im?您没有提供 im2col 的来源;应该如何猜测“相关”的?

标签: python matlab numpy


【解决方案1】:

对于im2col'sliding'version,我们已经很少有像here那样有效的实现了。

对于col2im'sliding'version,它只是一个重塑-

def col2im_sliding(B, block_size, image_size):
    m,n = block_size
    mm,nn = image_size
    return B.reshape(nn-n+1,mm-m+1).T 
      # Or simply B.reshape(nn-n+1,-1).T
      # Or B.reshape(mm-m+1,nn-n+1,order='F')

测试运行

MATLAB 运行 -

>> arr = 1:15;
>> arr
arr =
     1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
>> col2im(arr, [3,3], [7,5],'sliding')
ans =                
     1     6    11  %// (7-3+1, 5-3+1) shaped array
     2     7    12
     3     8    13
     4     9    14
     5    10    15

NumPy/Python 运行 -

In [116]: arr
Out[116]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])

In [117]: col2im_sliding(arr, [3,3], [7,5])
Out[117]: 
array([[ 1,  6, 11],  # (7-3+1, 5-3+1) shaped array
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14],
       [ 5, 10, 15]])

【讨论】:

  • @Divakar 我需要一些帮助来提取 SPAMS lib(python) 中的补丁。他们已经编写了从图像中提取补丁的代码,但没有任何用于从补丁中重建图像的代码?所以,你能帮帮我吗??
  • @SudipDas 请发布一个新问题。
  • @Divakar 我已经发布了,你能检查那个问题吗
猜你喜欢
  • 2015-07-18
  • 2019-01-13
  • 2017-03-19
  • 2017-09-23
  • 2020-11-29
  • 2020-04-10
  • 2013-09-13
  • 2017-09-04
  • 1970-01-01
相关资源
最近更新 更多