如何解决如何在 Python 中的二进制图像上使用 skimage.measure.regionprops 按面积或离心率过滤
我有一张路面的二进制图像,我只想隔离坑洼。使用 skimage.measure.regionprops 和 skimage.measure.label 我可以为图像中的不同标签生成一个属性表。
然后如何使用这些值进行过滤? - 例如,使用面积或轴长或偏心率来关闭某些标签。 Input,labled Image and properties table
使用 python 3
解决方法
我会使用 pandas 和 skimage.measure.regionprops_table
来得到你想要的:
import pandas as pd
import imageio as iio
from skimage.measure import regionprops_table,label
image = np.asarray(iio.imread('path/to/image.png'))
labeled = label(image > 0) # ensure input is binary
data = regionprops_table(
labeled,properties=('label','eccentricity'),)
table = pd.DataFrame(data)
table_sorted_by_ecc = table.sort_values(
by='eccentricity',ascending=False
)
# print e.g. the 10 most eccentric labels
print(table_sorted.iloc[:10])
如果你想例如用only最古怪的标签生成标签图像,你可以这样做:
eccentric_label = table['labels'].iloc[np.argmax(table['eccentricity'])]
labeled_ecc = np.where(labeled == eccentric_label,eccentric_label,0)
你还可以做更复杂的事情,例如制作一个标签图像,只有高于一定偏心率的标签。下面,我们使用 NumPy 元素乘法来生成一个数组,如果该标签具有高离心率,则该数组是原始标签,否则为 0。然后,我们再次使用 skimage.util.map_array
函数将原始标签映射到它们自身或 0,这取决于离心率。
from skimage.util import map_array
ecc_threshold = 0.3
eccentric_labels = table['labels'] * (table['eccentricity'] > ecc_threshold)
new_labels = map_array(
labeled,np.asarray(table['labels']),np.asarray(eccentric_labels),)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。