gpt4 book ai didi

python - 在 Python 中实现 MATLAB 的 col2im 'sliding'

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:05 25 4
gpt4 key购买 nike

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

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

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

通过测试我发现的实现不可靠,它不会给出与 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 实现中,返回一个 大小为 (263 2) 而不是 (263 263) 的 ndarray 并且值不正确 !

任何帮助

最佳答案

对于 im2col 'sliding' 版本,我们已经有一些有效的实现,如发布的 here .

对于 col2im 'sliding'版本,它只是一个 reshape away -

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]])

关于python - 在 Python 中实现 MATLAB 的 col2im 'sliding',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42474491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com