2014-11-06 12:28:22 huangcanjun187 阅读数 3742
  • C++实战OpenCV3.2+QT5播放视频

    OpenCV是目前视频处理的最流行的框架,广泛用于各类项目中,并且由于OpenCV的开源特性可以很容易移植到Android、IOS和嵌入式Linux中,QT5同样是跨平台界面库的第一选择。 本次公开课将基于OpenCV3.2和QT5,详细讲解如下内容: 第一部分将讲解并分析OpenCV的视频处理接口; 第二部分将讲解 QT5如何使用OpenGL高效的绘制图像; 第三部分将讲解如何将OpenCV与QT5结合 通过本次公开课,让学员能对OpenCV的编程和QT5的界面编程 有个总体的认识,为后续继续学习奠定基础。 (1)OpenCV3.2视频接口详解? (2)OpenCV3.2 Mat图像结构详解 (3)QT5自定义Widget (4)QT5基于OpenGL绘制图像 (5)QT5月OpenCV3.2结合播放视频

    1029 人正在学习 去看看 夏曹俊

手上拿到同事给的 飞思卡尔  imx6. 之前做的图像处理是基于OpenCV的,而imx6作为嵌入式处理器,让CPU跑一些多层嵌套的图像处理函数很吃力。


所以要把CPU上跑的openCV函数挪到GPU上去跑。而OpenCl作为跨平台编程的框架,可以让C++程序嵌套OpenCL的kernel程序,让kernel程序在

GPU上执行,发挥GPU的并行处理速度,从而优化嵌入式图像处理速度


每个品牌的GPU对OpenCL的版本支持不同,而不同的版本之间函数定义有区别。

如果一开始就看一些其它品牌GPU自带的sdk程序,会迷失方向。所以,为了在嵌入式平台上开发opencl程序,就先了解此平台的opencl版本,然后看此版本的opencl的官方PDF。

在了解了什么是conetxt、platform、device、buffer、queue以及怎么去写kernel这些之后,才开始在班子上写程序。

推荐一本Aaftab Munshi著作的OpenCL经典。 找了很多开源资料,发现只有这个文档最有参考价值。 

http://download.csdn.net/detail/huangcanjun187/8118327







2016-06-26 20:48:21 sx1503198 阅读数 13136
  • C++实战OpenCV3.2+QT5播放视频

    OpenCV是目前视频处理的最流行的框架,广泛用于各类项目中,并且由于OpenCV的开源特性可以很容易移植到Android、IOS和嵌入式Linux中,QT5同样是跨平台界面库的第一选择。 本次公开课将基于OpenCV3.2和QT5,详细讲解如下内容: 第一部分将讲解并分析OpenCV的视频处理接口; 第二部分将讲解 QT5如何使用OpenGL高效的绘制图像; 第三部分将讲解如何将OpenCV与QT5结合 通过本次公开课,让学员能对OpenCV的编程和QT5的界面编程 有个总体的认识,为后续继续学习奠定基础。 (1)OpenCV3.2视频接口详解? (2)OpenCV3.2 Mat图像结构详解 (3)QT5自定义Widget (4)QT5基于OpenGL绘制图像 (5)QT5月OpenCV3.2结合播放视频

    1029 人正在学习 去看看 夏曹俊

