由它可推导出其他色彩空间,分为线性变换空间和非线性变换空间。线性变换空间有YIQ、YUV等空间。由于是有RGB空间线性变换得到,因此具有较小的计算量;典型的非线性空间有HIS、归一化RGB空间等,非线性空间能较好的消除各彩色分量的相关性,适用于图像处理。但由于变换中,有大量的非线性计算过程,使得计算量巨大。
为了提高交通标志提取的速度,满足实时性要求,本文直接使用RGB彩色空间进行图像分割,这种方法不需要空间转换,减少了不必要的线性或非线性计算,极大的提高算法速度。本文通过提取交通禁令标志中的红色信息,将标志的主体轮廓提取出来。
在RGB空间中R、G、B分量易受光照影响,产生色彩失真。但通过实验发现,红色在不同光照情况下三分量的差值在一定范围内保持不变,所以通过经验选取合适的分量差阈值可将图像中的红色信息提取出来。
基于RGB空间模型的交通禁令标志分割算法如下:对于图像中的所有点:
若满足(R-G)>50且(R-B)>50则该点为红色。该算法结构简单,没有涉及乘法运算,极大地减少了计算量。
很容易可以写出算法实现如下:
void CZXPDlg::SignExtract(IplImage* p)
{
int i,j;
char Bcpt,Gcpt,Rcpt; //分别记录每个像素的B、G、R分量
for(i=0;i<p->height;i++) //这两层循环遍历图中的每一个像素,并访问每一个像素的B,G,R分量
for(j=0;j<p->width;j++)
{
Bcpt=p->imageData[i*p->widthStep+j*3];
Gcpt=p->imageData[i*p->widthStep+j*3+1];
Rcpt=p->imageData[i*p->widthStep+j*3+2];
if(Rcpt-Gcpt>50 && Rcpt-Bcpt>50 //(R-G)>50且(R-B)>50则该点为红色,将其保存为黑白图像中的白色点
{
p->imageData[i*p->widthStep+j*3]=255;
p->imageData[i*p->widthStep+j*3+1]=255;
p->imageData[i*p->widthStep+j*3+2]=255;
}
Else //否则视为不属于红色,即不在交通标志以内,则将该像素点保存为白色点
{
p->imageData[i*p->widthStep+j*3]=0;
p->imageData[i*p->widthStep+j*3+1]=0;
p->imageData[i*p->widthStep+j*3+2]=0;
}
}
}
实验用图及分割效果如图 4 所示:
图4 交通标志图及分割结果
3.2 canny边缘检测
3.2.1 Canny算法
Canny是边缘检测中应用最为广泛,也是效果最为让人满意的算法之一。其检测步骤可以描述为:
(1)降噪
任何边缘检测算法都不可能在未经处理的原始数据上很好地工作,所以第一步是对原始数据与高斯 mask 作卷积,得到的图像与原始图像相比有些轻微的模糊(blurred)。这样,单独的一个像素噪声在经过高斯平滑的图像上变得几乎没有影响。 基于Hough变换的静态交通标志检测方法研究(6):http://www.751com.cn/jisuanji/lunwen_7819.html