gpt4 book ai didi

opencv - 通过能量驱动采样(SEEDS)提取的超像素

转载 作者:太空宇宙 更新时间:2023-11-03 21:56:05 28 4
gpt4 key购买 nike

我对通过能量驱动采样(SEEDS)提取的超像素感兴趣,这是一种使用超像素进行图像分割的方法。这也是OpenCV用于创建超像素的工具。我在查找SEEDS算法背后的文档时遇到了麻烦。 OpenCV提供了一个非常笼统的描述,可以在here中找到。

我正在寻找关于SEEDS如何运行的更深入的描述(一般性演练或数学解释)。关于算法的任何链接或想法将不胜感激!我似乎找不到任何好的 Material 。谢谢!

最佳答案

我将首先浏览一些常规链接和资源,然后尝试描述该算法的一般概念。

SEEDS实现:

您显然已经看过文档here。可以在以下位置找到OpenCV的SEEDS实现的用法示例:Itseez/opencv_contrib/modules/ximgproc/samples/seeds.cpp,它允许调整超像素的数量,水平的数量和其他实时参数-因此,在阅读了SEEDS的思想之后,您一定应该尝试该示例。可以在GitHub上找到原始的实现以及修订的实现(这是我的本科论文的一部分):davidstutz/superpixels-revisited/lib_seedsdavidstutz/seeds-revised。不过,实现应该相当可比。

发布和其他资源:

该论文在arxiv上发布:arxiv.org/abs/1309.3848。我的网站davidstutz.de/efficient-high-quality-superpixels-seeds-revised上有一个简短的描述(可能更容易理解)。所提供的算法描述应易于遵循,并且在最佳情况下应允许实现SEEDS(请参阅本文的“算法”部分)。更精确的描述也可以在我的bachelor thesis中找到,尤其是在3.1节中。

概述:

请注意,此说明是基于上述文章和我的学士论文。两者都提供了数学上简洁的描述。

给定一张图像的宽度为W和高度为H的图像,SEEDS首先将像素分组为w x h大小的块。这些块进一步排列为2 x 2组。对L级别重复此方案(这是级别数参数)。因此,在l级别上,您有大小的块

w*2^(l - 1) x h*2^(l - 1).

超像素的数量由 L级别的块确定,即,让 w_Lh_L表示 L级别的块的宽度和高度,超像素的数量为
S = W/w_L * H/h_L

在这里我们使用整数除法。

现在通过在相邻的超像素之间交换像素块和单个像素来迭代地完善初始的超像素分割。为此,将计算超像素和所有块的颜色直方图(直方图由实现中的bins参数数量确定)。通过查看超像素的直方图只是其组成的 2 x 2块的直方图的总和,而其中一个块的直方图是 2 x 2底层块的直方图的总和,可以有效地完成此操作。上)。因此,让 h_i为属于超像素 j的像素块的直方图,而 h_j为该超像素的直方图。然后,通过 jj的直方图相交来计算 h_i块与超像素 h_j的相似度(有关公式,请参见上面的资源之一)。类似地,像素和超像素的相似性是像素颜色与超像素平均颜色的欧几里得距离(这是性能更好的选择),或者是像素颜色属于超像素的概率(简单地归一化)在像素颜色处输入超像素直方图)。在这种背景下,该算法可以总结如下:
initialize block hierarchy and the initial superpixel segmentation
for l = L - 1 to 1 // go through all levels
// for level l = L these are the initial superpixels
for each block in level l
initialize the color histogram of this block
// as described this is done using the histograms of the level below
// now we start exchanging blocks between superpixels
for l = L - 1 to 1
for each block at level l
if the block lies at the border to a superpixel it does not belong to
compute the histogram intersection with both superpixels
assign the block to the superpixel with the highest intersection
// now we exchange individual pixels between superpixels
for all pixels
if the pixel lies at the border to a superpixel it does not belong to
compute the Euclidean distance of the pixel to both superpixel's mean color
assign the pixel to the closest superpixel

实际上,块更新和像素更新的迭代次数大于迭代次数(这是迭代次数参数),并且通常每级完成两倍的迭代次数(这是双步参数)。在原始分割中,根据 whL和图像大小计算超像素数。在OpenCV中,使用上述公式,从所需的超像素数量和级别数量(由相应参数确定)计算 wh

一个参数尚不清楚:先验者试图强制实现平滑边界。实际上,这是通过考虑将要更新的像素周围的 3 x 3邻域来完成的。如果该邻域中的大多数像素都属于superpixel j,则要更新的像素也更有可能属于superpixel j(反之亦然)。在OpenCV的情况下,OpenCV的实现以及我的实现(已修订SEEDS)都可以考虑使用 k x k与更大的邻域 k in {0,...,5}

关于opencv - 通过能量驱动采样(SEEDS)提取的超像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36672019/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com