2013-02-21 168 views
0

我需要一个快速的方式来执行图像(矩阵)区域的阈值。 输入是矩阵(图像),阈值和半径,我需要检查给定半径内的所有值是否都小于阈值,如果需要,我需要保存此值(像素)的坐标。 我不想让它与双循环,因为我需要多次执行此任务与几个半径。 我不关心最小值或最大值,只是像素周围的所有值都会低于某个阈值。 任何想法将非常感激!阈值在矩阵matlab

+1

您可以使用圆形结构元素执行膨胀,然后在生成的图像中进行平凡的阈值处理。由于该问题被标记为“matlab”,我想你对扩大速度并不感兴趣,只是期望'matlab'能给出足够快的速度。如果您对此感兴趣,那么关于可分解性和提高形态操作效率的相关方法的工作量很大。 – mmgp 2013-02-22 00:09:39

回答

0

我不知道任何快速算法的圆形邻域。但是,如果您有矩形邻域,您可以在此处快速执行检查以了解更多详细信息: http://leetcode.com/2011/01/sliding-window-maximum.html

另外,当您有多个半径值时,可以提高速度。简单地从最小的值开始计算结果。对于将来的半径值,如果一个点没有通过前面的一个步骤,不要处理它,那么存在一个半径较小(因此在当前半径内)的点,该点大于阈值。

+0

嗨,我并不清楚阈值,它可以随半径改变,所以,我不能对那些没有从上一级“通过”的像素进行测试。我想创建一个图像大小的蒙版,只有在当前窗口(我可以在方形窗口中创建一个圆形,如下所示:http://www.mathworks.com/matlabcentral/answers/24609 ,并且只是检查image。* mask的总和是否小于threshold * mask。我只是不知道如何避免在这种情况下的循环 – matlabit 2013-02-21 21:09:42

+0

因此,你只需要定义一个循环过滤器,然后使用conv2或filter2运行计算总和(Matlab内部使用的FFT,所以它比嵌套循环实现方式更快) – iampat 2013-02-22 00:35:31

+0

嗨,谢谢,这就是我要做的,编辑你的答案(与评论),我会接受它。 – matlabit 2013-02-24 08:04:58