使用自适应阈值分割图像

时间:2014-05-28 02:05:22

标签: image-processing image-segmentation adaptive-threshold

我已经对使用全局阈值保持和自适应阈值保持的分割之间的区别进行了一些研究,这是我的理解......

注意:假设一个16位灰度图像

全局阈值保持:定义像素值0-65535。扫描图像,使每个值低于阈值黑色,否则,使其变为白色。

自适应阈值保持:为每个像素定义阈值保持,然后确定是将其设置为白色还是黑色。

我的问题是:对于自适应阈值保持,我如何确定每个像素的阈值是什么?

编辑:enter image description here

所以看一下这个图,N就是图像中的像素数。 Theta代表thresh-hold。我不知道while循环条件是什么...我不知道while循环中的内容是什么,但我知道如何计算它。

1 个答案:

答案 0 :(得分:2)

如果您正在寻找简单的自适应阈值处理,那么您有2个参数:

  • C - 标准函数 - 均值,中位数,最大值,最小值或其他
  • WS - 邻域/窗口大小(WS.x,WS.y) - 3X3,5X5等......

现在您需要创建自适应阈值的图像 - AT。 生成AT - 对于整个图像,您可以根据标准应用过滤。 对于每个像素p-AT(p)=当地邻域的中值/平均值等等:

 [(p-WS.x, p-WS.y), (p+WS.x, p+WS.y)]

如果标准是中位数 - 它是中值滤波器(非线性) -

 AT = medfilter (IM, WS)

否则,如果标准是平均值 - 使用内核的平均过滤器(线性)(平均内核)

 AV = createAverageKernel (WS) 

 AT = IM * AV  ("*" is a convolution)

对于任何其他类型的标准,可能会有一个特殊的过滤器

然后,您可以使用AT。

应用图像IM的阈值处理
 B_IM (p) = (IM (p) > AT (p)) ? 1 : 0

对于问题中的自适应阈值算法 - 它是一种基于直方图的迭代算法来计算阈值。 但是,直方图可以应用于整个图像(全局),也可以应用于像素的邻域(本地)。 因此,该算法可以应用于全局或本地。所以在你的情况下,这是标准函数。它只是一个更复杂的功能,然后是媒体,意思等。

对于算法: 首先,您使用统一值初始化theta(阈值) - 直方图的加权平均值。 条件 - 你迭代直到前一个阈值等于当前阈值。 在循环 - 。 定义较低的值和较高的值。较低的值是直方图部分的加权平均值,其低于当前阈值,并且以类似的方式表示较高的值。 当前theta值是低加权平均值和高加权平均值之间的平均值