图像处理这几年可谓是大红大紫了一番,尤其是OpenCV的出现让很多之前只有研究者才能使用的算法变成了小白装个库调用个函数就可以解决的问题。但是实时性一直以来都是一个非常头疼的问题,尤其是在嵌入式平台上进行图像处理的门槛一直以来都没有降低。今天在这挖个坑,想和大家一起把图像处理搬到嵌入式平台上去,让图像处理从花拳绣腿的演示实验,到真正真枪实剑。

  1. 硬件选择
    图像处理方面ARM,DSP,FPGA,GPU四者可谓是各有各的优点。ARM的最大优点是系统封装,一旦ARM加上了系统那程序写起来会避免接触诸多底层的麻烦。在2014年之前,大多数高端开发板还停留在DSP+ARM的架构上,程序写起来可谓是难上加难。而单纯ARM CPU的嵌入式平台即便是可以跑较为完整的Linux系统,运算速度和桌面平台也差一个数量级。
    2014年英伟达推出了Jetson 系列的带GPU的嵌入式超级计算机在硬件上打破这一难题。入门级Jetson tk1 以及高配版Jeston tx1 基本上可以完全满足用户对于嵌入式图像处理的硬件需求。本系列将使用Jetson tk1作为嵌入式图像处理的硬件平台使用
    英伟达Jetson tk1 Developer Kit
    Jeston tk1 全名Nvidia Jeston Tegra K,他拥有Cortex-A15架构的32位四核心CPU,拥有192核心的开普勒GPU, 2GB内存,并有USB 3.0、HDMI 1.4、SATA、千兆以太网(Realtek RTL8111GS)、音频(Realtek ALC5639)、mini PCI-E。总的来说,除了USB接口数目,其他的都已经绰绰有余,配得上“超级计算机的名号”。不过关于硬件方面,有几个藏得很深的地方要拿出来说明一下:

    • 板子一共有四个串口,一个RS232串口和三个TTL电平,英伟达官方文档中不建议使用UART 2,因为他适用于开发板的调试功能;
    • RS232串口存在只能发不能收的问题,目前尚未解决;
    • USB控制器不支持Kinect V2。
  2. 软件介绍
    Jeston tk1 自带有Tegra系统,其实就是一个加入部分优化的ARM Ubuntu。Tegra保留了几乎所有Ubuntu 14.04 LST的功能,如果你是一个Linux程序员那上手起来一定会非常快。此外,Nivida 还提供了Tegra2Opencv的工具包,使用它可以利用NVCC编译Opencv,这比使用ARM编译的Opencv速度要快很多。值得一提的是,使用NVCC编译的Opencv可以利用Opencv中的GPU模块,虽然Gpu模块现在还是一个效率存疑的模块,但是就我的测试结果来看,使用GpuMat 和Gpu::initUndistortRectifyMap效率cv::initUndistortRectifyMap的5倍。
    这里写图片描述
    此外,Jeston tk1 还有英伟达自家的VisionWorks 图像处理库,这个基于OpenVX的开源(虽然我至今没有找到他的CPP文件)图像处理库提供基于硬件加速的视觉处理算法,就我自己的测试结果来看,像光流检测,立体匹配等VsionWorks里有的模块,效率基本上都是Opencv的10倍以上,这一点会在以后的文章中详细说明。

  3. 本系列说明
    本系列将采用Jeston Tk1 作为硬件实现平台,算法方面会兼用Opencv和VisionWorks两个库,对比他们效率,有什么问题希望大家可以与我一起交流~
2019-10-16 11:06:40 Harvey_Hawk 阅读数 62
  • C++实战OpenCV3.2+QT5播放视频

    OpenCV是目前视频处理的最流行的框架,广泛用于各类项目中,并且由于OpenCV的开源特性可以很容易移植到Android、IOS和嵌入式Linux中,QT5同样是跨平台界面库的第一选择。 本次公开课将基于OpenCV3.2和QT5,详细讲解如下内容: 第一部分将讲解并分析OpenCV的视频处理接口; 第二部分将讲解 QT5如何使用OpenGL高效的绘制图像; 第三部分将讲解如何将OpenCV与QT5结合 通过本次公开课,让学员能对OpenCV的编程和QT5的界面编程 有个总体的认识,为后续继续学习奠定基础。 (1)OpenCV3.2视频接口详解? (2)OpenCV3.2 Mat图像结构详解 (3)QT5自定义Widget (4)QT5基于OpenGL绘制图像 (5)QT5月OpenCV3.2结合播放视频

    1029 人正在学习 去看看 夏曹俊

       由于基于嵌入式平台的图像算法开发普遍要求消耗内存少、实时性好,而特征提取及其匹配又是图像处理中计算资源、计算时间消耗的大头,所以选择合适的特征是算法设计的重中之重。

       常用的图像特征包括SIFT、HOG、Hough变换等,这些特征的优点不赘述,但它们的共同缺点是计算慢、占内存高,虽然知道能取得较好的效果,然而常常无法符合平台要求。面对这种情况,建议使用FAST及其改进ORB系列特征,这一类特征计算很快,且使用金字塔也能在一定程度上解决尺度不变的问题(虽然不能完全解决),性能上也能满足一般情况。

 

       本人业余时间承接各种作业和小项目,包括图像处理(机器学习、深度学习等)、matlab、C\C++、python等,有需要的请加QQ:635541674详谈~

