3342|4

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于STM32F103+OV7670(带FIFO)采集单位区域内颜色块数据错误的问题,求各位大佬... [复制链接]


[tr][td]最近用STM32F103+OV7670(带FIFO)做一个单位区域内颜色块的识别功能,前期采用的原子哥的MINI板摄像头例程,自己在上面做了修改,现在遇到的问题就是:我自定义采集的单位区域40*80像素,直接把FIFO里面的color(RGB565格式)单位区域内数据取出来,暂时定A4白纸为被拍摄颜色块(加了一颗白光LED做补光灯),然后通过串口的方式将3200个像素点的打印出来并作为颜色参考标准放在程序里的一个u16 Standard_Data[3200]数组里面,并以此数组里的数据作为参考标准和我采集到的颜色块(还是A4白纸,采集区域还是40*80大小)像素点数据一一对比,两个数组里面对应元素数据相同则设定OK_Count变量累计成功次数,反之则设定Erro_Count变量累计错误次数,采用按键触发调用camera_refresh()函数,几次测试下来发现数据差异太大,有时候正确率不到50%!!!请问各位大佬们,为什么同样光照下同样的颜色块的RGB565像素数据会不一样呢?这样的话就无法实现颜色块识别功能了,求各位大佬指导指导,小弟万分感谢!!!

附采集数据部分代码:
//****************************************************************************************************
//       采集数据部分代码:
//****************************************************************************************************
     void Read_Data()
{
        
         for(j=0;j                 {
                        GPIOB->CRL=0X88888888;                  
                        OV7670_RCK=0;
                        color=OV7670_DATA;                //读数据
                        OV7670_RCK=1;         
                        color<<=8;                                          
                        OV7670_RCK=0;
                        color|=OV7670_DATA;                //读数据                        
                        OV7670_RCK=1;
                        GPIOB->CRL=0X33333333;                                                         
                        LCD_WR_DATA(color);         
                        Picture_Data[j]=color;           //将FIFO的RGB565像素点数据放到Picture_Data[]里形成整个图像
                        if(j<=dpi)
                        {
                        
//   printf("0x%04X, \r",Picture_Data[j]);       //采集参考图像标准像素点用,后面做图像对比时就屏蔽该语句
                        }
                }  

}

//****************************************************************************************************
//       采集图像像素点数据与参考图像像素点数据对比程序:
//****************************************************************************************************
  void Data_Check()
{
         u32 m;
        for(m=0;m         {
                        if(Standard_Data[m]==Picture_Data[m])    //将Standard_Data[]里的参考图像数据与采集到的图像Picture_Data[]逐次每个像素点扫描对比
                        {
                                 OK_Count++;                                       //对比成功次数累计
                                  if(OK_Count>dpi )
                                        {
                                                OK_Count=0;
                                        }
                        }
                        else
                        {
                                 Erro_Count++;                                              //对比错误次数累计
                                if(Erro_Count>dpi )
                                        {
                                                Erro_Count=0;
                                        }
                        }
                        
        }
        printf("OK_Count:    %d \r\n",OK_Count);
        printf("Erro_Count:    %d \r\n",Erro_Count);
        printf("SUM:    %d \r\n",(OK_Count+Erro_Count));
        printf("-----------------------------------\r\n");

实物图片:[/td][/tr]
[/table]

1.png (383.69 KB, 下载次数: 0)

测试实物

测试实物

2.png (746.58 KB, 下载次数: 0)

测试实物

测试实物

串口数据.png (42.75 KB, 下载次数: 0)

检测的数据结果

检测的数据结果

识别颜色块范围.png (321.08 KB, 下载次数: 0)

颜色识别范围

颜色识别范围

数据对比.png (92.68 KB, 下载次数: 0)

白色A4背景的像素点数据对比

白色A4背景的像素点数据对比
此帖出自stm32/stm8论坛

最新回复

这是在做医疗器械用的读数仪吧!CCD的读数仪是最差的,定量肯定不行,如果硬是要用于半定量,很多FDA都不批,不过每个地方有每个地方的要求,有的地方会松一些。CCD的识别受光环境影响太大了,最好是暗室,原则上可见光应该使用钨灯被光,LED光源本身就不是全波长的,波长分布也不均匀,就算用吧,也要多颗一起用。  详情 回复 发表于 2017-10-26 10:34
点赞 关注
 

回复
举报

10

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
色彩模型换一下
此帖出自stm32/stm8论坛
 
 

回复

2774

帖子

8

TA的资源

版主

板凳
 
这是在做医疗器械用的读数仪吧!CCD的读数仪是最差的,定量肯定不行,如果硬是要用于半定量,很多FDA都不批,不过每个地方有每个地方的要求,有的地方会松一些。CCD的识别受光环境影响太大了,最好是暗室,原则上可见光应该使用钨灯被光,LED光源本身就不是全波长的,波长分布也不均匀,就算用吧,也要多颗一起用。
此帖出自stm32/stm8论坛
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

4
 

色彩模型换成灰度黑白二值化后,就不行了,毕竟要识别颜色差。不知这位大佬说的“色彩模型换一下”是值得什么?恳请大佬点拨点拨
此帖出自stm32/stm8论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

5
 
strong161 发表于 2017-10-26 10:34
这是在做医疗器械用的读数仪吧!CCD的读数仪是最差的,定量肯定不行,如果硬是要用于半定量,很多FDA都不批 ...

这样看来和我的LED补光灯光源也有因素?就是考虑到CCD有些不合适,才选用的CMOS的摄像头。听您这么一说,您貌似做过这一行?
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表