0

我编写了一个小程序,为我提供有关使用“分析粒子...”找到的 ROI 的某些信息。不幸的是,我需要有关每个 ROI 像素数量的信息。当我在这个插件之前没有使用“设置比例”时,我可能会通过区域输出获得像素数量。但是为了进一步计算之前的“设置比例”是需要的。使用“分析粒子...”后是否有可能提取每个 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") 
4

1 回答 1

2

(一般来说,与 ImageJ 内部而不是编程语言更相关的问题应该发送到ImageJ 邮件列表。这将确保大多数 ImageJ 专家用户和开发人员都会阅读您的问题,而不仅仅是几个stackoverflow .com爱好者。)

  1. 您可以使用校准信息来计算该区域的像素数:

    像素数 = 总面积 / 像素面积

  2. 您可以使用该ImageStatistics.getStatistics()方法获取pixelCount当前 ROI 的值。

    以下是添加几行代码后的代码:

    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")
    

希望有帮助。

于 2013-10-09T13:02:58.103 回答