亿加合和智能车制作

标题: 二值化处理CCD数据,大家帮我看下我二值化加在哪里。 [打印本页]

作者: 离。。。。    时间: 2013-5-10 17:34
标题: 二值化处理CCD数据,大家帮我看下我二值化加在哪里。
我试了好多次都不行。
#include "include.h"
#include "calculation.h"


/*************************
设置系统的全局变量
*************************/








extern u8 TIME0flag_5ms   ;
extern u8 TIME0flag_10ms  ;
extern u8 TIME0flag_15ms  ;
extern u8 TIME0flag_20ms  ;
extern u8 TIME1flag_20ms ;


extern u8 TimerFlag20ms;
unsigned char m;
u8 AtemP ;
u8 Pixel[128];
//二值化处理
void binarize()
{   
    unsigned int DIRECTION_ADTHRESHOLD=200;


    {   
      if(Pixel[m]<DIRECTION_ADTHRESHOLD) //自己定义的阀值,AD后的中间值
       {
           Pixel[m]=0;//128个点的数组
       }
       else
       {
           Pixel[m]=1;
        }



    }
}







void main()
{


   volatile u8 i;
   u8 send_data_cnt = 0;
   u8 *pixel_pt;  
   binarize();
  DisableInterrupts;                             //禁止总中断

  /*********************************************************
  初始化程序
  *********************************************************/
   //自行添加代码

   uart_init (UART0 , 9600); //初始化UART0,输出脚PTA15,输入脚PTA14,串口频率 9600

  //  adc_init(ADC1, AD6a) ;

   gpio_init (PORTA , 17, GPO,HIGH);
   gpio_init (PORTB , 17, GPO,LOW);   
   pit_init_ms(PIT0, 5);                                    //初始化PIT0,定时时间为: 5ms
   pit_init_ms(PIT1, 1);                                   //初始化PIT1,定时时间为: 1000ms

   CCD_init() ;


  pixel_pt = Pixel;
    for(i=0; i<128+10; i++) {
  *pixel_pt= 0;


  }

   PTE5_OUT = 1 ;
   EnableInterrupts;                                            //开总中断  

   /******************************************
    执行程序
    ******************************************/
    while(1)
    {

      if(TIME1flag_20ms == 1)
      {

      TIME1flag_20ms = 0 ;
      /* Sampling CCD data     ccd数据采集*/
      ImageCapture(Pixel);

      /* Calculate Integration Time */
      CalculateIntegrationTime();

      /* Send data to CCDView every 100ms */
      if(++send_data_cnt >= 5) {
        send_data_cnt = 0;
        SendImageData(Pixel);
      }

      }

    }

}



作者: 二百五    时间: 2013-5-10 21:32
这个有难度吗?
作者: dec112233    时间: 2013-5-11 03:43

作者: 离。。。。    时间: 2013-5-11 16:12
二百五 发表于 2013-5-10 21:32
这个有难度吗?

是木有啊 ,可是我总觉得串口并没有把二值化后的数值传到上位机里面去,到底是什么问题啊? 能加你QQ吗 ,我们的是K60的芯片

作者: 二百五    时间: 2013-5-11 16:56
串口这个我就不懂了
作者: 离。。。。    时间: 2013-5-11 17:19
二百五 发表于 2013-5-11 16:56
串口这个我就不懂了

额。 这个二值化我主要是想发送串口,二值化就是个判断而已

作者: 红杏爱蓝颜    时间: 2013-5-16 22:00
参考商家们给的程序呗
作者: 忆魂.de诉说    时间: 2013-11-16 19:55
楼主这个解决了么?我们现在也遇到这个问题。。应该加在哪里啊?
作者: 假精哟    时间: 2013-11-21 16:40
请教一下
PTE5_OUT = 1 ;
   EnableInterrupts;                                            //开总中断  

PTE5_OUT=1为什么加这一句,是因为PTE5控制TX吗?
作者: 仰望,蘫迗    时间: 2013-11-21 19:32
好低~
作者: 仰望,蘫迗    时间: 2013-11-21 19:32
我指中奖率
作者: 老学童先生    时间: 2013-12-10 12:26

