【发布时间】:2019-11-24 03:24:38
【问题描述】:
我用opencv和skimage在同一张图片上运行SLIC(Simple Linear Iterative Clustering)超像素算法,但得到的结果不同,skimage slic结果更好,如下图所示。第一个是opencv SLIC,第二个是skimage SLIC。我有几个问题希望有人能提供帮助。
- 为什么 opencv 有参数 'region_size' 而 skimage 是 'n_segments'?
- 是否需要转换为 LAB 和高斯模糊?
- 有什么技巧可以优化 opecv SLIC 结果吗?
====================================
- OpenCV SLIC
- Skimage SLIC
# Opencv
src = cv2.imread('pic.jpg') #read image
# gaussian blur
src = cv2.GaussianBlur(src,(5,5),0)
# Convert to LAB
src_lab = cv.cvtColor(src,cv.COLOR_BGR2LAB) # convert to LAB
# SLIC
cv_slic = ximg.createSuperpixelSLIC(src_lab,algorithm = ximg.SLICO,
region_size = 32)
cv_slic.iterate()
# Skimage
src = io.imread('pic.jpg')
sk_slic = skimage.segmentation.slic(src,n_segments = 256, sigma = 5)
使用以下代码生成的具有超像素质心的图像
# Measure properties of labeled image regions
regions = regionprops(labels)
# Scatter centroid of each superpixel
plt.scatter([x.centroid[1] for x in regions], [y.centroid[0] for y in regions],c = 'red')
但是少了一个超像素(左上角),我发现
len(regions) 是 64 而len(np.unique(labels)) 是 65,为什么?
【问题讨论】:
-
你能分享你的完整代码吗?
标签: python opencv scikit-image