引言
在工业生产自动化系统中,通过计算机视觉和图像处理技术来实现产品的质量监测和控制,已逐渐成为一种有效的应用技术。线阵ccd 图像传感器广泛地应用于产品尺寸测量和分类、非接触尺寸测量、条形码、形态识别等众多领域。在图像检测系统中,应具备一个高速的子图像提取和输出模块,本文采用fpga 器件ep3c25f256c8 和ccd 线阵图像传感器rl1024p,实现线阵ccd 图像检测系统中的子图像提取和输出功能。
1 子图像提取模块的设计
子图像提取模块的功能可描述为:采用fpga 器件实现,根据串行输入的黑白图像和同步信号,提取该图像中设定尺寸大小的子图像。假设输入图像大小为i * j,某一像素点的坐标位置为(x,y),要取出子图像的大小为m * n,则用c 代码描述为:for(b=0;b
根据系统设计的要求,线阵ccd 图像采集模块采用串行的方式输出1×1024 像素的一行图像,子图像提取模块接收该图像数据、缓冲、再输出16×16 像素的子图像。子图像提取模块的外部端口,如图1 所示。主要信号有:像素同步时钟信号ccd_clk、像素数据ccd_data、当前输入像素的坐标ccd_addr[90] ;另外,n_rst 和sys_clk 为系统提供的复位信号和处理时钟信号。其中,每个ccd_clk 的上升沿出现时ccd_data 像素有效,且该像素所在的位置为ccd_addr[90] 值。
为了实现每个ccd_clk 周期内均输出一个子图像,sys_clk应该为ccd_clk 的10 倍左右。
本文采用“图像转置缓冲区”的方法来实现子图像提取模块。“图像转置缓冲区”是一个按行写入(更新)、按列读出的一个ram 缓冲区。在fpga 内部设置一个1024 个单元的ram 缓冲区,每个单元的位宽为16bits.线阵ccd 采集模块输出的线阵图像与子图像的关系,如图2 所示。其中,第0 行表示图像的当前行,第n 行为历史行,每行有1024 个像素,按照p0 至p1023 的像素顺序输出。假设当前ccd_clk 输入的像素为第0行的p16 像素,则其对应的16x16 子图像为图中的阴影部分。
“图像转置缓冲区”ram 块存储图像的结构,如图3 所示。
ram 块共有1024 个单元,每个单元为16 位的宽度,可存放最近的16 行图像数据。对比图2 和图3,可以发现,ram 块的地址编号相当于线阵ccd 图像的某一行像素的位置,某个ram单元的位d15 ~ d0 对应某一列的最近16 个像素,相当于对线阵图像转置后再存放到ram 块中。对ram 缓冲区进行写操作时,由于线阵ccd 图像的数据是按行逐位输入的,每个ccd_clk 时钟上升沿出现时,仅需更新ram 缓冲区中当前像素对应的比特,因此在逻辑上是根据图像按行写入ram 区的。在fpga器件中,可设计一个状态机来实现“图像转置缓冲区”的读写操作,如图4 所示。
子图像提取模块输出的子图像有256 个像素,在fpga 内部通过寄存器暂存上一个输出的子图像;当更新ram 区的某个像素时,把16x16 的滑动窗口向右移动一列像素的位置,把滑动窗口内的数据作为输出,就可以得到新的子图像。
2 设计仿真
在本文的设计仿真中,由于用到图像文件的解析和图像显示,因此借助matlab 和modelsim 软件,通过文件读写的方式实现的联合仿真,可使仿真处理更加便捷和直观。其中,matlab 用来把图像文件转换为输入的像素,以及显示输出的子图像;modelsim 用来仿真和验证fpga 设计是否正确。
本文使用matlab 和modelsim 进行联合仿真,主要有以下三个步骤。第一步,在matlab 中编写m 文件,读取bmp 位图文件并把像素数据写入文件datain.txt 中,作为modelsim仿真的输入激励信号。第二步,在modelsim 中,用vhdl 编写testbench 测试文件,读取datain.txt 文件,产生与ccd_clk 同步的像素信号;编写do 文件进行自动化仿真,再把仿真输出的子图像数据保存在dataout.txt 文件中。第三步,在matlab 中编写m 文件,解析dataout.txt 文件,依次显示为16×16 的黑白图片序列,确定仿真结果是否正确。本设计仿真输入的图像及输出的子图像序列,如图5 所示。从仿真结果可知,设计方法是正确的,仿真结果符合设计功能的要求。
3 结束语
应用线阵ccd 图像传感器进行产品检测时,连续、高速地输出子图像序列是必不可少的重要环节,采用fpga 实现子图像序列的提取和输出,有多种不同的设计方法。本文采用“图像转置缓冲区”和状态机的方式,来实现系统所要求的子图像提取和输出的功能,并用matlab 和modelsim 工具软件对设计进行了联合仿真,该方法具有fpga 资源占用少、结构简单、高速处理,以及便捷和直观的特点,对其他类似的fpga 设计项目有很好的参考作用。
小米移动电源分别采用的什么电芯?
如何在AIxBoard上搭建ROS2+OpenVIN开发环境
网络变压器设计原理
驱动双极步进电机芯片TMI8420简介
如今5G话题越来越火,那么到底什么是5G
采用FPGA器件和传感器实现CCD图像系统中的提取和输出功能
Intel X299平台频频过热降频让超频玩家崩溃
准确和快速的过压及欠压保护
AT&T计划用5G服务向美国农村地区提供高速互联网
看中国巨头如何在AI黄金时代多足鼎立
dfrobotJPEG 摄像模块介绍
新唐与华邦电达成合作 推出全新物联网安全微控制器
曝三星将在CES2020上发布真无边框电视
线圈脉冲测试方法
苹果扛不住了!iPhone 6s免费换电池
从柯洁被Alpha Go打败后,这款硬件频出新品
小笨智能消毒机器人 切实解决了医院的难题
大数据和区块链有怎样的联系
瑞波光电胡海:大功率激光芯片破局者
美国正在威胁多个国家放弃使用中国华为设备