南三环做网站的公司,齐诺网站建设,让网站不要保存密码怎么做,举例一个成功的网络营销案例OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】173.SEEDS 超像素区域分割 5.4 SEEDS 超像素区域分割
超像素个体应在视觉上一致#xff0c;特别是颜色应尽可能均匀。SLIC 使用欧几里德距离来度量像素点的相似度#xff0c;不能反映颜色的方差。
SEED…OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】173.SEEDS 超像素区域分割 5.4 SEEDS 超像素区域分割
超像素个体应在视觉上一致特别是颜色应尽可能均匀。SLIC 使用欧几里德距离来度量像素点的相似度不能反映颜色的方差。
SEEDS 方法定义了一个基于超像素颜色分布直方图和超像素边界的形状的能量函数 E(s)使用爬山法最大化能量函数进行优化。 E(s)H(s)γG(s)E(s) H(s) \gamma G(s) E(s)H(s)γG(s) 其中H(s) 是颜色分布项G(s) 是边界项。
颜色分布项基于概率密度分布直方图使用熵值度量区域颜色的均匀性以获得更多的全局信息边界项在像素的邻域内统计超像素种类数量的概率密度分布使用熵值度量区域种类的均匀性有利于生成边缘平滑的超像素。
SEEDS 每次迭代只对处于超像素边界的像素点进行更新通过能量函数的值来决定这个像素点是否转移到相邻的超像素块内。
SEEDS 使用爬山法来贪心地进行更新状态算法时间复杂度为 O(n)可以在线性的时间复杂度内完成速度比 SLIC 快。
算法的基本流程为
1初始化超像素以相同间隔设置 Superpixel 或 Seeds计算初始的能量函数 E(St)E(S_t)E(St)。 2更新能量函数对边界上的每一个像素计算移动后新的能量函数 E(S)E(S)E(S)如果能量函数增大则进行移动。 3迭代更新直到达到次数上限就得到最终的分割结果。 例程 11.30 SEEDS 超像素区域分割
OpenCV 在 ximgproc 模块提供了 cv.ximgproc.createSuperpixelSEEDS 函数可以实现 SEEDS 算法。
函数说明
cv.ximgproc.createSuperpixelSEEDS(image_width, image_height, image_channels, num_superpixels, num_levels[, prior[, histogram_bins[, double_step]]]) → retval该函数初始化输入图像的 SuperpixelSEEDS 对象初始状态是一个在图像高度和宽度上均匀分布的网格。
参数说明
image_width输入图像的宽度像素数image_height输入图像的高度像素数image_channels输入图像的通道数num_superpixels期望的超像素数量num_levels块级别的数量级别越高分割越准确但消耗内存和 CPU 时间大prior平滑参数取值范围 [0,5]值越大则越平滑histogram_bins直方图分组数量double_stepTrue 表示对每个块级别迭代两次以获得更高的精度 # 11.30 SEEDS 超像素区域分割# 注意本例程需要 opencv-contrib-python 包的支持img cv2.imread(../images/imgLena.tif, flags1) # 读取彩色图像(BGR)imgHSV cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL) # BGR-HSV 转换# SLIC 算法slic cv2.ximgproc.createSuperpixelSLIC(img, region_size20, ruler10.0) # 初始化 SLICslic.iterate(10) # 迭代次数越大效果越好mask_slic slic.getLabelContourMask() # 获取 Mask超像素边缘 Mask1img_slic cv2.bitwise_and(img, img, maskcv2.bitwise_not(mask_slic)) # 在原图上绘制超像素边界# SEEDS 算法注意图片长宽的顺序为 w, h, cseeds cv2.ximgproc.createSuperpixelSEEDS(img.shape[1], img.shape[0], img.shape[2], 2000, 15, 3, 5, True)seeds.iterate(imgHSV, 10) # 输入图像大小必须与初始化形状相同迭代次数为10mask_seeds seeds.getLabelContourMask() # 获取 Mask超像素边缘 Mask1label_seeds seeds.getLabels() # 获取超像素标签number_seeds seeds.getNumberOfSuperpixels() # 获取超像素数目img_seeds cv2.bitwise_and(img, img, maskcv2.bitwise_not(mask_seeds))plt.figure(figsize(9, 7))plt.subplot(221), plt.axis(off), plt.title(Origin image)plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) # 显示 img(RGB)plt.subplot(222), plt.axis(off), plt.title(SEEDS mask)plt.imshow(mask_seeds, gray)plt.subplot(223), plt.axis(off), plt.title(SLIC image)plt.imshow(cv2.cvtColor(img_slic, cv2.COLOR_BGR2RGB))plt.subplot(224), plt.axis(off), plt.title(SEEDS image)plt.imshow(cv2.cvtColor(img_seeds, cv2.COLOR_BGR2RGB))plt.tight_layout()plt.show()本节完 版权声明
OpenCV 例程200篇 总目录-202205更新 youcansxupt 原创作品转载必须标注原文链接(https://blog.csdn.net/youcans/article/details/124576698)
Copyright 2022 youcans, XUPT Crated2022-5-4 欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列持续更新中 【youcans 的 OpenCV 例程200篇】171.SLIC 超像素区域分割 【youcans 的 OpenCV 例程200篇】172.SLIC 超像素区域分割算法比较 【youcans 的 OpenCV 例程200篇】173.SEEDS 超像素区域分割 【youcans 的 OpenCV 例程200篇】174.LSC 超像素区域分割 【youcans 的 OpenCV 例程200篇】175.超像素区域分割方法比较 更多内容请见 【OpenCV 例程200篇 总目录-202206更新】