一种快速图像阈值处理技术

                                          一种快速图像阈值处理技术

在机器视觉中,阈值处理可能是最基本的一种图像处理。阈值处理需要遍历每一帧的每一个像素以达到检测物体的目的。如果我们能够使这种遍历更加快速,那么CPU将有更多的时间处理其他任务。这篇文章将介绍一种快速阈值处理技术--减少遍历时间的方法。

常规方法:

阈值处理的常规方法中,我们遍历每一个通道的每一个像素值是否处于一定范围内。伪代码如下:

if (redcomponent > somevalue1 &&

    redcomponent < somevalue2 &&

    greencomponent > somevalue3 &&

    greencomponent < somevalue4 &&

    bluecomponent > somevalue5 &&

    bluecomponent < somevalue6)

{

    // Do something (like mark it as white)

}

这种方法的缺陷是:它进行了六次比较----太多了。另一个缺陷是分子太多了,需要处理器经常跳转处理分支。如下图所示,表示的是RGB三通道进行比较的常规方法:

 

新方法:

之前的方法主要问题是对每一个通道进行了两次比较。但是每一次比较总是固定的数值进行比较。比如,对于红色通道而言,比较范围总是从value1到value2。因此,我们有如下方法:

我们可以创建一个拥有256个元素的数组或查找表。把value1到value2的范围设置为1,其他index的值设置为0,类似的,其他两个通道也是可以这样处理的。如下图所示:

 现在,假设需要判断某一个像素的灰度值大小是否在某一范围内,我们可以使用如下伪代码表示:

if(table_red[redcomponent] &&
    table_green[greencomponent] &&
    table_blue[bluecomonent])
{
    // do something
}

假如红色通道的某一像素灰度值在value1到value2之间,table的值将为1,否则为0.类似的,其他两个通道也是这样处理。如果颜色在正确的范围内,判断条件总为真。因此,你可以把相应的像素做任何你想做的事。

很简单不是。典型的空间换时间的方法。在OpenCV中已经使用了这种技术,并利用相应的处理器指令提高阈值处理速度了。其他领域可以借鉴下。

实验结果:

使用常规方和OpenCV所使用的新方法,对比结果如下:

Image size (pixels) Standard (ms) Super fast method (ms)
73902 1.278624 0.394651
636000 5.791450 2.213925
1555200 13.664513 5.687084

 从对比结果可以看出来,新方法将近有300%的的提速。

参考资料:

super fast thresholding technique

猜你喜欢

转载自blog.csdn.net/lz0499/article/details/82077995
今日推荐