从矩阵中减去邻居

时间:2015-03-04 23:33:39

标签: matlab

好的,所以我怀疑这可能相当容易,但除了零碎之外,在网上找不到任何好的帮助。

我有一个NxN矩阵,我想做一些边缘检测。我想减去所有相邻值的因子(如果它们存在)。

因此,如果我的矩阵由[5, 5, 5 ; 5, 10, 5 ; 5, 5, 5]组成,我希望它返回[4, 3, 4 ; 3, 8, 3 ; 4, 3, 4](非常粗略估计只是为了举例)。

我可以看到如何使用for循环,但我认为它可以以更容易和更少的税收方式实现。到目前为止,nlfilter似乎是一种可能的出路,但我似乎无法完全理解它。

2 个答案:

答案 0 :(得分:1)

您描述的数学运算称为convolution

卷积基本上等于用自身及其邻居的加权和替换图像中的每个像素。权重以(通常很小的)矩阵(称为内核)或有时脉冲响应给出。

对于边缘检测,我建议使用Sobeldiscrete Laplacian内核。

MATLAB函数conv2可以为你做图像卷积。

kernel = [ 0  1  0
           1 -4  1
           0  1  0 ];
edges = conv2(image,kernel,'same');

答案 1 :(得分:1)

您可能正在寻找类似filter2(h,X)

的内容

根据您的示例,h类似于

h = [  0  -0.1   0;
     -0.1   1  -0.1;
       0  -0.1   0];

这取值为中心值,减去其4个邻居中的每一个的1/10。如果您使用filter2(h,X,'same'),其中X是您的原始矩阵,它将使用零填充,这似乎是您想要获得正确的边值。