我写了一个小程序,通过使用“Analyze Particles ...”给我一些关于ROI的信息。不幸的是,我需要有关每个ROI的像素数量的信息。当我在这个插件之前没有使用“Set Scale”时,我可能会得到区域输出的像素数量。但是为了进一步计算,需要先前的“Set Scale”。使用“Analyze Particles ...”后,是否有可能提取每个ROI的像素数量。我只在java中发现了这种可能性(对于我来说几乎不可读作为python中的初学者)http://imagej.nih.gov/ij/plugins/download/Calculate_Mean.java并且它似乎是非常计算密集的。提前感谢你。
import math
row = 0
IJ.run("Set Measurements...", "area centroid perimeter shape feret's area_fraction redirect=None decimal=6")
IJ.run("Analyze Particles...")
rt = ResultsTable.getResultsTable()
for roi in RoiManager.getInstance().getRoisAsArray():
a = rt.getValue("Feret", row)
b = rt.getValue("MinFeret", row)
nu= 1
L = 1
p = 1
sapf = (math.pi/4) * (1/(nu*L)) * math.pow(a, 3) * math.pow(b, 3) / (math.pow(a, 2) + math.pow(a, 2))*p
rt.setValue("ROI no.", row, row + 1)
rt.setValue("Sapflow", row, sapf)
row = row + 1
rt.show("Results")
答案 0 :(得分:2)
(一般来说,与ImageJ内部而非编程语言更相关的问题应该发送到ImageJ mailing list。这将确保大多数专家用户和ImageJ开发人员都能阅读您的问题,而不仅仅是由几个 stackoverflow.com 爱好者组成。)
您可以使用calibration信息计算该区域的像素数:
像素数=总面积/像素面积
您可以使用ImageStatistics.getStatistics()
方法获取当前投资回报率的pixelCount
值。
以下是添加几行后代码的外观:
import math
row = 0
IJ.run("Set Measurements...", "area centroid perimeter shape feret's area_fraction redirect=None decimal=6")
IJ.run("Analyze Particles...")
rt = ResultsTable.getResultsTable()
imp = IJ.getImage()
ip = imp.getProcessor()
for roi in RoiManager.getInstance().getRoisAsArray():
a = rt.getValue("Feret", row)
b = rt.getValue("MinFeret", row)
nu= 1
L = 1
p = 1
sapf = (math.pi/4) * (1/(nu*L)) * math.pow(a, 3) * math.pow(b, 3) / (math.pow(a, 2) + math.pow(a, 2))*p
rt.setValue("ROI no.", row, row + 1)
rt.setValue("Sapflow", row, sapf)
ip.setRoi(roi)
stats = ImageStatistics.getStatistics(ip, Measurements.AREA, None)
rt.setValue("Pixel count", row, stats.pixelCount)
row = row + 1
rt.show("Results")
希望有所帮助。