![]() |
如何在不使用MATLAB中的循环的情况下将矩阵元素与其相邻元素进行比较?
我在MATLAB中有一个矩阵。我想检查每个元素的4个连接的邻居(左,右,上,下)。如果当前元素小于任何相邻元素,则将其设置为零,否则将保留其值。可以很容易地用循环来完成,但是由于我有成千上万个这样的矩阵,所以它非常昂贵。
在边缘检测之后,您可能将其识别为非极大值抑制。 [B]回答:[/B] 一种实现方法是使用[URL="http://www.mathworks.com/products/image/"]图像处理工具箱中[/URL]的函数[URL="http://www.mathworks.com/help/toolbox/images/ref/nlfilter.html"]NLFILTER[/URL] ,该函数[URL="http://www.mathworks.com/help/toolbox/images/ref/nlfilter.html"]将给[/URL]定函数应用于矩阵的每个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 上面的代码定义了一个[URL="http://www.mathworks.com/help/techdoc/matlab_prog/f4-70115.html"]匿名函数[/URL] ,该[URL="http://www.mathworks.com/help/techdoc/matlab_prog/f4-70115.html"]函数[/URL]使用[URL="http://www.mathworks.com/help/techdoc/math/f1-85462.html#f1-85511"]线性索引[/URL]来获取3×3子矩阵b(5)的中心元素,并将其与其4个连接的邻居b([2 4 6 8]) 。中心元素中的值乘以函数[URL="http://www.mathworks.com/help/techdoc/ref/all.html"]ALL[/URL]返回的逻辑结果,当中心元素大于其所有最近邻居时,逻辑结果为1,否则为0。 [url=https://stackoverflow.com/questions/5042594]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 04:55。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.