gpt4 book ai didi

image-rotation - 如何通过脚本在数码显微照片中旋转 3D 光谱图像?

转载 作者:行者123 更新时间:2023-12-02 02:51:14 24 4
gpt4 key购买 nike

我想找到 rotate(image, degree) 脚本命令的等价物来绕 x 或 y 轴旋转(我只需要 90º 旋转)。我知道我可以使用工具菜单来完成它,但如果我能找到一个命令或函数来使用脚本来完成它会更快。

提前致谢!

最佳答案

Using the Slice command can be confusing at first, so here is a detailed explanation on using the command for a rotation around the X-axis.

此示例展示了如何使用 Slice3 命令绕其 X 轴顺时针旋转 3D 数据(沿 X 方向查看)。

Slice3 命令指定现有数据数组的新 View 。

  • 它首先指定原始像素,即在新 View 中将由 (0,0,0) 表示的坐标(在原始数据中)。

  • 然后它为新的三个轴中的每一个指定采样方向、长度和步长。
    第一个三元组指定坐标(在原始数据中)如何沿新图像的 x 方向变化,第二个三元组用于新图像的 y 方向,最后一个三元组用于新图像的 z 方向。

所以绕x轴旋转可以想象为: Rotation around X

对于“重采样”数据:

  • 新(旋转)数据的原点位于原始数据点 (0,0,SZ-1)。
  • 它的 X 方向保持不变,即在新数据的 X 方向上一步,将使原始数据中的坐标三元组也增加 (1,0,0)。
    并且一个步进 SX 步步长为 1。
  • 它的 Y 方向基本上是之前的负 Z 方向,即新数据中 Y 方向的一步,也会将原始数据中的坐标三元组增加 (0,0,-1)。
    所以一个人走 SZ 步,步长为 -1。
  • 它的 Z 方向本质上是之前的 Y 方向,即新数据中 Z 方向的一步,会将原始数据中的坐标三元组增加 (0,1,0)。
    所以一个走 SY 步,步长为 1。

因此,对于绕X轴顺时针旋转,命令是:
img.Slice3( 0,0,SZ-1, 0,SX,1, 2,SZ,-1, 1,SY,1 )

这个命令只会在相同的数据上创建一个新的 View (即不使用额外的内存。)所以要将旋转后的图像作为新图像(数据值按应有的方式对齐)在内存中),我们可以使用 ImageClone()

clone 这个 View 到一个新的图像中

总的来说,以下脚本显示了这一点:

// Demo of rotating 3D data orthogonally around the X axis
// This is done by resampling the data using the Slice3 command

// Creation of test image with regcognizeable pattern
number SX = 100
number SY = 30
number SZ = 50
image img := RealImage("Test",4, SX,SY,SZ)

// trig. modulated linear increase in X
img = icol/iwidth* sin( icol/(iwidth-1) * 5 * Pi() ) **2
// Simple linear increase in Y
img += (irow/iheight) * 2
// Modulation of values in Z
// (doubling values for index 0,1, 3, 4, 9, 16, 25, 36, 49)
img *= (SQRT(iplane) == trunc(SQRT(iplane)) ? 2 : 1 )
img.ShowImage()

// Show captions. Image coordinate system is
// Origin (0,0,0) in top-left-front most pixel
// X axis goes left to right
// Y axis goes top to down
// Z axis goes front to back
img.ImageSetDimensionCalibration(0,0,1,"orig X",0)
img.ImageSetDimensionCalibration(1,0,1,"orig Y",0)
img.ImageSetDimensionCalibration(2,0,1,"orig Z",0)
img.ImageGetImageDisplay(0).ImageDisplaySetCaptionOn(1)

// Rotation around X axis, clockwise looking along X
// X --> X` (unchanged)
// Y --> Z'
// Z --> -Y'
// old origin moves to bottom-left-front most
// This means for "new" sampling:
// Specify sampling starting point:
// New origin (0,0,0)' will be value which was at (0,0,SZ-1)
// Going one step in X' in the new data, will be like going one step in X
// Going one step in Y' in the new data, will be like going one step backwards in Z
// Going one step in Z' in the new data, will be like going one step in Y
image rotXCW := img.Slice3( 0,0,SZ-1, 0,SX,1, 2,SZ,-1, 1,SY,1 ).ImageClone()
rotXCW.SetName("rotated X, CW")
rotXCW.ShowImage()
rotXCW.ImageGetImageDisplay(0).ImageDisplaySetCaptionOn(1)


以下方法执行 90 度旋转:

// Functions for 90degree rotations of data
image RotateXCW( image input )
{
number SX,SY,SZ
input.Get3DSize(SX,SY,SZ)
return input.Slice3( 0,0,SZ-1, 0,SX,1, 2,SZ,-1, 1,SY,1 ).ImageClone()
}

image RotateXCCW( image input )
{
number SX,SY,SZ
input.Get3DSize(SX,SY,SZ)
return input.Slice3( 0,SY-1,0, 0,SX,1, 2,SZ,1, 1,SY,-1 ).ImageClone()
}

image RotateYCW( image input )
{
number SX,SY,SZ
input.Get3DSize(SX,SY,SZ)
return input.Slice3( SX-1,0,0, 2,SZ,1, 1,SY,1, 0,SX,-1 ).ImageClone()
}

image RotateYCCW( image input )
{
number SX,SY,SZ
input.Get3DSize(SX,SY,SZ)
return input.Slice3( 0,0,SZ-1, 2,SZ,-1, 1,SY,1, 0,SX,1 ).ImageClone()
}

image RotateZCW( image input )
{
number SX,SY,SZ
input.Get3DSize(SX,SY,SZ)
return input.Slice3( 0,SY-1,0, 1,SY,-1, 0,SX,1, 2,SZ,1 ).ImageClone()
}

image RotateZCCW( image input )
{
number SX,SY,SZ
input.Get3DSize(SX,SY,SZ)
return input.Slice3( SX-1,0,0, 1,SY,1, 0,SX,-1, 2,SZ,1 ).ImageClone()
}

围绕 z 轴的旋转也可以使用 RotateRight()RotateLeft() 完成。但是请注意,这些命令不会调整图像的尺寸校准,而 Slice3 命令会。

关于image-rotation - 如何通过脚本在数码显微照片中旋转 3D 光谱图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52122413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com