1、12|电子制作 2023 年 6月电子电路设计与方案0 引言图像的边缘,也称图像轮廓,是一种重要的视觉信息。作为图像分析处理、计算机视觉的基本步骤,图像边缘检测结果的准确性将直接影响到机器视觉系统对客观世界的理解1。在机器视觉领域,图像边缘检测常用的算子包括Sobel 算子,Canny 算子,Prewitt 算子和 Robert 算子2,各类算子针对不同情景,其使用各具优势。其中,Sobel 算子较其他算子有更高的边缘检测精度和抗躁能力,对于各类图片边缘检测有较强的泛化能力和鲁棒性而被广泛应用3,但传统的 X,Y 两方向的 Sobel 算子对图像边缘信息的提取能力仍然有限,在检测水平、竖直以外
2、方向的边缘信息时,容易引入噪声或检测失败4-5而降低识别准确率。同时,无论边缘检测算法使用哪种算子,其先决条件都是图像本身要清晰可辨,算法对待处理图像的光照条件,明亮程度有一定要求。当待处理图像总体色度偏低,光照条件不足或者光照分布极其不均匀,应用边缘检测算法得到的识别准确率将大大降低6。由此,本文提出了一种在 FPGA 平台搭建的,基于直方图增强与 8 方向 Sobel 算子的图像边缘检测系统,能够快速,准确地提取缺乏光照条件下所拍摄图片的边缘信息。1 算法原理分析 1.1 直方图均衡化直方图均衡化则是一种用于增强动态范围偏小图像的对比度的算法。图片拍摄时光照过强过弱在其灰度统计直方图上的反
3、映:灰度集中于高亮部分和低亮部分,如图1所示,图片整体色度偏暗,统计直方图所含灰度值频次集中于低灰度部分,图片中诸如人脸轮廓,前景与背景差等细节部分难以突出。对于此类图片使用直方图均衡化算法,可以将灰度图像的直方图分布重新映射为均匀分布,增强图像对比度从而使图像细节信息更为突出7,如图 2 所示。图 1 低色度图片与直方图 图 2 直方图均衡化结果直方图均衡化基于对灰度图像的统计直方图,以 256灰度级图像为例,所谓统计直方图,就是遍历灰度图每个像素,统计每个像素灰度级的出现频次,数学表达如式 1,ni为灰度值 i 对应的出现频次,N 为图像总像素数。Pr,0,255iiniN=式(1)而直方
4、图均衡化本质是改变灰度值的概率分布使其成为均匀分布,需要借助变换函数对原分布进行操作。由概率论理论推导可知,以函数 P 的累积分布概率函数作为变换函数 Sk,其分布满足均匀分布,数学表达如公式 2。00Pr,0,255kkikiiinSkN=式(2)因此,在原统计直方图的基础上,对频次进行累加,得到图片累计直方图,该分布即为直方图均衡化的目标函数,而累计直方图得到的结果是灰度级累计概率,因此需要将结果乘总灰度级个数完成映射。1.2 8 方向 sobel 边缘检测算法图像的边缘是指其图像灰度值或纹理结构等信息的突基于 FPGA 的模拟欠光环境下图像边缘检测系统的设计与实现王相超,陈龙,颜斌(杭州
5、电子科技大学 电子信息学院,浙江杭州,310018)摘要:为了解决在传统嵌入式平台搭建边缘检测算法带来的算力负担以及图像边缘检测算法对光线条件的苛刻要求问题,设计并实现了基于FPGA的模拟欠光环境下图像边缘检测系统。FPGA的并行运算操作非常适合于图像处理算法,大幅提升了算法运行效率。系统使用EP4CE10F17C8N芯片作为主控,通过ROM储存待处理的原始欠光环境下的图片,经过灰度化,进行直方图统计与均衡化对原始图像进行增强,利用移位寄存器生成图像33模板,对增强后的图像进行高斯滤波,再使用改进型8方向Sobel边缘检测算法提取图像边缘信息,最后使用VGA模块显示图像处理的结果。较之传统算法
6、,系统使用改进型算法提高了对边缘信息的提取程度,整个系统运行对光照条件的鲁棒性大幅提升。关键词:FPGA;直方图均衡化;8方向Sobel边缘检测;VGA显示DOI:10.16589/11-3571/|13电子电路设计与方案变位置,而 Sobel 算子在设计原理上为一阶离散差分算子,为大小固定的方阵。算子通过与图像子模板的卷积运算8(式3)可以计算灰度图像的近似梯度值。经典的 Sobel 边缘检测算法包括水平 X 方向与竖直 Y方向两个算子,算子常选用的模板尺寸为 33,如图 3 所示。X 方向算子以中间列作为基准,计算左右两列卷积的差值,在计算机中,差分运算等价于微分运算,即可求出图片X 方向
7、梯度值。Y 方向运算同理。最终将 X,Y 方向得到的梯度信息进行求和,与设定的阈值相比得到边缘信息。-101-202-101(a)x方向-1-2-1000121(b)y方向a1a2a3b1b2b3c1c2c3(c)33图像矩阵 图 3 传统 Sobel 算子 1313131231232222xyGaabbccGaaaccc=+=+式(3)-1-2-1000121(a)0-1-20-101012(b)45-101-202-101(c)90012-1012-10(d)135121000-1-2-1(e)18012010-10-1-2(f)22510-120-210-1(g)2700-1-210-1
8、210(h)315 图 4 8 方向 Sobel 算子由于传统的 Sobel 算子仅计算水平与垂直两个方向的图像灰度梯度,会导致边缘检测不连续或不够准确。改进型的 8 方向 Sobel 算子较之传统算法,共使用到 8 个方向 Sobel 算子。一一对应于图像33模板360范围内的均匀划分空间。使算法能够充分地提取图像边缘信息9。算子模板如图4所示。在确定所使用的算子后,边缘检测算法流程如图 5 所示。经过图像灰度化与模板获取后,将每次计算得到的 8 个方向的梯度值求平方和再开根号(式4),每个结果 Out 与算法设定的阈值 threshold 相比较进行二值化,获得图像边缘信息Edge(式 5
9、)。图像灰度化3*3模板生成8方向Sobel卷积模板梯度平方和求根阈值比较边缘检测结果G0G45G90G135G180G225G270G315图 5 算法流程图 360245 iiOutSqrtG=式(4)1,0,OutthresholdEdgeelse =式(5)2 系统总体结构设计与工作原理系 统 使 用 Inter 公 司 旗 下 Cyclone 4 系 列 芯 片 EP4CE10F17C8N 作为主控,普通逻辑资源丰富,拥有约10k 的逻辑单元。通过晶振电路可产生 50MHz 方波,经过锁相环 PLL 分频产生 33.3MHz 时钟用于驱动 VGA 显示屏。使用 ROM 模块用于存储原
10、始的 BMP 图片,使用两个 RAM用于进行灰度直方图统计与均衡化,使用若干按键用于显示系统各环节图像处理的结果。VGA 分辨率使用 800480。总体结构如图 6 所示。系统仿真电路设计图如图 7 所示。FPGA时钟分频VGA显示VGA驱动TFT LCDFPC排线 图 6 系统总体结构图sys_rst_nlcd_bllcd_pll:u_lcd_pllaresetinclk0c0lockedrst_n_wsys_clklcd_pclklcd_driver:u_lcd_driverlcd_clksys_rst_npixel_data23.0lcd_bllcd_delcd_hslcd_pclklc
11、d_rstlcd_vslcd_rgb23.0pixel_xpos10.0pixel_ypos10.0lcd_rgb23.0k1lcd_rstk2k3lcd_dek4lcd_vsk5lcd_hslcd_display:u_lcd_displayk1k2k3k4k5lcd_clklcd_delcd_hslcd_vssys_rst_npixel_xpos10.0pixel_ypos10.0pixel_data23.0图 7 系统电路图14|电子制作 2023 年 6月电子电路设计与方案系统经过初始化,首先从 ROM 模块中读取存储的 BMP图片,经过图像放大后进行灰度化处理,使用两个 RAM 模块分
12、别用于直方图统计与累计直方图计算,经过归一化处理后得到图像增强的结果,使用按键 1 显示于显示屏上。使用高斯卷积核对增强图片进行滤波,结果使用按键 2 显示。取滤波后的图像 33 模板分别与 8 方向 Sobel 算子进行卷积,求出梯度和与阈值比较,得到边缘检测结果,使用按键3 显示。3 FPGA 模块化设计与仿真 3.1 ROM 图像读取与放大本系统使用 FPGA 内置的 ROM 模块对原始图片进行储存与读取,其集成电路如图 8 所示。ROM 存储图片的 mif 文件信息,模块包括两个输入端口,时钟输入与地址端输入,输出为对应地址的图片数据。图片 mif 文件使用 BMP2Mif 转换软件生
13、成,原图为RGB888 格式的 BMP 图片,生成 mif 文件对应的输出数据大小为 24bit。由于系统自带 ROM 模块进行数据存储的容量有限,最多可以保存 200200 大小的图片,影响结果观感。因此,设计了图片放大算法,输入图片为 100100,在显示时扩大至 800480。图片放大算法利用其显示原理,VGA 屏幕横坐标位置每 8 个坐标单位显示实际图片的同一坐标信息,纵坐标位置每4.8个坐标单位显示实际图片同一信息,算法公式如公式6。()()_/8_*5/24*100romaddrpixelxpospixelypos=+式(6)式中 rom_addr 为 ROM 的输入地址,每个地址
14、保存图片一个像素信息,pixel_xpos 为 VGA 屏扫描的横坐标,pixel_ypos 为对应纵坐标。100 为输入图片的宽度。3.2 图像灰度化与直方图均衡化3.2.1 图像灰度化设计由于从 ROM 中读取的为 BMP 图片,如果直接进行边缘检测 则是对 RGB 三通道色彩进行单独检测,但是各原色在同一像素位置的梯度大小方向可能各不相同,得到的边缘信息也不同从而发生检测错误。因此需要将图片转换为单通道,即灰度化。RGB 灰度化公式如下:*0.299*0.587*0.114GrayRGB=+式(7)而 FPGA 进行浮点运算较为复杂,因此这里采取乘加与移位的近似计算。23:16(*195
15、95_15:8*38469_7:0*7472)16datagrayromromdataromdata 式(8)rom_data 共 24bit,每 8bit 对应原图一个通道。完成了对原图的灰度化。3.2.2 直方图均衡化设计在设计上,系统使用两个单端口 RAM 模块对数据进行存储来完成直方图与累计直方图的统计。RAM 模块集成电路如图 9所示。第一个 RAM 用于对原始直方图进行统计,地址端从0255依次遍历,当对应位置图像像素灰度值与地址匹配时,写入的 data 数据自增 1,当遍历完整幅图像也就完成了对原始灰度图的直方图统计。第二个 RAM 用于计算累计直方图,当从 RAM1 中读取的
16、data 数据不为 0 时,对写入数据进行累加,再通过归一化完成直方图均衡化(式 9)。式中ram_data_sum为累计直方图中灰度的累计频次,10000 为原图总像素数,255 为总灰度级。gray_s 为均衡化后的灰度值。()_/10000*255graysramdatasum=式(9)仿真波形如图 10 所示。第一行为 RAM 输入时钟,第二三行分别为原图灰度值与直方图均衡化后的灰度值。图 10 直方图均衡化仿真结果12thdata11thdata10thdata9thdata8thdata7thdata6thdata5thdata4thdata3rddata2nddata1stdatashiftin 7.0taps31.0shiftout 7.0 图 11 移位寄存器生成图像模板 3.3 图像高斯滤波与 Sobel 边缘检测3.3.1 图像 33 模板获取FPGA 中图像数据的保存形式是串行数据流,通过使用带 taps 的移位寄存器模块,将串行数据转化为 33 的模图8 ROM模块图9 RAM模块|15电子电路设计与方案板数据。每次取图片 3 个像素点信息于寄存器中,在第二个