2008-03-25 16:44:00 lzy0312 阅读数 240
  • C++实战OpenCV3.2+QT5播放视频

    OpenCV是目前视频处理的最流行的框架,广泛用于各类项目中,并且由于OpenCV的开源特性可以很容易移植到Android、IOS和嵌入式Linux中,QT5同样是跨平台界面库的第一选择。 本次公开课将基于OpenCV3.2和QT5,详细讲解如下内容: 第一部分将讲解并分析OpenCV的视频处理接口; 第二部分将讲解 QT5如何使用OpenGL高效的绘制图像; 第三部分将讲解如何将OpenCV与QT5结合 通过本次公开课,让学员能对OpenCV的编程和QT5的界面编程 有个总体的认识,为后续继续学习奠定基础。 (1)OpenCV3.2视频接口详解? (2)OpenCV3.2 Mat图像结构详解 (3)QT5自定义Widget (4)QT5基于OpenGL绘制图像 (5)QT5月OpenCV3.2结合播放视频

    1029 人正在学习 去看看 夏曹俊
2008-07-28 09:31:00 linglongyouzhi 阅读数 948
  • C++实战OpenCV3.2+QT5播放视频

    OpenCV是目前视频处理的最流行的框架,广泛用于各类项目中,并且由于OpenCV的开源特性可以很容易移植到Android、IOS和嵌入式Linux中,QT5同样是跨平台界面库的第一选择。 本次公开课将基于OpenCV3.2和QT5,详细讲解如下内容: 第一部分将讲解并分析OpenCV的视频处理接口; 第二部分将讲解 QT5如何使用OpenGL高效的绘制图像; 第三部分将讲解如何将OpenCV与QT5结合 通过本次公开课,让学员能对OpenCV的编程和QT5的界面编程 有个总体的认识,为后续继续学习奠定基础。 (1)OpenCV3.2视频接口详解? (2)OpenCV3.2 Mat图像结构详解 (3)QT5自定义Widget (4)QT5基于OpenGL绘制图像 (5)QT5月OpenCV3.2结合播放视频

    1029 人正在学习 去看看 夏曹俊
 

基于DSP的嵌入式显微图像处理系统的设计

[日期:2008-7-25] 来源:电子技术应用  作者:张怀柱 尹传历 宋建中 乔 双 [字体: ]

 

显微图像处理是数字图像处理的一个重要研究领域,随着其技术的不断发展,已经在材料、生物、医学等领域得到了广泛应用[1][2]。目前的显微图像处理通常利用图像采集系统将显微图像采集到计算机中再进行图像处理,这样,虽然运算速度高,但体积庞大、不便于携带,有一定的局限性。因此,采用数字图像处理技术和DSP技术实现颗粒显微图像的高效、快速、全面的统计与测量,具有重要的实用价值和广阔的应用前景。
    本文提出并设计了一种基于DSP和FPGA的嵌入式显微图像采集处理系统,如图1所示。其中,图像采集与处理装置是整个系统的关键部件,它以DSP和FPGA为核心,DSP作为中央处理器负责图像滤波、阈值分割及目标的数目、直径及面积等统计处理,通过FPGA完成各种接口逻辑和时序匹配,并配以大容量存储器用于图像的存储。DSP芯片体积小,运算速度快,使用灵活方便;FPGA具有在系统可编程和控制逻辑实现灵活的特点。因此,既能够满足处理的快速性,又能满足小型化便于携带的要求。

 


1 系统硬件平台设计
    基于视频图像处理的显微图像处理系统的性能,在很大程度上依赖于其硬件处理单元的结构和性能。本系统所采用的硬件结构主要由5大模块组成:DSP核心处理单元、视频图像采集与存储模块、字符与图形迭加单元、通讯与用户交互接口模块、电源模块。系统电路框图如图2所示。

 

 

