如何找到峰值位置(局部最大值)

how to find peak positions (local maxima)

对于局部最大值,我们是否可以为偏移设置一些规则,使曲线只保留我们认为是峰值的图?

image FilterLocalMaxima1D( image spectrumIn, number range )
{
    image spectrumOut := spectrumIn.ImageClone()
    
    for( number dx = -range; dx<=range; dx++  )
    
        spectrumout *= ( spectrumIn >= offset(spectrumIn,dx,0)?1:0)
        
    spectrumout.SetName("Local maxima ("+range+") filtered")
    
    return spectrumOut
}

请不要 post 将多个单独的问题合并为一个 post - 而是 post 将它们分开。

至于你的#1

你可以通过在任何地方取其绝对值来简单地使任何图像成为正值:

img = abs(img)

至于你的#2

不,offset将始终对完整图像表达式进行操作。

至于你的#3

您当然可以将结果打印到单独的文本 window 而不是结果 window。请在此处查看 F1 帮助文档:

documentwindow win  = NewScriptWindow("My Text", 100, 100, 600, 900 )
win.EditorWindowAddText( "The quick brown fox jumps over the lazy dog.\n" )

您还可以为每个脚本保存这些文本 windows。 至于 Excel:没有直接的功能,但您可以使用 LaunchExternalProcess() 命令做一些有创意的事情。

此外,您可以使用命令 ScrapCopy(),相当于在图像上按 CTRL + C,然后将其粘贴到 Excel。 (复制和粘贴线图数据将为您提供校准后的 XY table。至少对于最新的 GMS 版本是这样。)