Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 基于自适应阈值的图像分割_Image Processing_Image Segmentation_Adaptive Threshold - Fatal编程技术网

Image processing 基于自适应阈值的图像分割

Image processing 基于自适应阈值的图像分割,image-processing,image-segmentation,adaptive-threshold,Image Processing,Image Segmentation,Adaptive Threshold,我已经做了一些关于使用全局阈值保持和自适应阈值保持的分割之间的区别的研究,这里是我的理解 注:假设为16位灰度图像 全局阈值保持:定义像素值0-65535。扫描图像,使thresh hold下的每个值为黑色,否则,使其为白色 自适应阈值保持:为每个像素定义阈值保持,然后确定是将其设置为白色还是黑色 我的问题是:对于自适应阈值保持,如何确定每个像素的阈值 编辑: 看这个图,N是图像中的像素数。θ表示脱粒保持。我不知道while循环的条件是什么。。。我不知道while循环中的内容是什么,但我知道如何

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

注:假设为16位灰度图像

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

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

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

编辑:


看这个图,N是图像中的像素数。θ表示脱粒保持。我不知道while循环的条件是什么。。。我不知道while循环中的内容是什么,但我知道如何计算它。

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

  • 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)]
如果标准为中值-则为中值滤波器(非线性)-

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

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

然后,可以使用AT应用图像IM的阈值

 B_IM (p) = (IM (p) > AT (p)) ? 1 : 0
至于问题中的自适应阈值算法,它是一种基于直方图的迭代算法来计算阈值。 但是,直方图可以应用于整个图像(全局),也可以应用于像素的邻域(局部)。 因此,该算法可以应用于全局或局部。在你的例子中,这是标准函数。它只是一个比媒体、媒体等更复杂的功能

对于算法: 首先,使用均匀值(直方图的加权平均值)初始化θ(阈值)。 While condition-迭代直到前一个阈值等于当前阈值。 在循环中-。 定义下限值和上限值。下限值是低于当前阈值的直方图部分的加权平均值,与上限值类似。
当前θ值是上下加权平均值之间的平均值

Wow,因此显然有多种方法通过自适应阈值实现分割?或者这是唯一的方法。@Clay有很多种方法,这取决于您希望阈值设置的复杂程度或微调程度。阈值分割是图像处理中最复杂的领域之一processing@Clay我刚刚展示了自适应阈值的基本原理,我有一个算法正在实现它,但我不知道它到底在做什么,所以我无法将它转换为代码。如果我把它贴在我的问题上,你能帮我理解它吗?@Clay-幻灯片正在描述。这试图找到一个阈值,在统计意义上最大化两个类之间的类间方差。如果你愿意,我们可以创建一个聊天室,在那里我可以进一步解释算法,但实际上非常简单。
 AV = createAverageKernel (WS) 

 AT = IM * AV  ("*" is a convolution)
 B_IM (p) = (IM (p) > AT (p)) ? 1 : 0