Как извлечь спектр из трехмерного изображения спектра

В DigitalMicrograph у меня есть 3D-куб данных размером [X x Y x Z], и я хотел бы извлечь один спектр в позиции X/Y. Я знаю, что могу адресовать подобъем двумя противоположными углами (x1/y1/z1) и (x2/y2/z2). Но когда я делаю это в приведенном ниже сценарии, я получаю отображение LinePlot только с одним значением. Что я делаю неправильно ?

number px = 5
number py = 3

image SIblock := GetFrontImage()
number sx, sy, sz
Get3DSize( SIblock, sx, sy, sz )
image spec = SIblock[ px, py, 0, px+1, py+1, sz ]

ShowImage( spec )

person Community    schedule 09.10.2014    source источник


Ответы (1)


Ваше решение обращается к правой части тома, но как изображение [1 x 1 x sz]. Вы можете повернуть изображение, но лучшим решением будет использование команды slice1(), которая напрямую обращается к одномерному подобиему, как в следующем модифицированном скрипте:

number px = 5
number py = 3
image SIblock := GetFrontImage()
number sx, sy, sz
Get3DSize( SIblock, sx, sy, sz )
image spec := Slice1( SIblock, px,py,0,  2,sz,1 )
image specCopy := ImageClone( spec )
ShowImage( specCopy )

Команда имеет 7 параметров: исходное изображение (любое измерение), начальную координату объема в виде x/y/z и триплет, описывающий дискретизацию: направление ( 0=x 1=y 2=z ), количество шаги в этом направлении и размер шага.

Обратите внимание, что мой сценарий также использовал image spec :=, а не image spec =. Разница в том, что = копирует значения (и создает новое изображение), а := назначает правую часть. spec — это просто другое название идентичного пространства памяти SIblock. Изменение значений spec приведет к изменению соответствующего подтома SIblock. Поэтому мой сценарий создает другое изображение specCopy с помощью команды ImageClone(), чтобы действительно создать отдельное «извлеченное» изображение.

person BmyGuest    schedule 09.10.2014