说明,本文及源码摘自小梅哥博客,非本人收集,只用于学习交流,不可用于商业用途。
数字图像处理技术在当代社会发展迅速,发挥着不可替代的作用,被广泛应用于航空航天、通信、医学及工业生产等领域中。随着现代科技的不断发展、技术的不断进步,人们对数字图像处理的速度和质量提出了越来越高的要求。
早在20世纪20年代,人们利用巴特蓝电缆图片传输系统,经过大西洋传送了第一幅数字图像。随后人们始终对图像处理技术以及它的各种应用怀有浓厚的兴趣,并对提高图像质量的技术进行了探索。1964年,美国喷射推进实验室(JPL)进行太空探测工作,他们对航天探测器徘徊者7号在1964年发回的几千张月球照片,使用数字图像处理技术,如几何校正、灰度变换、去除噪声等方法进行处理,由计算机成功地绘制出月球表面地图,获得了巨大成功,为人类登月创举奠定了坚实的基础。
随着数字集成电路技术的不断发展,以及现代图像处理技术的在理论和应用上的重大进展,图像处理技术逐渐表现出以下几个方面的发展。
1)图像处理的网络化
随着网络数据库的不断发展,图像处理系统走出了一人一机的圈子,服务器/客户机、Internet、浏览器、网络数据库……图像处理系统变大了,资源也越来越丰富,知识的挖掘、图像的浏览、基于内容的查询、以网络为中心的系统结构等挑战型课题不断涌现,图像处理网络化无疑是众多新技术中影响巨大的技术之一。
2)图像处理的复杂化
图像处理技术的疑难问题很多而且极其复杂,如:文字识别技术,图像压缩技术,以及超低码率的图像解码技术和模糊图像的复原等都是需要长期研究的课题。随着图像处理技术的快速发展,以及硬件的不断进步,这些复杂问题将出现新的突破。
3)处理速度的高速化
图像处理的速度受到多方面条件的制约,由于纯软件达不到视频的实时处理的速度。随着PCI总线的引入,活动视频图像能够被送入内存中,特别是Intel公司1995年提出的NSP (native signal proccessing,自然信号处理)技术,1997年推出的含57条指令的MMX (multimedia extensions)指令集和1999年推出的含70条指令的SSE (streaming SIlVID extensions)指令集,这些重大举措使图像界成为直接受益者,计算机处理图像的速度由此有了显著提高。
实时图像处理通常涉及到大量的运算,需要很高的计算速度、存储容量和数据带宽。这对基于传统应用而设计的通用处理器而言,是个巨大的负担。因此,以往多采用价格比较昂贵的专用图像处理芯片来满足需求。专用的图像处理器件主要有专用集成芯片ASIC(Application Specific Integrated Circuit)、数字信号处理器DSP(Digital Signal Process)和现场可编程门阵列FPGA(Field Programmable Gate Array)以及相关电路组成。它们可以实时高速完成各种图像处理算法。
FPGA器件是当今运用极为广泛的可编程逻辑器件。FPGA器件在结构上具有逻辑功能块排列,可编程的内部连线连接这些功能模块来实现一定的逻辑功能。工作时,这些配置数据存放在片内的SRAM中。使用SRAM的FPGA器件,在工作前需要从芯片外部加载配置数据,配置数据可以存储在片外的EPROM或其他存储体上,设计者可以控制加载过程,在现场修改器件的逻辑功能,即所谓现场编程。FPGA有很强的灵活性,可以根据需要进行重构配置,有较强的通用性,适于模块化设计;同时其开发周期短,系统易于维护和扩展,适合实时的信号处理,能够大大提高图像数据的处理速度,满足系统的实时性要求。与此同时,FPGA自身也在迅速发展,其集成度、工作速度不断提高,包含的资源越来越丰富,可实现的功能也越来越强。随着EDA技术的不断发展,FPGA依靠其真正的硬件并行性和极大的灵活性,以及能够迅速占领市场的巨大优势,已经得到了广泛的应用。尤其在视频图像处理中,需要对大量的高速、并行的视频流数据进行实时处理,FPGA更能发挥其独有的优势。FPGA在以下方面有着独特的优势:
(1)并行性:FPGA就是特殊的ASIC ,所以FPGA具有ASIC的大部分共性,FPGA还有其自身的特点,FPGA可以很容易的实现并行处理,可以完成大规模复杂数据的运算。在视频处理中,视频的编码和解码,压缩与解压缩都需要大量的乘
法运算,FPGA提供的大量硬件乘法器可以很好的解决这个问题。2008年北京奥
运会上,大规模的视频处理都是采用ALTER公司提供的Cyclone II实现的。
(2)可编程性:可以根据用户的个性化需要进行不同的设计,并且可以多次
反复擦除,编程使用还可以在外围电路不改变的情况下通过不同的RTL(寄存器
传输级)就可以实现不一样的功能,所以使用FPGA能快速占领市场。
(3)高集成性:现阶段,有的公司的FPGA芯片,有的已经集成了AD,达到了数模混合,这样可以大大的减少外围芯片个数,有的FPGA还集成了多个数字 。
做了几个,这里先上传几个大家研究下。实验使用的是AC620 FPGA开发板 + 5寸显示屏 +OV5640摄像头模块,实际上使用4.3寸显示屏直接插上也能显示图像,不过只能显示局部。这里先放5个例子,后面做出新的了再补。AC620_OV5640V2_SDRAM_TFT800_30FPS_R_G_B_gray 直接使用RGB图像的单一颜色通道R色作为图像的灰度输出。非常简单。 AC620_OV5640V2_SDRAM_TFT800_30FPS_RGB_ycbcr_gray 把RGB图像转换为Ycbcr图像后,取Y分量,也就是亮度分量来作为灰度图像显示,这才是最正统的灰度图像。 AC620_OV5640V2_SDRAM_TFT800_30FPS_RGB_ycbcr_gray_inversion 这个嘛,就是上一个实验RGB转Ycbcr之后,得到灰度图像,然后做了一个亮暗反转,啥意思呢?之前图像最暗的部分,变换为最亮的,最亮的变成最暗的,图像效果就类似于相机底片了。个人感觉,这个实验就是我拿来凑数的。当然,实际应用价值还是有的。嘘。 AC620_OV5640V2_SDRAM_TFT800_30FPS_median_filter 均值滤波,把相邻几个像素的颜色值拿来求个平均,这就叫均值滤波,类似数学里面,5个数字:1、3,那么中值就是(1+3) / 2,就是2罗。整个滤波过程用到了3*3矩阵模版的概念,还是有点技术含量和知识含量的 AC620_OV5640V2_SDRAM_TFT800_30FPS_sobel sobel滤波算法实现边缘检测。提取出图像的边缘信息,这个还是蛮有用的,很多做图像识别的,都是先整出图像边缘了,再根据边缘做相关算法,来识别物体是个啥的。
下图就是sobel边缘检测的效果图了,上边是实物图,下边是经过开发板程序进行检测后的图像。
下载地址:
链接: https://pan.baidu.com/s/1QVlKG-hbvrbAUqdXSMTSmA
提取码: dy8t