如何在图像中找到形态组件?

3
我正在寻找一个Python函数,可以提供图像的形态组分。也就是说,该函数将返回一种度量方式,其中图像的每个像素都被替换为表示该像素所在的连通前景图像组件的整数索引。类似于这样:

enter image description here

Ideally我可以计算每个组件的属性,例如平均颜色、面积和标准偏差。
参考资料:

这与超像素和max树有关。这里是一篇最近关于Python max-trees工具箱的论文 - Cris Luengo
2个回答

2
您正在寻找的是超像素算法。这些算法通常通过对图像执行一些聚类来工作,其中颜色和位置都是聚类过程中使用的特征。据我所知,SLIC是最流行的超像素算法,但我可能在这方面有误解。
Slic(以及其他超像素算法)已经实现在SciKit Image中,并且他们有一个教程,其中他们比较了不同的超像素算法here
以下是一个快速脚本,演示如何使用SciKit Image中的SLIC算法。
from skimage.segmentation import slic 
from skimage.data import astronaut 
import matplotlib.pyplot as plt  

image = astronaut()                                           
superpixels = slic(image, n_segments=200) # n_segments is approximate 

# Plot the figure                                                    
plt.figure()                                                 
plt.subplot(121)                                             
plt.imshow(image) 
plt.title('Original image') 
ax = plt.subplot(122)       
plt.imshow(superpixels)    
plt.title('Superpixels') 
plt.colorbar()                
plt.show() 

这是输出结果。 上面脚本的输出图像 编辑:有些人报告说,在图像上多次使用超像素,将每个超像素的颜色设置为它们的平均值(也许还包括一些纹理特征,如标准差),可以得到良好的结果。
编辑2:这是SciKit Image比较的图像 超像素算法比较

-1
问题在于定义具有字典列表的区域: 每次遇到另一个RGB值时,您可以将其作为键注册,并将xy作为具有相同颜色像素值的列表。
最大的问题是将具有地理不同区域的相同组颜色分割开来。 您需要迭代以测试邻近颜色 以了解是否为同一组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接