有没有哪位用stm32做颜色识别的!求助啊
时间:10-02
整理:3721RD
点击:
我用32识别魔方颜色,用的是RGB转HSI识别魔方颜色,
发现橙色和红色非常难分辨别,转换后的红色、橙色S 和 I值基本没多大差别,
H值红色在32以下,橙色在28----40之间,有重复,总是容易出错,怎么解决啊!
求高人指点,能通俗讲解最好!
可能颜色信号中噪声所致。有没有先滤波?
用的矢量中值滤波
橙色中含有红色成分,两者H值的分布有重叠属部分不难理解。可能需要继续滤波,获取更低频率分量,直至两者分布不再有重叠为止。
将滤波迭代么?是不是这样?
一个窗口包括更多的图形面积。
另外,LZ或可考虑小波滤波。没比较过,但觉得小波的算法应该更好。
小波没看过,矢量中值滤波都是我先学现卖的的,呵呵!
错误情况一般在边角地方,也就是光线变化影响的,小波滤波能减小光线影响么?
而且我发现小波的算法复杂度比矢量中值大,STM32运算会很累吧!
中值滤波得到的是低频成分(平均值),小波滤波同时得到高频和低频成分。相比较,处理LZ的问题应该更有优势。小波还可以探测不连续点(类似无损探伤)。
至于光线变化影响,应该属于一种低频的变化,是不同低频成分/模式的处理。直觉是用小波来处理更合适,LZ不妨一试。
恩 ,,我试试,,谢谢你
顶一下!
RGB是如何实现转HSI的啊?求小编给我一下代码,我也在做颜色识别
我需要精确的识别出红色,搞了一段时间还是没有进展啊
- #define min3v(v1, v2, v3) ((v1)>(v2)? ((v2)>(v3)?(v3):(v2)):((v1)>(v3)?(v3):(v1)))
- #define max3v(v1, v2, v3) ((v1)<(v2)? ((v2)<(v3)?(v3):(v2)):((v1)<(v3)?(v3):(v1)))
- typedef struct hsicolor
- {
- int16_t H;
- int16_t S;
- int16_t I;
- }HSI_ColorTypeDef;
- typedef struct rgbcolor
- {
- u8 R;
- u8 G;
- u8 B;
- }RGB_ColorTypeDef;
- //公式参考http://blog.sina.com.cn/s/blog_a5b3ed560100yo26.html
- // H>=0 && H<=360 S>=0 && S<=100 I>=0 && I<=100
- HSI_ColorTypeDef RGB565ToHSI(u16 rgb)
- {
- u16 Max,Min;
- float delta;
- RGB_ColorTypeDef RGBColor;
- HSI_ColorTypeDef HSIColor;
-
- RGBColor.R = ((rgb & 0xf800) >> 8);
- RGBColor.G = ((rgb & 0x07e0) >> 3);
- RGBColor.B = ((rgb & 0x001f) << 3); //将RGB565化为RGB888
-
- Min = min3v(RGBColor.R,RGBColor.G,RGBColor.B);
- Max = max3v(RGBColor.R,RGBColor.G,RGBColor.B);
- delta = Max - Min;
-
- if(Max == RGBColor.R)
- HSIColor.H = (int16_t)(60.0f*((RGBColor.G-RGBColor.B)/delta));
- else if(Max == RGBColor.G)
- HSIColor.H = (int16_t)(60.0f*((RGBColor.B - RGBColor.R)/delta))+120;
- else //if(Max == RGBColor.B)
- HSIColor.H = (int16_t)(60.0f*((RGBColor.R - RGBColor.G)/delta))+240;
-
- if(HSIColor.H < 0)
- HSIColor.H+=360;
-
- HSIColor.I = (int16_t)((Max + Min)*0.1961f); //I = (int16_t)((Max + Min)*1.0f/2/255.0*100);
-
- if(HSIColor.I <= 50)
- HSIColor.S = (delta/(Max + Min))*100;
- else
- if(Max != 255 || Min != 255)
- HSIColor.S = delta*100.0f/(510 - (Max + Min));
- else
- HSIColor.S = 0;
-
- return HSIColor;
- }
水平有限,精确识别做不到
小编 我现在也在做一个颜色识别的项目 你可以提供我一些资料吗?
HW: TCS3200
CIE1931
最近在做摄像头识别颜色,我想问你摄像头怎样提取出捕捉到的颜色数据给单片机啊?有没有这部分代码。给我看看
感觉你这个程序好难 我就想stm32f4用摄像头识别红 绿 蓝 就行了
小编能把STM32调颜色识别3200的程序发一下吗,或者是调白平衡的程序
lz求教 那么hls最大最小的参数怎么调 假如要判断蓝色