如何在2D图像中计算多个最大值,其中最大值不一定都是相同的高度?我发现imregionalmax()
,imextendedmax()
和findpeaks()
函数不一定有用,因为它们会给出许多局部最大值,它们实际上只是背景噪声中的最大值。我试过了
bw=array > imdilate(array,[1 1 1; 1 0 1; 1 1 1]);
但由于同样的原因,这也是有限的(扩展它使用的矩阵也是如此)。
答案 0 :(得分:3)
噪声确实是图像分析中的一个问题,您尝试找到强度最大值。与图像分析中的任何其他任务一样,您可以通过预处理图像和算法结果的后处理来改善最终结果。
作为局部最大检测之前的预处理步骤,您可以对图像进行去噪,即过滤图像以抑制一些虚假的最大值(imfilter
是您可能想要查看的功能)。
降噪永远不会消除所有噪音,因此当您进行局部最大值检测时,您仍会拾取一些不需要的最大值。因此,您应用某种启发式来区分“好”和“坏”局部最大值。例如,您可以应用强度阈值,低于该阈值可以放弃所有最大值。
你在这里找到了一个很好的评论: Smal等。荧光显微镜中斑点检测方法的定量比较。 IEEE Trans Med Imaging(2010)vol。 29(2)pp.282-301
答案 1 :(得分:1)
这是嘈杂数据中finds 2D peaks的代码。代码对数据进行阈值处理,对其进行中值滤波,使用用户定义的滤波器对其进行平滑,再次对阈值进行平滑处理,并在相关像素处查找局部最大值。该代码还提供了一种简单而可靠的方法来估计所需的阈值。
答案 2 :(得分:0)
我总是首先尝试中值过滤器(medfilt2
)。它可以在保持大部分轮廓的同时消除小噪音。
如果您已经有候选人 - 为什么不通过一些测试过滤它们?像峰值下的体积或到下一个峰值的距离。