APP下载

基于FPGA实现二维卷积滤波器的图像处理

2021-02-06周先春郭亮可

现代电子技术 2021年4期
关键词:彩色图像图像处理灰度

周先春,郭亮可,邹 宇,朱 雯

(1.南京信息工程大学 电子与信息工程学院,江苏 南京210044;2.南京信息工程大学 江苏省大气环境与装备技术协同创新中心,江苏 南京210044)

0 引 言

随着计算机视觉、多媒体应用的迅速发展,人们对图像处理技术的要求越来越高[1]。FPGA能够满足计算量大和计算结构、类型相似的应用[2]。由于FPGA的自身特点以及科技的进步与发展,在数字图像处理中FPGA越来越占据优势,并将会成为信号处理的主流。

当前,国内外学者在图像处理领域也进行了很多相应的研究,在图像去噪[3-5]、图像分割[6-7]、图像边缘检测等方面都有重要技术突破。

Perona和Malik在1990年率先建立一个二阶偏微分处理模型,其能够有效地完成在图像的噪声滤除以及图像边缘的提取间的平衡。文献[8-9]等提出的去噪方法,能够保护图像的纹理特征,但计算复杂、运行效率慢;Fedorov V和Ballester C采用非本地仿射的方法构造图像去噪的研究模型[10];Ma Z B等采用二维的滤波器矩阵即卷积核在二维图像进行滑动滤波,对于图像的每一个像素点,计算与它的相邻的像素数据和卷积核上对应权重值的乘积[11];Farouj Y等采用双Fisz波进行图像去噪研究[12];文献[13]也对在FPGA端映射数字图像处理算法进行了研究。

本文提出基于FPGA实现多种二维卷积滤波器的综合图像处理方案,从算法方面研究二维卷积滤波器的性能提高方案。在FPGA平台进行相关算法映射,从而完成图像处理,由此可以进一步从减少占用硬件资源、提高运算速度等方面有效提高图像处理的性能。本文同时完成了将实现的二维卷积滤波器应用到RGB彩色图像的处理、图像的灰度转换以及图像的Sobel算子的边缘检测工作,有一定的研究意义和实用价值。

1 基于二维卷积核的系统设计方案

1.1 系统总体概述

本文主要以3×3卷积核为例,将卷积核在FPGA端实现映射,并将实现的卷积核加以应用。样本图像先通过Matlab进行预处理,生成可初始化ROM的.mif数据文件,随后FPGA生成原图像数据和处理后数据供TFT触摸屏显示。

1.2 二维卷积核设计方案

1.2.1 空间域卷积

这里通过空间域方法在硬件上实现图像的二维卷积滤波处理。本文采用图解掩膜法,先将某一离散矩阵的掩膜翻转180°,再将其在另一离散矩阵的掩膜上进行滑动求对应乘积和,在图像处理领域中,即为图像矩阵与一个卷积核矩阵的卷积运算。对于图像的每一个像素点,先计算与其相邻的像素数据和卷积核上对应权重值的乘积,然后再将这些乘积累加作为该位置的新像素值。

1.2.2 图像边界处理

当对图像边缘进行滤波时,卷积核的一部分会超出图像边界部分。

设输入图像矩阵为I,本文假设输入图像矩阵I是无限大的,经卷积滤波器处理之后的新图像矩阵为J。超出该指定图像边界的部分是用图像的边界值无限延伸的,此时J(1,4)=(-1)+0+1+(-1)+0+1+(-3)+0+7=4;此方法不会在图像边界处理时产生较大的颜色跳变,能够结合本文的硬件设计特点,在第二种边界填充方案的基础上加以调整,采用硬件实现图像的边界填充。

1.2.3 卷积核处理流程

图1 为本文着重研究的基于FPGA进行映射的二维卷积核流程。

1)逐像素读取单端口ROM中的图像数据,图像数据事先通过Matlab软件编写的程序存入.mif文件中,由其对ROM进行初始化。

图1 卷积核处理流程图

2)从ROM中读取的图像数据逐像素进入Shift-RAM中,Shift-RAM包含3条Taps,每条Taps的长 度 为N,与图像宽度一致。当每条Taps中数据填满,在继续推进的过程中,每个时钟周期会输出最右侧的像素数据。

3)三条Taps分别抽头逐像素输送图像数据形成3×3矩阵,进入Altmult-Adder中与卷积核对应位置的权值进行乘法累加计算。

