python - regionprops 的 mean_intensity 属性根据 threshold_local 方法中指定的 block_size 返回不同的值
问题描述
我认为这只是一个初学者的错误,因为我使用 python 3.6.x 大约三个月,而使用 scikit-image 的时间还不到那个时间。任何帮助将不胜感激。
问题是regionprops的mean_intensity属性根据threshold_local方法中指定的block_size返回不同的值,这里设置为33。
我对 regionprops 的理解是 mean_intensity 将根据原始输入图像进行计算。如果是这种情况,那么为什么 mean_intensity 值会随着 threshold_local 计算的阈值的变化而变化。
输入是以下 uint16 灰度 .tif 图像:slice 1.tif。这是我正在使用的代码:
from skimage import io
from skimage import morphology
from skimage.filters import threshold_local
from skimage.measure import label, regionprops
from numpy import flip
from pandas import DataFrame
def start():
while True:
us_input = input(
"Please enter the name of the file you'd like to analyze.\n> "
)
try:
im = io.imread(us_input)
break
except FileNotFoundError:
print("That file doesn't seem to exist or has been entered incorrectly.")
detect(im)
def detect(image):
local_thresh = threshold_local(image, 33, offset=30)
binary_im = image > local_thresh
label_im = label(binary_im)
interest_im = morphology.remove_small_objects(label_im, min_size=14.7) # ignore objects below 5um
label_interest_im = label(interest_im)
props(label_interest_im, image)
def props(label_interest_im, image):
results = []
im_props = regionprops(label_interest_im, intensity_image=image, cache=False)
for blob in im_props:
properties = []
yx_coords = blob.centroid
xy_coords = flip(yx_coords, 0)
real_xy_coords = (xy_coords / .769230769230769) # pixel to um conversion
round_xy_coords = real_xy_coords.round(1)
properties.append(round_xy_coords[0])
properties.append(round_xy_coords[1])
properties.append(blob.mean_intensity.round(2))
results.append(properties)
results = DataFrame(results, columns = ['x_coord', 'y_coord', 'mean_intensity'])
results.index = results.index + 1
print(results)
start()
解决方案
平均强度通过根据标签图像中的区域找到原始图像中的平均强度来工作。这些区域将根据您的阈值而改变。为了清楚地理解,我建议,对于每个threshold_local
窗口大小,看看生成的标记对象。(您可以使用skimage.color.label2rgb
。)您会看到它们是不同的,因此它们给出不同的平均强度值也就不足为奇了。
推荐阅读
- php - 如何在数组 laravel 中验证电子邮件
- python-3.x - 我正在尝试使用 django 频道,但它不断抛出错误
- android - 使用文件资源管理器看不到我的应用程序的内部存储
- html - 在 IE 中,这个 :not(:nth-child():nth-last-child()) 声明不起作用
- node.js - 如何从节点应用程序对 Intuit QuickBooks API 进行简单的 API 调用?
- javascript - onhover 默认情况下第一个 div 在 js 中处于活动状态
- python - 元组列表的随机抽样
- python - 如何在 Pandas 中找到几个月之间的固定日期间隔?
- java - 如何从 Android 中的 SimilarityClassifier.Recognition 中找出图像解码字符串?
- asp.net-core-mvc - 在 skoruba 项目中,任何客户都可以访问注册页面