如何找到峰值位置(局部最大值)
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 版本是这样。)
对于局部最大值,我们是否可以为偏移设置一些规则,使曲线只保留我们认为是峰值的图?
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 版本是这样。)