仅获取 ROI 中的像素,如何?
Get the pixels in an ROI only, how?
尝试编写脚本,到目前为止我有一个函数,returns 通过阈值得出 ROI。
PA.setRoiManager(roim)
paOpt = PA.CLEAR_WORKSHEET +PA.SHOW_NONE +PA.INCLUDE_HOLES +PA.EXCLUDE_EDGE_PARTICLES + PA.ADD_TO_MANAGER
# measurement options: clear the results, show nothing, include holes, exclude particles on edges and add ROIs to manager
measOpt = PA.AREA + PA.MEAN + PA.MIN_MAX # measure the minimum, maximum, mean and area of particles
pa = PA(paOpt, measOpt, rt, minSize, maxSize)
pa.analyze(imp)
roi_list = roim.getRoisAsArray()
print roi_list[0]
这会向控制台输出:Roi[Traced, x=, y=, width=, height= ]
所以我有信心找到投资回报率。 roim 是 RoiManager 的一个实例。
现在的问题是当我去查看 ROI 内的像素时。
def pixelStats(roiPatch, imp):
'''
get the pixel value distribution for the patch ROI
return the number of Lo pixels and the number of Ld pixels
roi_Patch returns handle to the patch ROI and imp is the
instance of current ImagePlus to be measured
'''
mask = roiPatch.getMask() # mask of roiPatch, do you need this?
ip = imp.getProcessor()
ip.setRoi(roiPatch)
cal = imp.getCalibration()
# options = IS.MEAN | IS.STD_DEV | IS.MODE
stats = IS.getStatistics(ip, M.MEAN | M.MODE | M.STD_DEV, cal) # what does getCalibration do??? stats for ROI only applied to imp, why?
# see the following --> http://fiji.sc/Jython_Scripting#Obtain.2FView_histogram_and_measurements_from_an_image
domThreshold = stats.mode - stats.STD_DEV
backGround = stats.MEAN - stats.STD_DEV
# define the threshold for Lo/Ld phase
pixels = ip.getPixels()
above = filter(lambda i: pixels[i] > backGround, xrange(len(pixels)))
below = filter(lambda i: above[i] < domThreshold, xrange(len(above)))
# calculate the length of the arrays containing pixels of Lo/Ld phase
return len(above), len(below), len(pixels)
查看这个 returns 的测量值,我确信 ip.getPixels() 只是从原始图像处理器返回像素,而不仅仅是 ROI。换句话说,我只是得到了原始“矩形”图像中的像素数。
任何人都可以提供这是为什么的原因吗?或者提出更好的方法来做同样的事情。
我熟悉 Java API 但不熟悉 python 所以我的回答没有经过测试。
方法
ip.getPixels()
正在做我期望的事情并且 returning 所有像素。是否有投资回报率并不影响这一点。您的测量会考虑 ROI,因此均值和众数是根据您设置的 ROI 计算的。
为了解决这个问题,我会裁剪 ip
。应该有一个
ip.crop()
将 return 和 ip
考虑到 ROI 的方法,然后您可以调用
ip.getPixels()
只获取ROI中的像素。
尝试编写脚本,到目前为止我有一个函数,returns 通过阈值得出 ROI。
PA.setRoiManager(roim)
paOpt = PA.CLEAR_WORKSHEET +PA.SHOW_NONE +PA.INCLUDE_HOLES +PA.EXCLUDE_EDGE_PARTICLES + PA.ADD_TO_MANAGER
# measurement options: clear the results, show nothing, include holes, exclude particles on edges and add ROIs to manager
measOpt = PA.AREA + PA.MEAN + PA.MIN_MAX # measure the minimum, maximum, mean and area of particles
pa = PA(paOpt, measOpt, rt, minSize, maxSize)
pa.analyze(imp)
roi_list = roim.getRoisAsArray()
print roi_list[0]
这会向控制台输出:Roi[Traced, x=, y=, width=, height= ] 所以我有信心找到投资回报率。 roim 是 RoiManager 的一个实例。
现在的问题是当我去查看 ROI 内的像素时。
def pixelStats(roiPatch, imp):
'''
get the pixel value distribution for the patch ROI
return the number of Lo pixels and the number of Ld pixels
roi_Patch returns handle to the patch ROI and imp is the
instance of current ImagePlus to be measured
'''
mask = roiPatch.getMask() # mask of roiPatch, do you need this?
ip = imp.getProcessor()
ip.setRoi(roiPatch)
cal = imp.getCalibration()
# options = IS.MEAN | IS.STD_DEV | IS.MODE
stats = IS.getStatistics(ip, M.MEAN | M.MODE | M.STD_DEV, cal) # what does getCalibration do??? stats for ROI only applied to imp, why?
# see the following --> http://fiji.sc/Jython_Scripting#Obtain.2FView_histogram_and_measurements_from_an_image
domThreshold = stats.mode - stats.STD_DEV
backGround = stats.MEAN - stats.STD_DEV
# define the threshold for Lo/Ld phase
pixels = ip.getPixels()
above = filter(lambda i: pixels[i] > backGround, xrange(len(pixels)))
below = filter(lambda i: above[i] < domThreshold, xrange(len(above)))
# calculate the length of the arrays containing pixels of Lo/Ld phase
return len(above), len(below), len(pixels)
查看这个 returns 的测量值,我确信 ip.getPixels() 只是从原始图像处理器返回像素,而不仅仅是 ROI。换句话说,我只是得到了原始“矩形”图像中的像素数。
任何人都可以提供这是为什么的原因吗?或者提出更好的方法来做同样的事情。
我熟悉 Java API 但不熟悉 python 所以我的回答没有经过测试。
方法
ip.getPixels()
正在做我期望的事情并且 returning 所有像素。是否有投资回报率并不影响这一点。您的测量会考虑 ROI,因此均值和众数是根据您设置的 ROI 计算的。
为了解决这个问题,我会裁剪 ip
。应该有一个
ip.crop()
将 return 和 ip
考虑到 ROI 的方法,然后您可以调用
ip.getPixels()
只获取ROI中的像素。