首页 > 解决方案 > 切片超像素的平均颜色

问题描述

我想使用切片超像素分割图像,然后用所述超像素的平均颜色替换超像素的原始颜色。

import numpy as np
import matplotlib.pyplot as plt
from skimage import io
from skimage.segmentation import slic, mark_boundaries
from skimage.data import astronaut
from skimage.measure import regionprops

img = astronaut()
segments = slic(img, n_segments=512, compactness=10,
            multichannel=True,
            enforce_connectivity=True,
            convert2lab=True)
regions = regionprops(segments, intensity_image=img)

我得到错误ValueError: Label and intensity image must have thesame shape. Segments shape is (512,512) 和 img shape in (512,512,3)。regionprops在我的情况下正确使用什么?

标签: pythonimage-processingscikit-imagesuperpixels

解决方案


我遵循了已接受答案的第一个建议。我的代码的工作版本:

import matplotlib.pyplot as plt
from skimage.segmentation import slic
from skimage.data import astronaut
from skimage.measure import regionprops

def paint_region_with_avg_intensity(rp, mi, channel):
    for i in range(rp.shape[0]):
        img[rp[i][0]][rp[i][1]][channel] = mi

img = astronaut()
segments = slic(img, n_segments=512, compactness=10,
            multichannel=True,
            enforce_connectivity=True,
            convert2lab=True)

for i in range(3):
    regions = regionprops(segments, intensity_image=img[:,:,i])
    for r in regions:
        paint_region_with_avg_intensity(r.coords, int(r.mean_intensity), i)

plt.imshow(img)
plt.show()

在此处输入图像描述


推荐阅读