图2  嵌入式显微图像处理系统硬件结构框图

    系统的工作过程为:系统上电后,DSP执行BOOTLOAD程序,将用户程序代码从外部Flash load到内部程序存储器,并执行A/D、字符迭加等初始化操作。视频采集与转换模块将CCD摄像机输出的模拟视频信号转换为数字图像数据并存储在RAM中,在一场图像采集完毕后,由场同步信号通过FPGA以中断方式通知DSP,DSP从RAM中读取图像,并负责完成图像滤波、分割、测量等各种处理算法,将测量结果通过字符图形迭加单元显示在监视器屏幕上,也可以根据需要由通讯接口模块传送给主机。各种接口逻辑与时序控制通过在FPGA器件内部编程实现。
    模拟视频信号分为两路:一路经A/D转换为数字图像信号,另一路则与视频叠加芯片MAX442和字符叠加芯片μD6453进行图形和字符的叠加显示。这里采用Philips公司的SAA7111A作为视频A/D解码芯片,它将CCD摄像机输出的模拟视频信号转换为数字图像数据,并在FPGA的控制下存储在RAM中,同时产生行同步信号HS、场同步信号VS、奇偶场标志信号RTS0以及像素时钟信号LLC2。MAX442是一个双通道视频信号放大器,增益带宽高达140MHz。μPD6453为NEC公司生产的用于视频设备中的字符发生芯片。待显示的字符和图形与CCD摄像机输出的原始图像一起叠加显示在监视器屏幕上。
    在图像采集过程中,视频解码芯片SAA7111A按像素逐点输出4:2:2的YUV格式的数字图像数据。该格式中,每帧图像的分辨率为720×576,即每行有720个像素点,每帧576行,由于一帧图像是由奇、偶两场图像组成的,因此每场图像有288行。为了处理方便,每场采集的图像大小为512×256,即每行采集512个像素,每场(奇场或偶场)采集256行,通过在FPGA中编程实现像素延时和行延时,选择每行中间的512个像素和每场中间的256行。
2 软件设计
    传统的DSP程序多采用单线程顺序结构实现,其实时性较差,资源利用率低,在高速、实时的图像处理领域中难以满足实际要求。CCS(Code Composer Studio)是一个完整的DSP集成开发环境,不仅集成了常规的开发工具,如源程序编辑器、代码生成工具(编译、链接器)以及调试环境,还提供了DSP/BIOS开发工具。DSP/BIOS是一个简易的嵌入式操作系统,它本身仅占用极少的CPU资源,而且是可裁剪的,能大大方便用户编写多任务应用程序,增强对代码执行效率的监控,提高程序的可读性,方便用户应用程序的编写,缩短软件开发周期。
2.1 软件程序框图
    本文在DSP/BIOS的基础上,设计开发了显微图像处理系统的DSP应用程序。使用混合语言编程,用C语言设计程序中对运行时间影响不大的模块,用汇编语言设计严格要求实时性的核心算法。在这里,程序采用模块化设计,各个功能模块相互独立,程序框图如图3所示。该程序主要由1个主程序初始化模块、3个硬件中断HWI处理模块、1个软件中断SWI处理模块和4个任务模块TSK构成。

 


    当系统复位后,DSP执行Bootload引导程序,并将程序入口点设置到c_int00处,DSP/BIOS应用程序从该处开始运行,执行过程为:首先调用DSP/BIOS初始化模块,并调用主函数main(),由main()函数负责完成硬件资源分配及各种外围芯片工作方式的初始化设置;然后启动DSP/BIOS,并进入空闲循环周期。这时,应用程序完全由硬件中断驱动,只有产生中断时,才会执行相应的功能模块,执行完毕后跳出继续执行Idle空闲循环程序。
