Как извлечь строку пикселей (рои) из видео, комбинированные строки в одном изображении .tif?

Я новичок в программировании, и я пытаюсь использовать ImageJ и Jython для извлечения одной строки из видео и объединения строк во временную последовательность. Я пытаюсь создать видеокимограмму (например, http://www.kymography.com/supp_demo.html)!

Моя попытка выглядит следующим образом:

from ij import ImagePlus, IJ
from ij.process import FloatProcessor

img = IJ.getImage() 
roi = img.getRoi()
StackSize = 100  #img.getImageStackSize() 

pixels = roi.getPixels()
Length = len(pixels)
Width = 1

total_pixels = [[0] *len(pixels)] * StackSize
t_pixels = []


for j in range (1, StackSize):
    img.setSlice (j)
    roi = img.getRoi()
    pixels = roi.getPixels()
    for i in xrange (len(pixels)):
        pixels [i] = pixels [i] 
    total_pixels[j-1] = pixels 

fp = FloatProcessor (Length, StackSize,total_pixels)
imp = ImagePlus ("White Noise", fp) 
imp.show()

Однако он возвращает: TypeError: ij.process.FloatProcessor(): 3-й аргумент не может быть приведен к double[], int[], float[]

Любые советы о том, как это исправить. Возможно, я мог бы повторить текстовый файл, добавив переменную пикселей, но я не знаю, как это сделать. Любая помощь приветствуется. Кстати, если вы хотите попробовать, вы можете использовать образец Fly Brain от Fiji.

Большое спасибо


person Always_learning    schedule 14.07.2014    source источник


Ответы (1)


Полученная ошибка предполагает, что total_pixels не является массивом типа double[], int[] или float[], который необходим для любого из конструкторов FloatProcessor.

Хорошим способом создания массивов Java в Python является использование jarray, модуля Jython для массивов Java, как описано в Jython. Документация по скриптам вики-сайта Fiji.

Я изменил ваш код, который также нуждался в некоторых исправлениях в циклах for:

from ij import ImagePlus, IJ
from ij.process import FloatProcessor
from jarray import zeros

img = IJ.getImage() 
roi = img.getRoi()
stackSize = img.getImageStackSize() 

pixels = roi.getPixels()
length = len(pixels)

total_pixels = zeros(length * stackSize, 'f')

for j in xrange (stackSize):
    img.setSlice (j+1)
    roi = img.getRoi()
    pixels = roi.getPixels()
    for i in xrange (length):
        total_pixels[j*length+i] = pixels [i]

fp = FloatProcessor (length, stackSize, total_pixels)
imp = ImagePlus ("White Noise", fp) 
imp.show()

FWIW, другие люди использовали ImageJ для работы с кимографами: вы можете найти руководство на вики Фиджи, а также некоторые плагины для создания кимографов

person Jan Eglinger    schedule 15.07.2014
comment
Большое спасибо за исправление скрипта. Также спасибо за подсказку!! - person Always_learning; 16.07.2014
comment
Привет Ян, я пытаюсь сохранить новое изображение кимограмм в папку в соответствии с [ini.uzh.ch/~acardona/fiji-tutorial/index.html#s1] с помощью: `imp = IJ.getImage() fs = FileSaver (imp) folder = C :/Users/myfolder/Desktop/ImageJ_files путь к файлу = папка + / + Videokymogram.tiff fs.saveAsTiff(filepath)' Создается пустое изображение, внутри которого ничего нет. Можно ли это исправить? еще раз спасибо - person Always_learning; 16.07.2014
comment
Попробуйте IJ.saveAsTiff(imp, path) (см. javadoc для Filesaver.saveAsTiff). Если это не сработает, просто откройте новый вопрос с более подробной информацией. Кроме того, часто бывает полезно обратиться к списку рассылки ImageJ, поскольку экспертов по ImageJ гораздо больше, чем на stackoverflow. - person Jan Eglinger; 16.07.2014