如何以任意数量旋转图像?

时间:2014-11-14 10:49:39

标签: image-rotation dm-script

我有一个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.")
    }
}

1 个答案:

答案 0 :(得分:1)

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

您正在寻找的命令简称为Rotate()。您可能在帮助文档中错过了它,因为它(很遗憾)未在“图像”部分中列出。有一个专门的“参考”部分,旨在总结日常快速脚本的“简单”脚本命令:

enter image description here

使用此命令,您的脚本可以修改为下面的脚本。请注意,我还使用命令kPi替换了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()
    }
}