- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想找到 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轴顺时针旋转,命令是:img.Slice3( 0,0,SZ-1, 0,SX,1, 2,SZ,-1, 1,SY,1 )
这个命令只会在相同的数据上创建一个新的 View (即不使用额外的内存。)所以要将旋转后的图像作为新图像(数据值按应有的方式对齐)在内存中),我们可以使用 ImageClone()
总的来说,以下脚本显示了这一点:
// 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/
我是一名优秀的程序员,十分优秀!