4)三个Altmult-Adder的计算结果并行进入Parallel-Adder中再次相加,输出所得结果。

1.3 整体系统设计

整个系统涵盖了二维卷积滤波器的设计以及应用。其中,RGB彩色图像处理是对128×128像素的RGB565格式的彩色图像进行处理;灰度处理部分的对象同样是RGB565格式的彩色图像,对其进行处理输出灰度图像;边缘检测的对象是灰度处理部分输出的灰度图像,采用Sobel算子对其进行边缘检测。在彩色处理模式下可以对图像处理的卷积核进行选择,得到不同的处理效果;在边缘检测模式下可以对检测的阈值进行设置,得到不同效果的处理结果。系统的整体流程如图2所示。

1.3.1 RGB彩色图像处理设计方案

基于RGB彩色图像的每一个像素由R(Red),G(Green),B(Blue)三个通道的数值同时定义。一般彩色图像的每一个像素为24 bit,即R,G,B分别为8 bit。为节省资源,本文所处理的为128×128像素的RGB565图像,即R,B通道为5 bit,G通道为6 bit,一共16 bit,故一个像素可减少占用8 bit的资源,一幅128×128像素的图像共可节省131 072 bit资源。

图2 系统整体流程

1.3.2 灰度图像处理设计方案

由于彩色图像的每一个像素点都是有R,G,B三个通道的值决定的,而灰度图像的每一个像素只有一个采样颜色的值。本文选择加权法中的移位法对三通道的加权整合,此方法是考虑到颜色值在计算机中是以二进制形式保存的,所以为了方便对权重进行放大处理时应取2的幂次方倍,一般放大256倍,即:

对二进制数据进行缩小256倍等同于数据左移8位,从而实现彩色图像转灰度图像的操作。

1.3.3 边缘检测处理设计方案

将X卷积核和Y卷积核分别与图像像素矩阵进行二维卷积滤波操作,所得结果分别为Gx和Gy,再将其分别平方的和开根号得到最终结果,即最后还需进行阈值判断,才算完成边缘检测。若G大于阈值则判断其为边缘,将其赋值使其显示白色,最后将得到显示白色边缘的黑底二值图像。

2 基于FPGA的系统设计实现

2.1 系统顶层架构

本文以QuartusⅡ13.1作为软件开发平台,以ALINX的AX415开发板作为硬件开发平台实现了图像的二维卷积滤波处理。开发板FPGA芯片提供的是Altera公司的cyclone IV EP4CE15F17C8N芯片。系统由ROM存储、二维图像处理和TFT触摸屏显示三个子部分组成。其中各个子系统完成以下任务:

1)ROM存储。存储原始图像像素数据,在数据读取时对图像进行上下边界的像素值填充。

2)二维图像处理。以RGB彩色图像处理、灰度图像处理、边缘检测处理三种可选择的模式对128×128的RGB565图像进行图像处理。

3)TFT显示。对原始图像和滤波后图像进行显示,可切换显示不同模式的处理效果以及同一模式下不同卷积核或不同阈值的处理效果。

2.2 二维卷积核实现方案

二维卷积核要实现滑动滤波的效果所以采用移位寄存器Shift-RAM、Altmult-Adder和Parallel-Adder共同实现。卷积核架构图如图3所示,I1~I9为形成的3×3矩阵的像素数据,X1~X9为180°翻转后卷积核对应位置的权值。

图3 卷积核架构图

1)Shift-RAM支持一个时钟周期移位一个或多个bit的数据,位宽是可以设置的。工作册上Shift-RAM的移位示意图设置的行数是4行,每行的宽度是3。此处的数据抽头是将4个8 bit的数据整合成一个32 bit的数据输出。

2)Shift-RAM是以移位存储的方式工作的。后面存储的数据将前面的数据不断推进,当第1行存储空间占满的时候,再继续推向第2行存储,以此类推,先进先出,依次进行移位存。

中国土木工程学会2015年首批标准计划项目《建筑工程信息交换实施标准》由联盟成员单位主编。《标准》结合了我国建筑工程实践特点,全面梳理、系统规划了建筑工程全生命周期P-BIM技术体系,分布式BIM模型体系及建模、应用软件体系,以指导我国自主知识产权的BIM建模和应用软件开发,实现数据互用。标准已通过审查,即将报批。

