【问题标题】:How do I rotate an image by an arbitrary amount?如何将图像旋转任意量?
【发布时间】:2014-11-14 10:49:38
【问题描述】:

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

【问题讨论】:

    标签: image-rotation dm-script


    【解决方案1】:

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

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

    使用此命令,您的脚本可以修改为以下脚本。请注意,我还用命令PI() 替换了您的kPiRotate() 命令要求旋转角度以弧度表示。生成的图像的大小将被放大并且图像是零填充的。 另外:我已将您的 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()
        }
    }
    

    【讨论】:

    • 谢谢,很快。一个子问题:3D 图像是否有类似的命令?
    • 是和不是。命令 Rotate() 也作用于 3D 堆栈。 (在 XY 平面中旋转整个堆栈),但没有用于一般 3D 旋转的命令。 (如果您想在 XZ 或 YZ 中旋转,您可以先“翻转”整个堆栈,然后应用 Rotate()。)
    • 谢谢。 xy 旋转是我现在所寻找的。但出于好奇:我如何将整个堆栈“翻转”大约 90 度,以便 f.e. XY 平面变成了可见的、平行于屏幕的平面?
    • 使用 Slice3() 命令。您可以指定起点和任何(正交)方向以及采样。语法是 Slice3( image, x,y,y, d1,s1,ss1, d2,s2,ss2, d3,s3,ss3) ,以 (x,y,z) 为起点,其他 3 个三元组定义 3 个轴输出为“尺寸、步数、步长”。
    猜你喜欢
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 2016-02-28
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多