Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在不使用MATLAB中的循环的情况下将矩阵元素与其相邻元素进行比较?

我在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。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 05:14


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.