我的矩阵是:
0 3 0
0 1 2
4 4 1我在上面使用im2col,如下所示:
im2col(A, [2 2], 'sliding')这会正确地产生以下结果:
0 0 3 1
0 4 1 4
3 1 0 2
1 4 2 1我称这个矩阵为K。现在,我使用col2im返回到我的原始矩阵。在Matlab文档中,我使用了以下内容:
col2im(K, [2 2], [5 5],'sliding')但这并没有给出我的原始矩阵A。原因是[5 5]应该是[4 4],才能获得3*3的入门矩阵。但当我这么做的时候我会得到
??? Error using ==> reshape
To RESHAPE the number of elements must not change.为什么会这样呢?我怎样才能找回我的原始矩阵呢?
发布于 2013-12-10 23:29:58
从文档中:
A= col2im(B,m n,mm nn,'sliding')将行向量B重新排列成一个大小为(mm-m+1)×(nn-n+1)的矩阵。B必须是大小为1*(mm-m+1)*(nn-n+1)的向量。B通常是使用列压缩函数(如sum)处理im2col(...,'sliding')输出的结果。
所以对我来说,你应该试着这样做:
col2im(sum(K), [2 2], [4 4],'sliding')但是,这将要求K具有9列。我手头上没有图像处理工具箱来测试它
发布于 2013-12-11 01:41:21
你的col2im不能工作,因为它使用了reshape,因此你想要重塑的矩阵的元素数(K)和新的元素数需要相同。情况不再是这样了,因为通过使用im2col转换A,您显然改变了这一点。A有9个元素和K16个元素。
因此,您基本上需要通过删除K中的冗余元素和双倍元素(由于im2col中使用了重叠的2*2块)来再次返回到3*3矩阵。为此,您只需使用所需的元素创建一个新的矩阵(C):
C = [K([1,3,11;2,4,12;6,8,16])]只要你首先使用相同的块顺序从3*3矩阵到4*4矩阵,这应该是可行的。
也许你可以告诉我们更多关于你真正想要实现的东西,因为我从一开始就看不到任何理由。使用其他函数也可能会更好,但我只能在知道您的问题背后的原因的情况下才能看到这一点。
发布于 2017-08-16 22:36:34
clear
clc
img = double(imread('tire.tif'));
[r c] = size(img);
w = 8;
imgBlock = im2col(img,[w w],'sliding'); imgBlock = imgBlock(:);
[x y] = meshgrid(1:c,1:r);
xx = im2col(x,[w w], 'sliding'); xx = xx(:);
yy = im2col(y,[w w], 'sliding'); yy = yy(:);
img2 = accumarray([yy xx], imgBlock, [], @mean);
figure,imshow(img, []);
figure,imshow(img2,[]);%随机矩阵作为图像
img = randi(10,4)
img =
6 2 2 7
5 8 7 8
1 4 3 5
4 6 7 1%矩阵大小
r=大小(Img)
面片大小百分比
W= 2;
要修补的图像百分比
imgBlock = im2col(img,w w,‘滑动’)
% image patchs矩阵到向量
imgBlock = imgBlock(:);
R=
4C=
4imgBlock =
6 5 1 2 8 4 2 7 3
5 1 4 8 4 6 7 3 7
2 8 4 2 7 3 7 8 5
8 4 6 7 3 7 8 5 1%索引矩阵大小等于图像大小
X y=网格(1:C,1:R)
%索引矩阵到补丁;到向量
xx = im2col(x,w w,‘滑动’);xx = xx(:);
yy = im2col(y,w w,‘滑动’);yy = yy(:);
X=
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4Y=
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4% yy :行索引xx:列索引
%将函数mean应用于在yy xx中具有相同下标的imgBlock中的每个元素子集。
均值=累加数组(yy xx,imgBlock,[],@ img2 );
img
img2
img =
6 2 2 7
5 8 7 8
1 4 3 5
4 6 7 1img2 =
6 2 2 7
5 8 7 8
1 4 3 5
4 6 7 1%列,行,值
A= xx,yy,imgBlock
A=
1 1 6
1 2 5
2 1 2
2 2 8
1 2 5
1 3 1
2 2 8
2 3 4
1 3 1
1 4 4
2 3 4
2 4 6
2 1 2
2 2 8
3 1 2
3 2 7
2 2 8
2 3 4
3 2 7
3 3 3
2 3 4
2 4 6
3 3 3
3 4 7
3 1 2
3 2 7
4 1 7
4 2 8
3 2 7
3 3 3
4 2 8
4 3 5
3 3 3
3 4 7
4 3 5
4 4 1% img(2,2)在矩阵中出现的次数
a(xx == 2& yy == 2,:)
ans =
2 2 8
2 2 8
2 2 8
2 2 8https://stackoverflow.com/questions/20498010
复制相似问题