Chinaunix首页 | 论坛 | 博客
  • 博客访问: 479574
  • 博文数量: 98
  • 博客积分: 3265
  • 博客等级: 中校
  • 技术积分: 1227
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 00:29
文章分类

全部博文(98)

文章存档

2012年(6)

2011年(83)

2010年(9)

分类: C/C++

2012-06-20 07:58:13

在计算机视觉中,对图像进行二值化恐怕是最常见的操作了。为了检测目标,可能需要对每一帧图像的每一个像素点进行运算。如果能提升二值化的速度,那么,你的算法的效率就会大大的提高。本文,将介绍一种超级快速的图像二值化技术。

要解决的问题:

                

                    3d-space-in-thresholding1.jpg 

 

如图3d-space-in-thresholding1.jpg所示,需要把彩色图像中,

(1)R通道介于(smoevalue1,somevalue2)

(2)G通道介于(somevalue3,somevalue4),

(3)B通道介于(somevalue5,somevalue6)

当图像中某个像素点同时满足上面3个条件时,将该像素点置为白色,否则置为黑色

 

1)常用方法介绍

常用的二值化方法,需要判断每一个通道的值是否在某个范围之内。伪代码如下:

if (redcomponent > somevalue1 &&

    redcomponent < somevalue2 &&

    greencomponent > somevalue3 &&

    greencomponent < somevalue4 &&

    bluecomponent > somevalue5 &&

    bluecomponent < somevalue6)

{

    // 将该像素点置为白色

}

else

{

将该像素点置为黑色

}

 

问题是,每个像素点的判断,需要6次比较操作,太复杂了。

 

2)新方法

方法(1)中,对每一个通道都需要比较两次。为了提高速度,需要减少比较次数。

BGR三个通道,每个通道创建一个大小为256的数组。该数组中的初始值,

例如R通道的数组,其在somevalue1somevalue2,数组中的值是1,其他都是0

G通道的数组,其在somevalue3somevalue4,数组中的值是1,其他都是0

B通道的数组,其在somevalue5somevalue6,数组中的值是1,其他都是0

如图tables.jpg所示:

                                                         

现在,如果要判断某个像素点应该标记为白色还是为黑色,只需要查询数组即可。伪代码如下:

if(table_red[redcomponent] &&

    table_green[greencomponent] &&

    table_blue[bluecomonent])

{

    // 将该像素点置为白色

}

else

{

将该像素点置为黑色

}


如果redcomponent的值介于(smoevalue1,somevalue2),那么table_red[redcomponent]=1,如果不在这个范围,那么table_red[redcomponent]=0.其他两个通道的值,也是同理。所以,如果条件(table_red[redcomponent] && table_green[greencomponent] && table_blue[bluecomonent])成立,就表示满足问题中的那3个条件。

 

3)对方法2的扩展

在方法2中,数组中只保存1或者0,这只需要一个bit ok了,如果上述的数组是int型(假设是32位),那么只是用了一个bit,还有31bit没有是用,那么,其他的31bit都可以表示一种颜色,就可以实现同时处理32种颜色了。

 

4)效率的对比

图像大小(像素点个数)  方法1(ms)   方法2(ms)

73902                    1.278624    0.394651

636000                   5.791450    2.213925

1555200                  13.664513   5.687084

 

通过实验,可以发现,方法2的速度快了300%。如果是用SIMD指令,速度会更快。

总评:典型的空间换时间 简单实用 不错

转自:

阅读(3210) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~