Matlab-周围元素之和
我想计算矩阵中给定元素周围元素的和。到目前为止,我已经编写了以下几行代码:Matlab-周围元素之和,matlab,sum,Matlab,Sum,我想计算矩阵中给定元素周围元素的和。到目前为止,我已经编写了以下几行代码: for i=1:m, rij(1:n)=0 for j=1:n, alive = tijdelijk(i-1,j)+tijdelijk(i+1,j)+tijdelijk(i-1,j-1)+tijdelijk(i+1,j-1)+tijdelijk(i,j+1)+tijdelijk(i,j-1)+tijdelijk(i-1,j+1)+tijdelijk(i+1,j+1)
for i=1:m,
rij(1:n)=0
for j=1:n,
alive = tijdelijk(i-1,j)+tijdelijk(i+1,j)+tijdelijk(i-1,j-1)+tijdelijk(i+1,j-1)+tijdelijk(i,j+1)+tijdelijk(i,j-1)+tijdelijk(i-1,j+1)+tijdelijk(i+1,j+1)
这会导致错误,因为例如,i=1时i-1变为零。有人知道如何在不出错的情况下做到这一点吗 您可以通过过滤对元素求和。可用于这种方式 让我举个例子。我创建了一个样本矩阵
>> A = reshape(1:20, 4, 5)
A =
1 5 9 13 17
2 6 10 14 18
3 7 11 15 19
4 8 12 16 20
然后,我创建一个过滤器。过滤器就像一个遮罩,将中心放在当前单元格上,并对过滤器上与1
对应的位置求和。对于八个相邻连接的情况,过滤器应如下所示:
>> B = [1 1 1; 1 0 1; 1 1 1]
B =
1 1 1
1 0 1
1 1 1
然后,简单地用这个小矩阵卷积矩阵
>> conv2(A, B, 'same')
ans =
13 28 48 68 45
22 48 80 112 78
27 56 88 120 83
18 37 57 77 50
如果需要四个相连的邻居,可以将过滤器的角设置为0。类似地,您可以为自己的目的设计任何过滤器,例如对所有邻居求平均,而不是求和
有关详细信息,请参阅Wikipedia中的。有两种可能性:将循环的限制更改为
i=k:(m-k)
和j=k:(n-k)
,或使用
例:
计算每个8×8块的二维DCT
你可以在边缘做很多事情。具体的做法取决于您的问题,并且在不同的用例中是不同的。要做的典型事情:
既然你的代码提到了“你的老师”,我想你可以问在边缘应该发生什么(或者以一种明智的方式解决它可能是任务的一部分!!) 哈,刚才也在写同样的东西!:)如果它对你有效,你可以接受答案作为你问题的解决方案。这非常有帮助,那也是:)我想你不熟悉Stackoverflow。通过单击答案左角的勾号即可接受答案。或者,如果您有图像处理工具箱,请使用blkproc METHINKSO环绕边缘如何?可以使用conv2或blkproc以简单的方式完成吗?老实说,我不确定。我想conv2 zero会在边缘上移动,但我不能确定。
I = imread('cameraman.tif');
fun = @dct2;
J = blkproc(I,[8 8],fun);
imagesc(J), colormap(hot)