skimage.measure.regionprops 标签的相应测量值?

Posted

技术标签:

【中文标题】skimage.measure.regionprops 标签的相应测量值?【英文标题】:skimage.measure.regionprops labels' corresponding measurements? 【发布时间】:2022-01-07 13:11:20 【问题描述】:

使用 scikit 库,我正在分析缺陷的面积和平均直径。这是代码和各自的分段区域。

import cv2
import numpy as np
from matplotlib import pyplot as plt
from skimage import measure, io, img_as_ubyte
from skimage.color import label2rgb, rgb2gray


img = cv2.imread("F:\py_image_pro\pore.jpg", 0)

scale = 0.086 #1 pixel in microns

from skimage.filters import threshold_otsu
threshold = threshold_otsu(img)

thresholded_img = img < threshold
#plt.imshow(thresholded_img, cmap='gray')
#plt.show()
from skimage.segmentation import clear_border
edge_touching_removed = clear_border(thresholded_img)

label_image = measure.label(edge_touching_removed, connectivity=img.ndim)
#plt.imshow(label_image)
#plt.show()

image_label_overlay = label2rgb(label_image, image=img)
plt.imshow(image_label_overlay)
plt.show()

props = measure.regionprops_table(label_image, img, properties=['label', 'area', 'equivalent_diameter', 'mean_intensity', 'solidity'])

import pandas as pd
df = pd.DataFrame(props)


df = df[df['area'] > 20]

df['area_in_microns'] = df['area'] * (scale**2)
df['equivalent_diameter_microns'] = df['equivalent_diameter'] * (scale)
print(df.head())

使用 regionprops 来测量分割区域。 Segmented image 我想知道是否有任何方法可以在输出图像中显示标签,以便知道分段标签的相应测量值?

【问题讨论】:

【参考方案1】:

您是否在问是否可以在图像顶部显示测量值的颜色映射版本?如果是这样,答案是肯定的!您可以为此使用skimage.util.map_array

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from skimage import (
        color, data, filters, measure,
        morphology, segmentation, util
        )

# grab the image
coins = data.coins()

# segment the image; from:
# https://scikit-image.org/docs/dev/auto_examples/segmentation/plot_expand_labels.html
edges = filters.farid(coins)
markers = np.zeros_like(coins)
markers[coins < 30] = 1
markers[coins > 150] = 2
watershed = segmentation.watershed(edges, markers)
segmented_raw = measure.label(watershed == 2)
# remove tiny background objects due to noise
segmented = morphology.remove_small_objects(segmented_raw, 64)

# measure regionprops
table = pd.DataFrame(measure.regionprops_table(
        segmented, coins, properties=('label', 'area')
        ))

# map the labels to measured properties
colored_by_area = util.map_array(
        segmented,
        np.asarray(table['label']),
        np.asarray(table['area']).astype(float),
        )
# set 0 to nan, so it appears as transparent in pyplot.imshow
colored_by_area[colored_by_area==0] = np.nan

# display the results
fig, axes = plt.subplots(1, 2, sharex=True, sharey=True)
colored_by_label = color.label2rgb(segmented, image=coins, bg_label=0)
axes[0].imshow(colored_by_label)
axes[0].set_axis_off()
axes[0].set_title('segmentation')
axes[1].imshow(coins, cmap='gray')
axim = axes[1].imshow(colored_by_area, cmap='viridis')
axes[1].set_axis_off()
axes[1].set_title('segment area')
plt.colorbar(axim, ax=axes[1], fraction=0.05, label='area (px)')

plt.show()

【讨论】:

以上是关于skimage.measure.regionprops 标签的相应测量值?的主要内容,如果未能解决你的问题,请参考以下文章