2

我有一张 DigitalMicrograph 图像,我想旋转一定量(不是 90 度)。这可以通过菜单项“Process...\Rotate”来完成,但我想通过脚本来完成。我有一个脚本,它根据图像上的线 ROI 计算角度。(见下文),但我不知道如何旋转图像。

Number kPi = 3.14159265359

Image front := GetFrontImage()
ImageDisplay fDisp = front.ImageGetImageDisplay(0)
ROI line = fDisp.ImageDisplayGetRoi(0)
if ( line.RoiIsValid() )
{
    if ( line.RoiIsLine() )
    {
        number sx,sy,ex,ey
        line.RoiGetLine(sx,sy,ex,ey)
        number dy = ey - sy
        number dx = ex - sx
        number angle = atan( dy / dx ) * 180/kPi
        if ( dx < 0 ) 
            angle = angle + 180

        Result("\n Rotate image by " + angle + " degree.")
    }
}
4

1 回答 1

1

到目前为止,一个工具的好主意和良好的编码。

您要查找的命令简称为Rotate(). 您可能在帮助文档中错过了它,因为它(不幸地)没有列在“图像”部分。有一个专门的“参考”部分旨在总结日常快速脚本的“简单”脚本命令:

在此处输入图像描述

使用此命令,您的脚本可以修改为以下脚本。请注意,我也用kPicommand 替换了你的PI()。该Rotate()命令要求以弧度给出旋转角度。生成的图像的大小将被放大并且图像是零填充的。另外:我已经用缩写版本替换了您的 If - 语句。

Image front := GetFrontImage()
ImageDisplay fDisp = front.ImageGetImageDisplay(0)
ROI line = fDisp.ImageDisplayGetRoi(0)
if ( line.RoiIsValid() )
{
    if ( line.RoiIsLine() )
    {
        number sx, sy, ex, ey
        line.RoiGetLine( sx, sy, ex, ey )
        number dy = ey - sy
        number dx = ex - sx
        number angle = atan( dy / dx ) + ( dx < 0 ? Pi() : 0 )
        image out := front.Rotate( angle )
        out.ShowImage()
    }
}
于 2014-11-14T10:59:07.063 回答