微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 有没有哪位用stm32做颜色识别的!求助啊

有没有哪位用stm32做颜色识别的!求助啊

时间:10-02 整理:3721RD 点击:

我用32识别魔方颜色,用的是RGB转HSI识别魔方颜色,
发现橙色和红色非常难分辨别,转换后的红色、橙色S 和 I值基本没多大差别,
H值红色在32以下,橙色在28----40之间,有重复,总是容易出错,怎么解决啊!
求高人指点,能通俗讲解最好!  

可能颜色信号中噪声所致。有没有先滤波?

用的矢量中值滤波

橙色中含有红色成分,两者H值的分布有重叠属部分不难理解。可能需要继续滤波,获取更低频率分量,直至两者分布不再有重叠为止。

将滤波迭代么?是不是这样?

一个窗口包括更多的图形面积。
另外,LZ或可考虑小波滤波。没比较过,但觉得小波的算法应该更好。

小波没看过,矢量中值滤波都是我先学现卖的的,呵呵!
错误情况一般在边角地方,也就是光线变化影响的,小波滤波能减小光线影响么?
而且我发现小波的算法复杂度比矢量中值大,STM32运算会很累吧!

中值滤波得到的是低频成分(平均值),小波滤波同时得到高频和低频成分。相比较,处理LZ的问题应该更有优势。小波还可以探测不连续点(类似无损探伤)。
至于光线变化影响,应该属于一种低频的变化,是不同低频成分/模式的处理。直觉是用小波来处理更合适,LZ不妨一试。

恩 ,,我试试,,谢谢你

顶一下!

RGB是如何实现转HSI的啊?求小编给我一下代码,我也在做颜色识别

我需要精确的识别出红色,搞了一段时间还是没有进展啊

  1. #define min3v(v1, v2, v3)   ((v1)>(v2)? ((v2)>(v3)?(v3):(v2)):((v1)>(v3)?(v3):(v1)))
  2. #define max3v(v1, v2, v3)   ((v1)<(v2)? ((v2)<(v3)?(v3):(v2)):((v1)<(v3)?(v3):(v1)))

  3. typedef struct hsicolor
  4. {
  5.         int16_t        H;
  6.         int16_t        S;
  7.         int16_t        I;
  8. }HSI_ColorTypeDef;

  9. typedef struct rgbcolor
  10. {
  11.         u8        R;
  12.         u8        G;
  13.         u8        B;
  14. }RGB_ColorTypeDef;

  15. //公式参考http://blog.sina.com.cn/s/blog_a5b3ed560100yo26.html
  16. // H>=0 && H<=360                S>=0 && S<=100                I>=0 && I<=100

  17. HSI_ColorTypeDef RGB565ToHSI(u16 rgb)
  18. {
  19.         u16 Max,Min;
  20.         float delta;
  21.         RGB_ColorTypeDef        RGBColor;
  22.         HSI_ColorTypeDef        HSIColor;
  23.        
  24.         RGBColor.R         = ((rgb & 0xf800) >> 8);                       
  25.         RGBColor.G         = ((rgb & 0x07e0) >> 3);
  26.         RGBColor.B         = ((rgb & 0x001f) << 3);                        //将RGB565化为RGB888
  27.        
  28.         Min = min3v(RGBColor.R,RGBColor.G,RGBColor.B);
  29.         Max = max3v(RGBColor.R,RGBColor.G,RGBColor.B);
  30.         delta = Max - Min;
  31.        
  32.         if(Max == RGBColor.R)
  33.                 HSIColor.H = (int16_t)(60.0f*((RGBColor.G-RGBColor.B)/delta));
  34.         else if(Max == RGBColor.G)
  35.                 HSIColor.H = (int16_t)(60.0f*((RGBColor.B - RGBColor.R)/delta))+120;
  36.         else //if(Max == RGBColor.B)
  37.                 HSIColor.H = (int16_t)(60.0f*((RGBColor.R - RGBColor.G)/delta))+240;
  38.        
  39.         if(HSIColor.H < 0)
  40.                 HSIColor.H+=360;
  41.        
  42.         HSIColor.I = (int16_t)((Max + Min)*0.1961f);                                                        //I = (int16_t)((Max + Min)*1.0f/2/255.0*100);
  43.        
  44.         if(HSIColor.I <= 50)
  45.                 HSIColor.S = (delta/(Max + Min))*100;
  46.         else
  47.                 if(Max != 255 || Min != 255)
  48.                         HSIColor.S = delta*100.0f/(510 - (Max + Min));
  49.                 else
  50.                         HSIColor.S = 0;
  51.                
  52.         return HSIColor;
  53. }

复制代码


水平有限,精确识别做不到

小编  我现在也在做一个颜色识别的项目 你可以提供我一些资料吗?

HW: TCS3200
CIE1931

最近在做摄像头识别颜色,我想问你摄像头怎样提取出捕捉到的颜色数据给单片机啊?有没有这部分代码。给我看看

感觉你这个程序好难 我就想stm32f4用摄像头识别红 绿 蓝 就行了

小编能把STM32调颜色识别3200的程序发一下吗,或者是调白平衡的程序

lz求教 那么hls最大最小的参数怎么调 假如要判断蓝色

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top