设置Shift-RAM移位寄存器的仿真时将Shift-RAM的每一行的宽度设为3,可以看出Taps0x先推满数据,之后原先Taps0x中的数据再继续推进Taps1x,以此类推,当3条Taps都推满了数据时,每条Taps同时抽头3次可以生产3×3数据矩阵。因为形成的3×3矩阵不是按照1~9的顺序,而是先输出7,4,1三个数据,下一个时钟周期输出8,5,2三个数据,第3个时钟周期输出9,6,3三个数据,因此经过180°翻转后的卷积核中的权值也应按此顺序对应相乘。

实际生成数据矩阵的大小是卷积核大小决定的,而实际每行的宽度需要与所处理图像的数据宽度保持一致。本文所需处理的图像尺寸为128×128,故移位寄存器宽度设置为128。下图所示是当每条Taps宽度为128,一个时钟周期为100 ps时,0 ps开始读取地址数据,延迟50 ps开始输出第一个地址的数据,第12 850 ps时第一条Taps即Taps0x开始抽头输出第一个数据。

2.3 RGB彩色图像处理的实现

RGB彩色图像处理的实现除调用卷积核之外,还包含数据判值以及数据整合。

1)调用卷积核。R,G,B三通道分别调用一个卷积核实现通道的卷积滤波处理。因为三通道位宽不同,所以应调用位宽相匹配的卷积核,即R,B通道调用5 bit的卷积核,G通道调用6 bit的卷积核。

2)数据判值。R,G,B三通道分别进行判值。使每通道输出数值在0~31(63)之间。

3)数据整合。将R,G,B三通道值分别作为高5位、中6位、低5位进行整合。

2.4 灰度图像处理实现方案

灰度图像处理的顶层模块的数据输入同样来自ROM的数据读取输出,因此对应的数据输入端口同样命名为rddata_r0;clken_p端口为输出有效数据标志端;odata为16 bit数据输出端。灰度图像处理部分仅包含乘法、加法等简单运算,计算复杂度低,因此当clken置高时延迟200 ps左右即能输出有效数据。

2.5 边缘检测处理实现方案

边缘检测处理除调用一个6 bit的卷积核之外,另调用了QuartusⅡ13.1自带的开根号IP核,该IP核的输出结果还需进行阈值比较才能得到边缘检测的最终结果。边缘检测处理的输入为灰度图像,由灰度图像处理得到的图像数据R,G,B三通道数值相近,故取G通道数据进行边缘检测处理即可,因此只需调用一个6 bit的卷积核。

边缘检测处理的顶层模块的数据输入来自灰度图像处理模块的输出,即16 bit灰度图像数据;iTHRESHOLD为阈值,范围为0~256可自定义,大于阈值的数据即认为白色边缘,其余显示黑色;clken_p端口同样为有效数据输出标志端;Abs_mag为的结果,即所调用开平方IP核的输出,输出观察Abs_mag的输出值可以检查sobel算子对图像的处理情况;odata端口为16 bit二值图像的数据输出,输出非0即65 535,即16位全部为0或1。

3 系统调试与实验结果

3.1 RGB彩色图像处理模式

3.1.1 卷积核为[0,0,0;-1,1,0;0,0,0]

该卷积核为平移卷积核,可用于水平边缘检测,由于卷积核权值之和为0,所以处理完的整体图像亮度较暗,如图4所示。经对比,两者均能明显展示出图像中较为水平的边缘,但本文方案对人物帽檐的水平边缘检测效果更为平滑。对比FPGA,Matlab所处理的图像最右侧有未处理的图像痕迹,且图像最左侧边界有缺失,因为Matlab直接用卷积核对图像进行处理,无法对图像边界做填充处理,所以实际参与卷积的图像像素为高度和宽度的第2~第127个像素,因此有像素缺失和未处理的痕迹,整体效果不及本文方案。

图4 卷积核为[0,0,0;-1,1,0;0,0,0]时两方案处理结果图与原图对比

3.1.2 卷积核为[1,1,1;1,-7,1;1,1,1]

