将 EELS 地图转换为线扫描数据,但 DM 3.0 仍将其识别为地图

Convert EELS map to line scan data but DM 3.0 still recognize it as a map

我写了一个脚本来将EELS地图转换为EELS线扫描数据,它与DM 2.0配合得很好。我可以把它当作直接用DM2.0采集的EELS线扫描数据来处理。但它不适用于 DM 3.0 及以上版本。看起来 DM 3.0 仍然将其识别为 EELS 地图文件。 DM3.0 仍然尝试生成具有多个 windows 的元素图,而不是生成具有单个 window 的线扫描配置文件,并表示显示类型不正确。不确定我需要添加什么 code/command 以适应 DM 3.0 及以上版本。感谢任何 suggestions/comments.

image source

source := getFrontImage()

number sizeX,sizeY,sizeZ
source.Get3Dsize(sizeX,sizeY,sizeZ)

Result( "Original size:"+ sizeX +"; "+ sizeY+"; "+sizeZ+""+"\n" )

image sum
number regionsizeX = 1
number regionsizeY = sizeY
number row,col

Result( "new size:"+ regionsizeX +"; "+ regionsizeY+"; "+row+""+row+" "+"\n" )

sum := RealImage("Line Scan of [0,0,"+regionSizeY+","+regionSizeX+"]",4,sizeX/regionSizeX,sizey/regionsizeY,sizeZ)
//sum := ImageClone(source)

sum = 0

for (row=0;row<regionsizeY;row++) for (col=0;col<regionSizeX;col++)
{
OpenAndSetProgressWindow("Doing sub-block","x = "+col," y = "+row)
sum += Slice3(source,col,row,0,0,sizeX/regionSizeX,regionsizeX,1,sizeY/regionSizeY,regionSizeY,2,sizez,1)
}

OpenAndSetProgressWindow("","","")

ImageCopyCalibrationFrom(sum, source)

sum.setdisplaytype (1)

sum.SetStringNote( "Meta Data:Format", "Spectrum image" )
sum.SetStringNote( "Meta Data:Signal", "EELS" )

showimage(sum)
    

我对你的术语也有点困惑。当您写“将地图转换为 LineScan”时,您的意思是:

a) 将 3D 光谱图像(xy 扫描,一个光谱维度)转换为 2D 线扫描光谱图像(一个空间维度,一个光谱维度)

b) 将二维地图(xy 扫描,一个值)转换为一维线迹(一个空间维度,每个点一个值)?

我想你的意思是 a) 并回答它。


我很惊讶 if/that 您的脚本可以在 GMS 2 中正常运行。

您的最终(假设是线扫描 SI)数据仍然是 3D 数据集,在 Z 方向上具有分散 运行。这是不是典型的 LineScan SI 数据格式(在 X 方向分散,在 Y 方向空间维度,无 Z 维度)。

我认为您想沿 y 维度“折叠”您的 3D 数据(通过求和)是否正确?

如果是这样,您要做的是:

// Get Input
image src3D := GetFrontImage()
number sizeX,sizeY,sizeZ
if ( 3 != src3D.ImageGetNumDimensions() ) Throw( "Input not 3D")
src3D.Get3Dsize(sizeX,sizeY,sizeZ)

// Optional: Use Rect-ROI on image to specify area
// If no selection, will return full FOV
number t,l,b,r
src3D.GetSelection(t,l,b,r)

// Prepare output (for summing 3D of rect-selection along y)
// NB: 2D container has:
//   X dimension (spatial) along Y
//   Z dimension (energy) along X
number nSpatial  = r - l
number nSpectral = sizeZ
number eOrig, eScale, sOrig, sScale
string eUnit, sUnit
src3D.ImageGetDimensionCalibration(0, sOrig, sScale, sUnit, 0)
src3D.ImageGetDimensionCalibration(2, eOrig, eScale, eUnit, 0)

string name
if ( nSpatial != sizeX )
    name = "Y-projection of [" + t + "," + l + "," + b + "," + r + "] over " + (b-t) + " rows"
else
    name = "Y-projection over " + sizeY + " rows"

image dst2D := RealImage( name, 4, nSpectral, nSpatial )
dst2D.ImageSetDimensionCalibration(0, eOrig, eScale, eUnit, 0)
dst2D.ImageSetDimensionCalibration(1, sOrig, sScale, sUnit, 0)

// Copy Tags (contains necessary meta tags! Meta Data Format & Signal)
dst2D.ImageGetTagGroup().TagGroupCopyTagsFrom( src3D.ImageGetTagGroup() )

// Display (with captions)
dst2D.ShowImage()
dst2D.ImageGetImageDisplay(0).ImageDisplaySetCaptionOn(1)

number doFAST = 0
if ( !doFAST )
{
    // Perform actuall summing (projection) by summing "line by line" 
    // into the LinePlot SI. Note the flipping of input and output dimensions!
    for( number y = t; y<b; y++ )
    {
        number lineNumber = y - t
        dst2D.slice2( 0,0,0, 0,nSpectral,1, 1,nSpatial,1 ) += src3D.slice2( l,y,0, 2,nSpectral,1, 0,nSpatial,1)
    }
}
else
{
    // Alternative (faster) projection. Use dedicated projection command.
    image proj := src3D[l,t,0,r,b,nSpectral].Project(1)         // Outcome of projectsion is having x=x and y=z, so need flip axis
    dst2D = proj.slice2(0,0,0, 1,nSpectral,1, 0,nSpatial,1 )    // Flip axis
}

// Display (with captions)
dst2D.ShowImage()
dst2D.ImageGetImageDisplay(0).ImageDisplaySetCaptionOn(1)

请注意,使用切片块进行迭代速度很快,但不如最新 GMS 版本中可用的专用 'Project' 命令快。该示例使用其中任何一个,但第 51-56 行可能在旧版 GMS 中不可用。


编辑以解决以下评论:

标签中还可以找到光谱的其他相关元数据。对于 EELS,收集和会聚角以及 HT 尤其重要。您可以通过检查正确获取的 EELS 光谱的标签来了解标签路径。

或者,您可以通过将空的一维线图“转换”为 EELS 光谱然后尝试量化来了解它们的标签路径。您将收到填写数据的提示。这样做之后,检查图像的标签: