说下几个方案。 第一如果用DSP,直接小波变换,学过计算机图像学的人都知道,就不多说了。
不过还是要说一下如果用51怎么样去做。 如果背景是一个固定的颜色,可以寻找这个颜色最多的那个,甚至平均值等等算法都可以。但是还是建议用正规做法:
第一步:边缘识别。
建一个滑动窗口滤镜(如果在photoshop里面建立自定义滤镜的话,对应放大8倍) float F[3,3]={ -0.125,-0.125,-0.125, -0.125,1,-0.125, -0.125,-0.125,-0.125};
原图像 TColor Img[320][240]={}; 边缘查找用的临时图像 TColor Img2[320][240]={}; for() for() { Img2[x][y]= F[0][0]*Img[x-1][y-1]+F[0][1]*Img[x-1][y]+F[0][2]*Img[x-1][y+1]+ F[1][0]*Img[x ][y-1]+F[1][1]*Img[x ][y]+F[1][2]*Img[x ][y+1]+ F[2][0]*Img[x+1][y-1]+F[2][1]*Img[x+1][y]+F[2][2]*Img[x+1][y+1] }
第二步:
算了,又想起来了一个更好的办法。 第一步,平均值所有颜色计算出所有颜色的平均值比如 ColorAvg={231,15,25}; 明显的背景是红色。 第二步,所有点的颜色转换成灰度比如 ColorB={25,88,129}转换后应该为(25+88+129)/(3)=80 然后从在这个灰度通道上添加 ColorAvg的蒙版(Mask)上色,结果就变成了 ColorB2={80*231/256,80*15/256,80*25/256}={72,5,8};骗下肉眼肯定没有问题,由于没有边缘处理和归一化处理,只是颜色转换成灰度重新上了一遍背景色。但是效果应该还是不错的,让评委看下效果应该没有问题。 内存直接用CCD内部的缓冲区,一个51轻松搞定。
|