使用Scikit-image从图像中提取属性

时间:2016-03-11 11:12:08

标签: python machine-learning computer-vision scikit-learn scikit-image

我一直在使用scikit-image对道路功能进行分类并获得一些成功。见下文:image processed by scikit-image。我无法进行下一步,即对功能进行分类。例如,我们假设这些功能位于框(600,800)和(1400,600)中。

我用来提取信息的代码是:

from skimage import io, segmentation as seg
color_image = io.imread(img)  
plt.rcParams['image.cmap'] = 'spectral'
labels = seg.slic(color_image, n_segments=6, compactness=4)

目标是以下列形式提供表格:

Image, feature_type, starting_pixel, ending_pixel
001    a             (600, 600),     (1300, 700) 
002    b             (600, 600),     (1100, 700)
002    undefined     (700, 700),     (900, 800)

feature_type将基于颜色,理想情况下肩膀将是一种颜色,树木和刷子将是另一种颜色等。

如何提取我需要的数据? (即:scikit将图像分成不同的组件,我知道每个组件的位置。然后我可以将每个组件传递给一个分类器,它将识别每个组件的内容)谢谢!

1 个答案:

答案 0 :(得分:1)

这是我第一次尝试这个套餐.. 我尝试使用更简单的图像,我或多或少得到了正确的结果:

smallimg.jpg

from skimage import io, segmentation as seg
import matplotlib as plt
import numpy as np
color_image = io.imread('smallimg.jpg')
labels = seg.slic(color_image, n_segments=4, compactness=4)
for section in np.unique(labels):
    rows, cols = np.where(labels == section)
    print("Image="+str(section))
    print("Top-Left pixel = {},{}".format(min(rows), min(cols)))
    print("Bottom-Right pixel = {},{}".format(max(rows), max(cols)))
    print("---")

输出:

Image=0
Top-Left pixel = 3,1
Bottom-Right pixel = 15,18
---
Image=1
Top-Left pixel = 26,1
Bottom-Right pixel = 34,18
---
Image=2
Top-Left pixel = 43,1
Bottom-Right pixel = 52,16
---
Image=3
Top-Left pixel = 0,0
Bottom-Right pixel = 59,19
---

请注意,由于渐变,最右边的像素并不是我的意思。最后一段是白色背景。

我尝试使用您的图片,但我认为您必须正确分割。如果你想获得6张图像+背景,我会使用n_segments = 7。

我还在文档中看到有关紧凑性的内容:"此参数在很大程度上取决于图像对比度和图像中对象的形状。"。所以你想要的东西可能很难实现。

如果您要在上面显示的图像上绘制六张图片,为什么在绘制图片时没有获得这些坐标而不是将分割应用于最终结果?