如何计算scikit-image中超像素的平均颜色

use*_*726 2 python image-processing computer-vision scikit-image superpixels

我使用scikit图像库中的quickshift方法对我的图像进行了分割.如何计算超像素的平均颜色和面积?如何解释quickshift()方法的返回值?文档说返回值是"指示段标签的整数掩码",但这对我来说并不清楚.如何在原始图像的形状中制作一个布尔数组,其中包含特定超像素存在的布尔数组,在此演示文稿中,我的生活会更容易(我曾经在OpenCV中使用过这种类型的蒙版).你能帮帮我吗?我的代码(来自scikit-image网站的简化示例):

from skimage.data import astronaut
from skimage.segmentation import felzenszwalb, slic, quickshift
from skimage.segmentation import mark_boundaries
from skimage.util import img_as_float

img = img_as_float(astronaut()[::2, ::2])
segments_quick = quickshift(img, kernel_size=3, max_dist=6, ratio=0.5)

print("Quickshift number of segments: %d" % len(np.unique(segments_quick)))
plt.imshow(mark_boundaries(img, segments_quick))

plt.show()
Run Code Online (Sandbox Code Playgroud)

Ste*_*alt 8

skimage.measure.regionprops函数返回标记区域的属性,包括您感兴趣的区域:平均值和面积.您可以按如下方式使用它:

from skimage import measure
regions = measure.regionprops(segments_quick, intensity_image=img)
Run Code Online (Sandbox Code Playgroud)

regions是一个列表,每个条目都是一个表示超像素的RegionProperty对象.您可以按如下方式查询区域属性:

print([r.area for r in regions])
print([r.mean_intensity for r in regions])
Run Code Online (Sandbox Code Playgroud)


Kha*_*han 5

这是一个简单、直接和通用的代码,用其超像素的平均值来表示每个像素。

这里标签数组是使用 SLIC 获得的,可以使用任何其他方法来生成标签。

import numpy as np
import cv2
from skimage import segmentation
from skimage.data import astronaut

img=cv2.cvtColor(astronaut(),cv2.COLOR_BGR2RGB)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

label=segmentation.slic(img,compactness=10, n_segments=1000)

def mean_image(image,label):

im_rp=image.reshape((image.shape[0]*image.shape[1],image.shape[2]))
sli_1d=np.reshape(label,-1)    
uni=np.unique(sli_1d)
uu=np.zeros(im_rp.shape)
for i in uni:
    loc=np.where(sli_1d==i)[0]
    #print(loc)
    mm=np.mean(im_rp[loc,:],axis=0)
    uu[loc,:]=mm
oo=np.reshape(uu,[image.shape[0],image.shape[1],image.shape[2]]).astype('uint8')
cv2.imshow('img',oo)
Run Code Online (Sandbox Code Playgroud)
output=mean_image(img,label) # displays the output image.
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 请注意,“label2rgb”也可用于此目的:https://scikit-image.org/docs/0.15.x/api/skimage.color.html#skimage.color.label2rgb (2认同)