dm-script中FFT图像的中心是什么

问题描述 投票:0回答:1

我想在FFT图像中画一个圆,圆心为图像中心。我面临的第一个问题是这个 FFT 图像的中心是什么。如果我使用下面的代码来获取FFT图像的中心,假设4096*4096,img_origin是2048.5。既然图像坐标是从0,0开始的,为什么不是2047.5呢?即使图像坐标从1,1开始,也应该是2048。

Number img_pixel_size, img_origin
String img_pixel_size_unit
Image img := GetFrontImage()
img.ImageGetDimensionCalibration(0, img_origin, img_pixel_size, img_pixel_size_unit, 1)
Result(img_origin)
dm-script
1个回答
0
投票

通过查看较小的图像(例如 4x4)可以更好地回答这个问题。 请参阅以下示例脚本的结果:

number size = 4
image img := RealImage("Real",4,size, size)
img = 10
image fftimg := realFFT(img)
fftimg.ShowImage()

Number img_pixel_size, img_origin
String img_pixel_size_unit
fftimg.ImageGetDimensionCalibration(0, img_origin, img_pixel_size, img_pixel_size_unit, 1)
Result("\n Origin:" + img_origin)

number r = 1
component circle = NewOvalAnnotation(size/2-r,size/2-r,size/2+r,size/2+r)
circle.ComponentSetForegroundColor(1,0,0)
circle.ComponentSetDrawingMode(2)
circle.ComponentSetFillMode(2)
fftimg.ImageGetImageDisplay(0).ComponentAddChildAtEnd( circle )

component circle2 = NewOvalAnnotation(img_origin-r,img_origin-r,img_origin+r,img_origin+r)
circle.ComponentSetForegroundColor(0,1,0)
circle2.ComponentSetDrawingMode(2)
circle2.ComponentSetFillMode(2)
fftimg.ImageGetImageDisplay(0).ComponentAddChildAtEnd( circle2 )

4x4

任何图片都由有限大小的区域(像素)组成,这些区域代表数学(无量纲)点的值。在坐标系中,该点位于像素区域内的哪个位置取决于“约定”。两个常用的约定是 a) 在该区域的中心或 b) 在该区域的“原点”。 DigitalMicrograph 使用后者。它还从上到下计算 y 轴。 因此,DigitalMicrograph 具有属于像素左上角的“点值”的约定。

对于偶数大小的图像(如 4x4),FT 的 0 阶系数(表示常量值)存储在索引 [size/2 x size/2] 处的“中心”像素中,或者在本例中为(2/2)(即第 3 行和第 3 列)可以看作白色像素。 围绕图像中心(绿色)画一个圆圈在数学上是正确的,但不太赏心悦目。 (大脑很难将一个值“集中”在方形区域的左上角。) 因此,校准原点被指定为像素的

centre

,从而允许像红色圆圈一样围绕它进行绘制。 如果图像分析中出现不均匀的图像(例如 3x3),则 FT 的 0 阶系数存储在 [(size+1)/2 x (size+1)/2] 或(1/1) 在这种情况下(第二个像素,第二行)。

© www.soinside.com 2019 - 2024. All rights reserved.