我是编程新手,我正在尝试使用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样本。
非常感谢
答案 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