在Python中实现MATLAB的col2im“滑动”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Python中实现MATLAB的col2im“滑动”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1580字,纯文字阅读大概需要3分钟。
内容图文
![在Python中实现MATLAB的col2im“滑动”](/upload/InfoBanner/zyjiaocheng/685/70101bfbbfee48c592ee44fbaa1e2281.jpg)
matlab中的col2im和im2col函数对于图像处理很重要,但是通过谷歌搜索,没有有效的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是伪造的!
假设我有isze size(V)= 1 69169的矩阵V
通过在matlab中运行:
X = col2im(V, [3 3], [265 265], 'sliding');
它给我的大小(X)为263263
但是,在与我为im2col发布的代码相关的python实现中,返回大小为(263 2)而不是(263 263)的ndarray,并且值不正确!
任何帮助
解决方法:
对于im2col“滑动式”版本,我们已经发布了here个有效的实现方式.
对于col2im’sliding’版本,它只是一种重塑形式-
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中实现MATLAB的col2im“滑动”全部内容,希望文章能够帮你解决在Python中实现MATLAB的col2im“滑动”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。