GETPSF
使用FFT算法计算衍射点扩散函数(PSF),并将数据存储于指定的矢量数组中(VEC1、VEC2、VEC3或VEC4)。
语法:
GETPSF wave, field, sampling, vector, unnormalized, phaseflag, imagedelta
详述:
- "波长"是与用于计算的波长编号相对应的整数。其值为零说明是多波长计算。
- "视场"必须为1到最大视场数之间的整数,表示要计算的视场编号。
- "采样"可为1(32x32)、2(64x64)、3(128x128)...最大为2048x2048。
- "矢量"参数必须为介于1到4之间的整数,指定数据存储的矢量数组。
- 如果应将数据归一化到峰值1.0,则未归一化的标志为零,如果未归一化的值为1,则返回未归一化的数据。
- 如果相位标志为零,则返回的数据是强度。如果相位标志为1,则返回以度为单位的相位。如果相位标志为2,则返回的数据是PSF的实部。如果相位标志为3,则返回的数据是PSF的虚部。
- imagedelta值表示各个PSF点之间的间隔(以微米为单位),为0表示采用默认间距。波长必须是单色光,才能计算相位数据。如果给定的任何参数超出有效范围,则会使用最近的值替代。
数据将以矢量数组的形式返回,存储格式如下所示:
矢量位置0:矢量数组中PSF数据点的总数。通常,此数值为4*n*n,其中n是采样尺寸(32、64等)。例如,如果采样密度是2,则光瞳采样将为64 x 64,此时数组中有128 x 128(即16,384)个值。每个数值需要8个字节,总共131kb。如果采样密度为1024,则数组至少需要8Mb存储数据,还需要64Mb或更多空间来计算PSF。矢量位置0返回其它值则表示出现不同错误。返回0表示终止计算。返回-1,表示矢量数组的大小不足以容纳所有数据。可使用SETVECSIZE来增大数组尺寸。返回-2,表示没有足够的系统RAM来计算PSF数据。返回-3,表示计算PSF时出现常规错误。
矢量位置1到4*n*n返回PSF数据强度。前2n个值是第一行,从左到右依次为-x到+x,接下来每2n个值为一行,从-y到+y行。矢量位置4*n*n+1返回数据值之间的间隔(以微米为单位)。
示例:
! This macro computes the PSF ! for the currently loaded lens, polychromatic, ! at the first field, ! and a 32x32 grid density (sampling = 1), ! data will be placed in vector 1, ! normalized to 1, ! no phase data, ! default image delta. SETVECSIZE 4500 GETPSF 0, 1, 1, 1, 0, 0, 0 np = vec1(0) IF (np == 0) PRINT "PSF Computation aborted." GOTO 1 ENDIF IF (np == -1) PRINT "SETVECSIZE too small for PSF data." GOTO 1 ENDIF IF (np == -2) PRINT "Not enough system RAM for PSF data." GOTO 1 ENDIF PRINT "There are ", np, " data points, spaced ", vec1(np+1), " micrometers apart". LABEL 1
下一部分: