I want to segment an image using slic superpixels and then replace the original colour of a superpixel with the average colour of said superpixel.
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)
I get the errorValueError: Label and intensity image must have thesame shape.
Segments shape is (512,512) and img shape in (512,512,3). What is the correct use of regionprops in my case?
I followed the first recommendation of the accepted answer. Working version of my code :
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With