我有一个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.")
}
}
答案 0 :(得分:1)
到目前为止,工具和良好编码的好主意。
您正在寻找的命令简称为Rotate()
。您可能在帮助文档中错过了它,因为它(很遗憾)未在“图像”部分中列出。有一个专门的“参考”部分,旨在总结日常快速脚本的“简单”脚本命令:
使用此命令,您的脚本可以修改为下面的脚本。请注意,我还使用命令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()
}
}