本帖最后由 wukong714126 于 2011-03-14 14:49:39 编辑

解决方案 »

  1.   

    看看opencv吧,转换成伪彩色用cvCvtColor函数即可实现
      

  2.   


    if ((*igreen)!=0){
    lpdest[n] =(unsigned char)((*ired)/(*igreen));
    如果像素的绿色分量g不是0,lpdest[n]就变成r/g;可见lpdest[n]是一个表示像素特征的数组。// lpdest[n] = (unsigned char)(0.299*(*ired)+0.587*(*igreen)+0.114*(*iblack));
    这句不知为什么注释掉了,lpdest看来又是存储像素灰度值的数组;如果说r/g存储为灰度值数组中,那么这个除法又有什么意义呢?
    if((lpdest[n])<=10&&((*ired)+(*igreen)>=400))
    {
    *ired=255;///////////////////这里都是做什么的?
    *igreen=0;
    *iblack=0;
    }
    else
    {
    *ired=0;
    *igreen=0;
    *iblack=0;
    }这里的所谓伪色彩处理:像素“特征值”lpdest[n]满足(r/g<10 且R+G>400)时,就变成红色(255,0,0);否则成黑色(0,0,0)后面这些操作都是在像素绿色分量存在的情况(!=0)来进行的,总结:
    如果(像素绿色分量!=0):
    1)把r/g存储为该像素的特征值;
    2)如果(这个特征值比较小,且像素的R、G分量都较大)(r/g<10 且R+G>400)把像素变成红色;否则变成黑色。猜测:r/g<10这个条件可以表明,RG差别不超过10倍;另外一个条件:R+G>400表明RG二者都很高;没有图不知道效果;
    实在不明白就把满足)条件(r/g<10 且R+G>400)和不满足的所有颜色在颜色板中画出来看看;直观分析究竟是什么效果的伪色彩。
      

  3.   

    谢谢帮忙,我是在处理一个火焰图像的,(r/g<10 且R+G>400)貌似是这个条件就可以找到火焰区域,然后伪彩色处理了。