如何从视频中提取像素线(roi),在单个.tif图像中组合线?

时间:2014-07-14 16:41:24

标签: python line jython imagej roi

我是编程新手,我正在尝试使用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个arg不能被强制为double [],int [],float []

有关如何解决此问题的任何提示。我可以迭代一个附加像素变量的文本文件,但我不知道该怎么做。 欢迎任何帮助。 顺便说一句,如果你想尝试一下,你可以使用斐济的Fly Brain样本。

非常感谢

1 个答案:

答案 0 :(得分:0)

您得到的错误表明total_pixels不是double [],int []或float []类型的数组,这是FloatProcessor类的任何构造函数所需的。 / p>

在Python中构建Java数组的一个好方法是使用jarray,这是Java数组的Jython模块,如斐济wiki的Jython Scripting文档中所述。

我修改了你的代码,这也需要在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处理kymographs:你可以找到tutorial on the Fiji wiki以及一些plugins producing kymographs