如何确定给定ROI的像素数量?

时间:2013-10-09 09:45:49

标签: python jython imagej

我写了一个小程序,通过使用“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") 

1 个答案:

答案 0 :(得分:2)

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

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

      

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

  2. 您可以使用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")
    
  3. 希望有所帮助。