2.2 图像处理算法设计
    当采集完一场图像后,FPGA以中断方式通知DSP,触发DSP的INT0中断。由于一场图像的时间间隔为20ms,因此每隔20ms触发一次该中断。在中断处理程序Vs_interrupt()中启动键盘扫描SWI,若有键按下,则执行相应的图像处理程序。
    显微图像受光源光照强度的影响很大,采集的图像往往质量较差、亮度不均匀,目标区域不易从背景区域中分离出来。为此,需要首先对图像进行滤波处理,然后采用自适应阈值的办法将目标从背景中提取出来,并利用数学形态学的方法进一步去噪处理,最后完成对图像中目标的统计测量计算。
    首先,利用中值滤波进行图像平滑,窗口大小选择3×3,采用十字状窗口。中值滤波在保持目标图像边缘的同时,去除了尖峰干扰,使图像背景的亮度更均匀,便于进一步的图像分割处理。
    由于光源光照强度的影响,背景的灰度值在整幅图像中存在很大差别,如果只用一个固定的全局阈值对整幅图像进行分割,则由于不能兼顾图像各处的情况而使分割效果受到影响。为提高分割的精确性,可采用随背景灰度值缓慢变化的动态阈值分割的方法,即自适应阈值算法。具体做法是:首先将原图像分解成系列子图像,由于子图相对原图很小,因此受阴影或对比度空间变化等问题的影响会比较小;然后对每个子图计算一个局部阈值;最后通过对这些子图所得到的阈值进行线性插值,就可以得到对原图中每个像素进行分割所需要的合理阈值。分割后的二值图像再利用数学形态学变换中的开、闭运算并选取合适的算子,便可以很好地消除图像中仍然存在的少量噪声点,利于下一步的工作。
    这里,在局部阈值计算时采用最大类间方差法[6],其计算公式为:
   

    其中:σ2(T)为两类间最大方差,WA为目标概率,μa为目标的平均灰度,WB为背景概率,μb为背景平均灰度,μ为图像总体平均灰度。即阈值T将图像分成A、B两部分,使得两类总方差σ2(T)取最大值的T,即为最佳分割阈值。
    为了实现对显微图像中目标的数目以及直径、面积等几何特征的统计测量,采用了对二值图像的目标区域进行标记归类的算法[7]。首先对二值图像的目标区域从左到右、自上而下进行扫描,若为目标点,则对其加以标记,并根据八连通原则将属于同一个颗粒的目标图像赋予相同的数值。标记归类算法示意图如图4所示。由于目标的几何形状是不规则的,一次扫描不能够把所有目标全部区分开来,因此要对二值图像进行多次扫描。图4(a)表示二值图像(黑色区域为目标,白色为背景),图4(b)为对目标区域的一次标记,图4(c)为最后标记完成的结果。其中,数字1表示1号目标,数字2表示2号目标。从图4可以看出,1号目标的标记经过一次扫描就能够完成,而2号目标则需要二次扫描方可完成标记。目标图像经过标记归类后就可以很方便地对目标的数目及直径、面积和周长等特征进行测量了。

 


3 实验结果
    为了验证系统的可靠性,对来自显微镜下的油膜颗粒图像进行了大量的采集处理与统计测量实验。图5(a)是现场采集的一幅颗粒显微图像,图像大小为512×256,由于光源光照强度的影响,整幅图像背景不均匀。图5(b)是采用自适应阈值二值化后的图像,目标区域与背景区域已经分离开,虽然还有少量的噪声点,但是经过数学形态学变换后已经能够准确地进行颗粒的统计计算。

 


    在统计测量过程中,面积小于3个像元的目标被当作噪声干扰而略去不计,只对面积大于等于3个像元的目标加以统计。为了便于进一步的分析和比较,将目标按像元数目分成9个档次: 3~10、11~20、21~30、31~40、41~50、51~60、61~70、71~80和81以上。对颗粒的数目、平均面积以及各档次所占比例进行了统计计算,结果如表1所示。实验中,在DSP芯片TMS320VC5416工作在最大工作频率160MHz时,程序的运行时间约为15ms。由于视频采集为PAL制,一场图像时间为20ms,因此能够达到实时性要求。

 


    本文提出了一种以TMS320VC5416作为图像处理的核心部件的嵌入式显微图像处理系统,设计了基于DSP/BIOS的应用程序。利用自适应阈值算法对采集的图像进行准确的分割,并采用扫描标记算法对油膜颗粒显微图像进行了统计测量实验。实验结果表明,利用本系统对颗粒显微图像进行统计,可达到全面、客观、方便且自动化程度高的效果,可以应用于各种显微图像的统计与分析,具有较高的实用性。
参考文献
[1] 辛莉,胡茂海,周绍光.水稻花粉颗粒显微图像采集与分析系统研究[J].应用光学,2004,25(1):43-45.
[2] 尤育赛,于慧敏,刘圆圆.基于粒度测量的重叠圆形颗粒图像分离方法[J].浙江大学学报(工学版),2005,39(7):962-966.
[3] TMS320VC5416 Fixed-Point Digital Signal Processor Data Manual,SPRS095O[J].Texas Instruments,2005,1.
[4] 清源科技.TMS320C54X DSP硬件开发教程[M].北京:机械工业出版社,2003.
[5] 潘松,黄继业.EDA技术实用教程[M].北京:科学出版社,2002.
[6] OTSU N.A threshold selection method from gray-level histogram[J].IEEE Trans,1979,SMC-15:652-655.
[7] 陈忠碧,张启衡.一种适合于多目标检测的图像分割方法[J].光电工程,2004,31(5):34-37.

嵌入式视觉技术

阅读数 1340

没有更多推荐了,返回首页