该卷积核起图像锐化滤波的作用,本文方案和Matlab方案的处理效果较为接近,无明显差异.因为该卷积核权重值之和为1,因此处理完后的图像亮度与原图一致,更方便与原图进行比较,如图5所示。Matlab所处理的图像边缘右侧和下侧有更为明显的黑线,同样是因为Matlab中的卷积处理无法覆盖图像的所有像素,而本文方案在图像读取和处理中能够对边界进行像素值填充。一方面使得卷积处理覆盖了所有图像像素,使得处理完的图像尺寸不变;另一方面在图像边界进行卷积运算时,不会产生较为突兀的像素值跳变,因为涉及到的边界外的像素是以对应边界上的像素值填充的,处于同一色阶。

图5 卷积核为[1,1,1;1,-7,1;1,1,1]时两方案处理结果图与原图对比

3.2 灰度图像处理模式

两种方案的灰度图像处理除图像亮度有区别外,均未有明显失真,处理效果均较好。理论上讲,Matlab的处理不仅实现了转灰度处理,且没有改变图像原来的亮度水平。而本文方案虽然实现了灰度处理的目标但是使图像的亮度产生了变化。

两种方案均是采用0.299R+0.587G+0.114B的加权平均法将彩色图像转化为灰度图像的,但是Matlab中可以直接对像素数据进行浮点运算,而本文FPGA方案不能直接进行浮点乘法,是通过先放大后缩小的移位法实现以上加权平均的。

R,G,B三通道的权值分别放大为77,150和29,说明放大倍数有误差,另外在灰度值计算完成后将其赋值给R,G,B通道时,R通道和B通道均是取 左移8位 后 的高5位,而实际左移8位后数据还有6位。若此时数据值较小,仅取高5位会造成较大的误差,放大倍数的误差和取值的误差造成了最终处理结果的区别。两方案灰度图像处理结果如图6所示。

图6 两方案灰度图像处理结果

3.3 边缘检测处理模式

1)本文基于FPGA硬件实现方案在阈值为20,25,35时图像处理结果图如图7所示。

2)Matlab中调用edge函数,直接采用Sobel算子处理完成的图像。Matlab编程先实现Sobel算子对图像的处理之后经阈值比较得到的图像处理结果如图8所示。处理阈值分别为60,130,160。

图7 本文方案边缘检测处理结果

图8 Matlab边缘检测处理结果

对比以上两组方案的处理效果,第二组方案处理效果与本文方案处理效果较为类似,随着阈值增大,图像重要边缘的检测越清晰,但是会有部分边缘缺失的现象。因为本文方案在图像数据经过Sobel算子处理后并未对负值和溢出数据进行判断和处理,而是直接进行平方和开根号操作。

在根号操作后这些数据虽然能够正确展示出图像边缘,但是会因为溢出而显色变成蓝色边缘,因此在判断时所需的阈值较小。因为图像最终都会经过阈值比较流程,作为二值图像显示,因此只会对阈值大小有影响,不会对图像的边缘检测产生较明显的影响;而在Matlab中,edge函数直接调用Sobel算子进行边缘检测,在阈值为0.76时获得最佳效果,可以明显看出第二种方案的图像边缘更纤细。

4 结论

本文通过二维卷积核运算,在FPGA硬件端映射了RGB彩色图像处理,灰度处理和Sobel算子边缘检测处理三个模式,并在每种模式下进行多种情况运算,将其不同数据结果与Matlab的理想仿真结果进行比对,得到以下结论:

1)在RGB图像处理模式下,FPGA可以保证更加满意的处理结果,其对样本图像的边缘信息保持相对完整,且不容易失真。

2)在进行灰度图像处理时,FPGA的处理效果稍逊于Mtalab仿真效果,这是由于在实际硬件平台环境下,数据多要进行浮点数转换,以此保证最高计算性价比;

3)在进行边缘检测时,都采取Sobel算子的情况下,FPGA的处理结果与Matlab仿真结果类似。综上所述,本文在FPGA硬件平台下映射了多种基于Matlab进行图像处理仿真的二维卷积应用,故此能够说明基于FPGA平台实现图像处理二维卷积算法的高效性与实用性。

猜你喜欢

彩色图像图像处理灰度
采用改进导重法的拓扑结构灰度单元过滤技术
基于灰度拉伸的图像水位识别方法研究
基于FPGA的实时彩色图像边缘检测
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
基于最大加权投影求解的彩色图像灰度化对比度保留算法
基于灰度线性建模的亚像素图像抖动量计算
基于图像处理的定位器坡度计算
基于颜色恒常性的彩色图像分割方法
Photo Shop通道在图像处理中的应用