我在MATLAB中有一个矩阵。我想检查每个元素的4个连接的邻居(左,右,上,下)。如果当前元素小于任何相邻元素,则将其设置为零,否则将保留其值。可以很容易地用循环来完成,但是由于我有成千上万个这样的矩阵,所以它非常昂贵。
在边缘检测之后,您可能将其识别为非极大值抑制。
回答:
一种实现方法是使用
图像处理工具箱中的函数
NLFILTER ,该函数
将给定函数应用于矩阵的每个M×N块:
>> A = magic(6) %# A sample matrix A = 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11 >> B = nlfilter(A,[3 3],@(b) b(5)*all(b(5) >= b([2 4 6 8]))) B = 35 0 0 26 0 0 0 32 0 0 0 25 31 0 0 0 27 0 0 0 0 0 0 0 30 0 34 0 0 16 0 36 0 0 18 0 上面的代码定义了一个
匿名函数 ,该
函数使用
线性索引来获取3×3子矩阵b(5)的中心元素,并将其与其4个连接的邻居b([2 4 6 8]) 。中心元素中的值乘以函数
ALL返回的逻辑结果,当中心元素大于其所有最近邻居时,逻辑结果为1,否则为0。
更多&回答...