我正在读这个:
https://uk.mathworks.com/help/images/imfilter-boundary-padding-options.html
我正在努力了解它如何适用于5x5或7x7内核。假设在5x5内核中,你将在内核的顶部和右侧有一个额外的行和列,而不是链接中的图像。这需要什么价值?它能找到的最近的一个?对角线值(拐角处的值)怎么样?
答案 0 :(得分:2)
来自imfilter
中的'replicate'
选项的文档,
假设数组边界外的输入数组值等于最接近的数组边界值。
通过使用正确的参数调用imfilter
,您实际上可以看到padarray
使用的确切数组。假设我们有一个5x5阵列:
im = reshape(1:25, 5, 5)
im =
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
我们可以在每一边填充这个数组2(相当于使用5x5内核):
padarray(im, [2 2], 'replicate')
ans =
1 1 1 6 11 16 21 21 21
1 1 1 6 11 16 21 21 21
1 1 1 6 11 16 21 21 21
2 2 2 7 12 17 22 22 22
3 3 3 8 13 18 23 23 23
4 4 4 9 14 19 24 24 24
5 5 5 10 15 20 25 25 25
5 5 5 10 15 20 25 25 25
5 5 5 10 15 20 25 25 25
将行/列间隔开,以便您可以更轻松地查看原始数组:
1 1 1 6 11 16 21 21 21
1 1 1 6 11 16 21 21 21
1 1 1 6 11 16 21 21 21
2 2 2 7 12 17 22 22 22
3 3 3 8 13 18 23 23 23
4 4 4 9 14 19 24 24 24
5 5 5 10 15 20 25 25 25
5 5 5 10 15 20 25 25 25
5 5 5 10 15 20 25 25 25
您还可以通过在其中一个角落创建一个1
个值的内核来验证这一点:
im = reshape(1:25, 5, 5)
im =
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
k = zeros(5); k(1,1) = 1
k =
1 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
imfilter(im, k, 'replicate')
ans =
1 1 1 6 11
1 1 1 6 11
1 1 1 6 11
2 2 2 7 12
3 3 3 8 13
当然,这只显示9x9填充数组的左上角5x5子阵列,但是通过在不同角落重复1
的过程,您可以看到整个数组。