Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我在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。 更多&回答... |
![]() |
![]() |