作者: 空相救心    时间: 2013-12-10 20:25

作者: Tiger_M    时间: 2014-1-4 18:54
蓝宙的吧
作者: 小布的梦    时间: 2014-1-10 23:05
:):):)
作者: 。楠    时间: 2014-1-12 12:36
calculation.c中找void SendImageData(unsigned char * ImageData)   你把指针中的值二值化就行,但是你这样用上位机估计看不到效果  用上位机看的话就把二值化的1改成255,还有你的阈值对于不同的光线无法做出调整
作者: 小布的梦    时间: 2014-1-12 22:17
:):):):)
作者: 小橙子    时间: 2014-2-19 09:51
请问采取的是跳变沿吗
作者: 天芒    时间: 2014-2-20 18:31
你没加一个for循环,
for(m=0;m<128;m++)
{   
      if(Pixel[m]<DIRECTION_ADTHRESHOLD) //自己定义的阀值,AD后的中间值
       {
           Pixel[m]=0;//128个点的数组
       }
       else
       {
           Pixel[m]=1;
        }
}

作者: 风吹已散    时间: 2014-3-9 11:17
1,位置写错了,你写得函数位置此时数组中还没数据,写在ccd采集数据后
2,二值化函数写得有问题,应该写一个循环,循环次数为128
作者: zhuimengA2012    时间: 2014-4-20 19:31

作者: zhuimengA2012    时间: 2014-4-20 19:31

作者: huozhenkun    时间: 2014-4-23 20:25
楼主解决了没。。
作者: zhuimengA2012    时间: 2014-4-23 21:47

作者: 明天醉美    时间: 2014-5-21 22:45
楼主,我有些问题想要请教一下您,能加个QQ吗?我QQ1612617365

作者: 909885807    时间: 2014-6-27 22:48

作者: 冰峰花少    时间: 2014-6-27 22:49

作者: 钢琴曲    时间: 2014-6-30 15:47

作者: GODHASDIED    时间: 2014-7-1 11:01

作者: 逆风,飞翔    时间: 2014-7-3 10:34
离。。。。 发表于 2013-5-11 16:12
是木有啊 ,可是我总觉得串口并没有把二值化后的数值传到上位机里面去,到底是什么问题啊? 能加你QQ吗 , ...

按照你的程序,二值化程序应该加在ImageCapture()图像采集函数里面,而且要放在for循环里面,但是你二值化后的数据是存放在Pixel[128]里面,这个原本是存放128个AD值的,对跑道的识别有用,建议再开另外一个数组存放二值化数据你如果是在CCDView上面看二值化的数据,就要把二值化里面的1改成255,否则看不到波形,或者在CCDview界面上选中“保存接受数据”,然后你可以在保存的文档看到一串0和1,或者你通过默认的UART1口使用printf函数发送二值化的数据,但是这样的话就要用两个串口,一个串口用于发送AD数据到CCDView,一个串口用于发送二值化数据到串口精灵什么的
希望对你有帮助

作者: Vince_。    时间: 2014-8-24 18:34

作者: 乁year    时间: 2014-10-21 00:04
楼主去年遇到的问题今年我也遇到了
作者: √哎丶yo】    时间: 2014-10-21 17:16

作者: 刘国栋    时间: 2014-10-28 17:12

作者: dh867699576    时间: 2014-11-14 17:04

作者: 喜欢桃子    时间: 2014-11-29 18:57

作者: 余晖。。    时间: 2015-5-21 21:08
额  你的ccd 图啥样   处理以后的
作者: 永远的记忆    时间: 2016-2-27 15:11
求楼主二值化的程序
作者: 看黎明前的曙光    时间: 2016-4-18 18:49
你好,关于你ccd二值化问题的解决方法可以分享一下么,谢谢

作者: wanghuo    时间: 2016-10-2 20:05
:L:Q:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol
作者: wanghuo    时间: 2016-10-2 21:13
ME TOO
作者: wanghuo    时间: 2016-10-2 21:13
METOO
作者: xingyaohuan    时间: 2017-11-19 13:39
厉害厉害




欢迎光临 亿加合和智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2