您的位置:首页 > 运维架构

opencv学习系列(二)---颜色识别

2015-01-10 11:37 651 查看
1.利用RGB颜色模型进行颜色识别



核心代码是下面的部分:





2.利用HSI颜色模型进行颜色识别

HSI模型是美国色彩学家孟塞尔(H.A.Munseu)于1915年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。

色调H(Hue): 与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定范围的颜色,如暖色、冷色等。

饱和度S(Saturation): 表示颜色的纯度,纯光谱色是完全饱和的,加入白光会稀释饱和度。饱和度越大,颜色看起来就会越鲜艳,反之亦然。

强度I(Intensity): 对应成像亮度和图像灰度,是颜色的明亮程度。

HSI模型的建立基于两个重要的事实: ① I分量与图像的彩色信息无关;② H和S分量与人感受颜色的方式是紧密相联的。这些特点使得HSI模型非常适合彩色特性检测与分析。

RGB单位立方体沿主对角线进行投影,可得到图9-4(a)所示的六边形,这样,原来沿主对角线的灰色都投影到中心白色点,而红色点(1,0,0)则位于右边的角上,绿色点(0,1,0)位于左上角,蓝色点(0,0,1) 则位于左下角。

是HSI颜色模型的双六棱锥表示,I是强度轴,色调H的角度范围为[0,2π],其中,纯红色的角度为0,纯绿色的角度为2π/3,纯蓝色的角度为4π/3。饱和度S是颜色空间任一点距I轴的距离。当然,若用圆表示RGB模型的投影,则HSI色度空间为双圆锥3D表示。



带来的好处:
1.在处理彩色图像时,可仅对I分量进行处理,结果不改变原图像中的彩色种类;

2.HSI模型完全反映了人感知颜色的基本属性,与人感知颜色的结果一一对应,因此,HSI模型被广泛应用于人的视觉系统感知演的的图像表示和处理系统中。

转换公式:






贴出一段代码:

inline double* colordetect::rgb2hsi( double rgb[3] ){
    double* hsi = new double[3], theta;

    double r = rgb[0] / 255.0;
    double g = rgb[1] / 255.0;
    double b = rgb[2] / 255.0;

    if(( r == 0) &&( g == 0 )& (b == 0) )
        hsi[2] = hsi[1] = hsi[0] = 0;
    else{
        theta = 0.5 * ((r-g) + (r-b)) / sqrt((r-g)*(r-g) + (r-b)*(g-b));
        theta = ((theta > 1) ? 1 : theta);
        theta = ((theta < -1) ? -1 : theta);
        if( b <= g )
            hsi[0] = acos( theta ) / (2 * PI);
        else
            hsi[0] = 1 - acos( theta ) / (2 * PI);
        hsi[1] = 1 - 3.0 * MIN( MIN(r,g), b ) / ( r + g + b );
        hsi[2] = ( r + g + b ) / 3.0;

        hsi[1] = ( (hsi[1] < 0) ? 0 : hsi[1] );
        hsi[0] = ( (hsi[1] == 0) ? 0 : hsi[0] );
        hsi[2] = ( (hsi[2] < 0) ? 0 : hsi[2] );
    }
    return hsi;
}


流程图:



核心代码:





具体代码参照博客http://blog.csdn.net/ycc892009/article/details/6516628
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: