Download presentation
Presentation is loading. Please wait.
Published byVerawati Lesmana Modified 6年之前
1
第12章 图像边缘检测器的设计与分析 12.1 系统设计要求 12.2 系统设计方案 12.3 主要LPM原理图和VHDL源程序
第12章 图像边缘检测器的设计与分析 12.1 系统设计要求 12.2 系统设计方案 12.3 主要LPM原理图和VHDL源程序 12.4 系统仿真/硬件验证 12.5 设计技巧分析 12.6 系统扩展思路
2
12.1 系统设计要求 在嵌入式图形系统处理领域,图像处理的速度问题一直是一个很难突破的设计瓶颈。一般情况下,控制领域及数据处理领域几乎是单片机和数字信号处理器的天下,但是在数据处理量大,实时性要求更为苛刻的场合,传统的MCU根本无法适应实时大批量数据处理场合,而DSP虽然具备指令流水线和很高的处理速度,但是由于其本质仍然是依靠串行执行指令来完成相应的图像处理算法的,所以其处理速度依然很受限制。
3
图12.1是一个DSP+FPGA/CPLD的图像处理系统的总体框图,其中图像传感器CCD的主要功能是获取外界图像的各个像素点灰度值;图像主处理器采用数字信号处理器DSP,主要负责对图像传感器传送的灰度信息进行存储,并负责调用协处理器进行边界像素判别,找出我们感兴趣的目标对象,从而得到该对象的运动信息,以便控制执行装置进行位置跟踪;边缘检测协处理器为FPGA/CPLD,主要完成主处理器传送过来的像素的边界判别,并把处理结果返回到主处理器中。
4
图12.1 DSP+FPGA/CPLD图像处理系统的组成框图
5
在本系统中,系统的设计指标为:数据吞吐量>10 Mb/s;动态响应时间<100 ms/frame。主处理器初步选用德州公司的DSP芯片TMS320C5402,协处理器拟采用ALTERA公司的FLEX10K20。图像处理系统的接口关系如图12.2所示,其中FLEX10K20的接口说明如下: DATA:8位数据输入端口。 WR:写有效信号输入端口。 CLK:同步时钟输入端口。
6
T_D:阈值/像素值选择端口,T_D =1时,表示输入的数据为像素阈值,为0时表示输入的数据为像素值。
CS:片选信号,低电平有效。 READY:状态查询位,为协处理器“准备好”信号输出端,低电平有效,当该协处理器处理完一帧图像后,该信号恢复有效电平,主处理器启动下一帧图像的边界处理。 MAGOUT:像素边界判别信号输出,MAGOUT为1时,表示当前像素为边界像素,为0表示为非边界像素。
7
图12.2 图像处理系统接口关系图
8
12.2 系统设计方案 算法选择 图像处理经常用于在连续图像中跟踪移动物体。它从传感器接收图像的连续流,根据输入图像的数据选择跟踪物体。初始图像不断被加强,然后进行分割,以定位物体或找出感兴趣的区域。定位物体或区域后,检查出可以最终划分物体的特征。
9
Sobel算法包括带4个3×3掩码的输入图像数据,即Sobel算子,它设置权重来检测水平、垂直、左对角、右对角各个不同方向上密度幅度的不同。这个过程通常被称为过滤。下面我们来看一个3×3的像素窗口,如图12.3所示。
10
图12.3 像素窗
11
水平、垂直、左对角、右对角各图像方向上密度幅度的变化可以用如下算子进行计算:
H=(Q0+2Q3+Q6) ? (Q2+2Q5+Q8) V=(Q0+2Q1+Q2) ? (Q6+2Q7+Q8) DR=(Q1+2Q0+Q3) ? (Q5+2Q8+Q7) DL=(Q1+2Q2+Q5) ? (Q3+2Q6+Q7) H、V、DL、DR这四个参数用于计算梯度大小和方向。 对梯度大小的一个普遍估计值为: Magnitude=Max(H, V, DR, DL)
12
算法实现 由前面所述可知,Sobel的滤波函数为 H=(Q0+2Q3+Q6) ? (Q2+2Q5+Q8); V=(Q0+2Q1+Q2) ? (Q6+2Q7+Q8) DR=(Q1+2Q0+Q3) ? (Q5+2Q8+Q7); DL=(Q1+2Q2+Q5) ? (Q3+2Q6+Q7) Magnitude=Max(H, V, DR, DL)
13
为了减少设计的复杂度,上面式子中的乘法运算可以改写成加法运算:
H=(Q0+Q3+Q3+Q6) ? (Q2+Q5+Q5+Q8); V=(Q0+Q1+Q1+Q2) ? (Q6+Q7+Q7+Q8) DR=(Q1+Q0+Q0+Q3)?(Q5+Q8+Q8+Q7); DL=(Q1+Q2+Q2+Q5)? (Q3+Q6+Q6+Q7)
14
总体设计方案 根据图像处理的知识及分析,我们可得到此边缘检测处理器的工作流程如图12.4所示。首先,DSP将从图像传感器中获取的灰度图(800×600)按照每三列划分为一帧的原则进行帧窗口划分。帧窗口的图形数据又按照每三行划分为一个像素处理窗口的原则逐一进行处理。
15
图12.4 图像处理流程示意图
16
根据以上设计思路,我们可把整个系统的实现划分为四个大的模块,其总体结构如图12.5所示。其中:
帧窗口接收模块(FIFO)负责接收DSP传送过来的一个帧窗口的数据,其本质为一个双端口先入先出栈FIFO,其数据宽度为8,深度等于一个帧窗口内的像素点个数(600×3=1800)。
17
串入并出模块(SIPO)负责把FIFO内的数据转换成为像素处理窗口的列像素向量,便于像素处理窗口的数据刷新处理。
像素窗口刷新模块(REFRESH)实现对需要处理的像素数据的刷新。 数据处理模块(PROCESSOR)是本图形边缘处理器的核心部分,主要是实现Sobel算法,其性能的好坏对整个设计的成败有着关键的作用。
18
图12.5 图像边缘检测器总体结构图
19
主要功能模块的设计 1. 帧窗口接收模块FIFO 由于高速设备与慢速设备之间处理速度的差别,它们之间的数据传输一般采用查询方式或中断方式,而数据同步传输则选择了帧同步方式。存储器的类型拟选用FIFO,堆栈空时向主机发出准备好信号,主机检测到它的数据传输请求时,传送一帧数据,由于FIFO的大小与一帧图像的大小是一致的,所以接收完毕后,堆栈满,Sobel处理器启动边缘检测进程,处理完一帧数据后,堆栈重新变为空,为下一帧数据处理作准备。其内部结构如图12.6所示。
20
图12.6 帧窗口接收模块FIFO的内部结构图
21
2.串入并出模块SIPO 串入并出模块的主要功能是负责一列像素的刷新,也就是把主处理器传送过来的像素值转换成3×3像素窗口的一列。该模块的实现主要是通过六个D触发器和一个三进制的计数器组成,当计数器产生进位溢出时,串行输入的三个像素点并行输出。其内部结构如图12.7所示。
22
图12.7 串入并出模块SIPO的内部结构图
23
3.像素窗口刷新模块REFRESH 像素刷新窗口的主要功能是接收串入并出模块的3个并行像素,把窗口中原有的第二列像素推入第三列,第一列推入第二列,新到的并行像素填入第一列。其本质为一个移位寄存器。其内部结构如图12.8所示。
24
图12.8 像素刷新模块REFRESH的内部结构图
25
4.滤波模块FILTER 对于Sobel算法的各个滤波器,H、V、DR、DL经变换后可得到: H=(Q0+Q3+Q3+Q6) ? (Q2+Q5+Q5+Q8); V=(Q0+Q1+Q1+Q2) ? (Q6+Q7+Q7+Q8) DR=(Q1+Q0+Q0+Q3)?(Q5+Q8+Q8+Q7); DL=(Q1+Q2+Q2+Q5)? (Q3+Q6+Q6+Q7) 因此我们对于滤波模块FILTER的设计可采用两级并行流水方案,其内部结构如图12.9所示。
26
图12.9 滤波模块FILTER的内部结构图
27
对于上述滤波数据的处理,在不采用流水线的情况下,像素从进入处理器到结果输出,需要经过两级加法和一级减法的时延,但是使用流水线技术后(其本质为对中间结果进行寄存),结果输出仅仅滞后三个时钟频率,但是增加了数据吞吐量,同时也提高了时钟频率。为提高加法运算的速度,本设计中的加法器采用超前进位加法器。下面对其作一个简单的回顾: SUM(I)=A(I) XOR B(I) XOR C(I?1) C(I)=(A(I) AND B(I) ) OR (A(I) XOR B(I) AND C(I?1) 令 P(I)=A(I) XOR B(I); G(I)= A(I) AND B(I)
28
其中P(I)、G(I)均与进位信号无关,则SUM(I)与C(I)可表达为
SUM(I)=P(I) XOR C(I?1); C(I)=G(I) OR (P(I) AND C(I-1))
29
5. 数据处理模块PROCESSOR 数据处理模块PROCESSOR的主要功能是求出四个方向的图像梯度数据绝对值的最大值,同时判别最大值出现的方向。其内部结构如图12.10所示, 它包括滤波器FILTER、比较器COMPARE、边界判断器RESULT和寄存器等。
30
图12.10 数据处理模块PROCESSOR的内部结构图
31
12.3 主要LPM原理图和VHDL源程序 12.3.1 LPM兆功能块定制方法简介
LPM模块的使用方式有两种:原理图调用方式和VHDL文本调用方式。下面以一个先进先出的存储缓冲器MYFIFO的设计为例介绍一下LPM兆功能块的定制方法。
32
1.原理图调用方式 先进入原理图编辑窗,再调入需使用的兆功能块(LPM_FIFO)(如图12.11所示),鼠标双击调出的兆功能块右上角的参数显示文字,然后在弹出的端口/参数编辑窗中,设定(Used)本设计要用的端口,去掉(Unused)本设计不用的端口,并对于一些需设定参数的端口,选择合适的参数(如图12.12所示)。这时基于兆功能块MYFIFO就已经定制好(如图12.13所示),在后面的设计中即可作为一个元件进行调用。
33
图 调用兆功能块示意图
34
图 兆功能块端口/参数设定示意图
35
图 定制好的兆功能块示意图
36
2.VHDL文本调用方式 首先进入MAX+plus Ⅱ兆功能块定制管理器(如图12.14所示),并选择生成或修改一个定制的兆功能块(如图12.15所示);其次选择定制的功能块名称LPM_FIFO,输出文件的格式VHDL,输出文件的路径及文件名等(如图12.16所示);接着进行数据参数选择(如图12.17所示)、端口设置选择(如图12.18所示)、数据输出控制选择(如图12.19所示)、优化方式选择(如图12.20所示)等;最后单击“Finish”即完成了MYFIFO.VHD的定制(如图12.21所示)。
37
图 进入兆功能块定制管理器
38
图 生成或修改一个定制的兆功能块
39
图 定制的功能块的路径及输出文件选择
40
图 数据参数选择
41
图 端口设置选择
42
图 数据输出控制选择
43
图 优化方式选择
44
图12.21 单击“Finish”后完成MYFIFO.VHD的定制
45
MYFIFO.VHD的源程序如下: --MYFIFO.VHD (本程序已去掉程序前后的说明注释) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MYFIFO IS PORT (DATA:IN STD_LOGIC_VECTOR (7 DOWNTO 0); WRREQ:IN STD_LOGIC ; RDREQ:IN STD_LOGIC ; CLOCK:IN STD_LOGIC ; Q:OUT STD_LOGIC_VECTOR (7 DOWNTO 0); FULL:OUT STD_LOGIC ; EMPTY:OUT STD_LOGIC );
46
END MYFIFO; ARCHITECTURE SYN OF MYFIFO IS SIGNAL SUB_WIRE0:STD_LOGIC ; SIGNAL SUB_WIRE1:STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL SUB_WIRE2:STD_LOGIC ; COMPONENT LPM_FIFO GENERIC (LPM_WIDTH:NATURAL; LPM_NUMWORD:NATURAL; LPM_WIDTHU:NATURAL; LPM_SHOWAHEAD:STRING; LPM_HINT:STRING); PORT (RDREQ:IN STD_LOGIC;
47
EMPTY:OUT STD_LOGIC; CLOCK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR (7 DOWNTO 0); WRREQ:IN STD_LOGIC; DATA:IN STD_LOGIC_VECTOR (7 DOWNTO 0); FULL:OUT STD_LOGIC); END COMPONENT; BEGIN EMPTY <= SUB_WIRE0; Q <= SUB_WIRE1(7 DOWNTO 0); FULL <= SUB_WIRE2; LPM_FIFO_COMPONENT:LPM_FIFO
48
GENERIC MAP (LPM_WIDTH => 8,
LPM_NUMWORDS => 4, LPM_WIDTHU => 2, LPM_SHOWAHEAD => "OFF", LPM_HINT => "USE_EAB=ON, MAXIMIZE_SPEED=5") PORT MAP (RDREQ => RDREQ, CLOCK => CLOCK, WRREQ => WRREQ, DATA => DATA, EMPTY => SUB_WIRE0, Q => SUB_WIRE1, FULL => SUB_WIRE2); END ARCHITECTURE SYN;
49
一些模块的LPM原理图 FIFO模块由定制的LPM模块CSFIFO、LPM_FF,标准元件AND2、NOT以及用VHDL编程编译后生成的二进制计数器COUNTER2构成,如图12.22所示。 SIPO的LPM原理图如图12.23所示。REFRESH的LPM原理图如图12.24所示。 FILTER的LPM原理图如图12.25(略)所示。PROCESSOR的LPM原理图如图12.26 (略)所示。
50
图 FIFO的原理图
51
图 SIPO的原理图
52
图 REFRESH的原理图
53
RESULT的VHDL源程序 边界判断器RESULT模块是数据处理模块PROCESSOR内部的一个子模块,其功能就是根据区分度阈值、四个滤波器的输出及其最大值进行边界的判断。其输入、输出端口如图12.27所示。
54
图 RESULT模块的输入、输出端口图
55
VHDL源程序如下。 --RESULT.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY RESULT IS GENERIC(SIZE:INTEGER:=11); PORT(CLK:IN STD_LOGIC; H, V, DR, DL:IN STD_LOGIC_VECTOR(SIZE DOWNTO 1); THRESHOLD:IN STD_LOGIC_VECTOR(8 DOWNTO 1); MAX:IN STD_LOGIC_VECTOR(SIZE DOWNTO 1);
56
MAGOUT:OUT STD_LOGIC;
DIR:OUT STD_LOGIC_VECTOR(3 DOWNTO 1)); END ENTITY RESULT; ARCHITECTURE ART OF RESULT IS BEGIN PROCESS(CLK, THRESHOLD) IF(CLK'EVENT AND CLK='1') THEN IF(MAX(SIZE-1 DOWNTO 1)>"00"&THRESHOLD) THEN MAGOUT<='1'; IF(MAX=H AND H(SIZE)='0') THEN DIR<="000";
57
ELSIF(MAX=H AND H(SIZE)='1') THEN DIR<="100";
ELSIF(MAX=V AND V(SIZE)='0') THEN DIR<="010"; ELSIF(MAX=V AND V(SIZE)='1') THEN DIR<="110"; ELSIF(MAX=DR AND DR(SIZE)='0') THEN DIR<="001"; ELSIF(MAX=DR AND DR(SIZE)='1') THEN DIR<="101"; ELSIF(MAX=DL AND DL(SIZE)='0') THEN DIR<="011"; ELSIF(MAX=DL AND DL(SIZE)='1') THEN DIR<="111"; END IF; ELSE MAGOUT<='0';DIR<="000"; END PROCESS; END ARCHITECTURE ART;
58
COMPARE的VHDL源程序 比较器COMPARE模块是数据处理模块PROCESSOR内部的一个子模块,其功能就是根据两个输入参数求出其最大值。其输入、输出端口如图12.28所示。
59
图 COMPARE的输入、输出端口如图
60
VHDL源程序如下。 --COMPARE.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COMPARE IS GENERIC(SIZE:INTEGER:=11); PORT(DAT1, DAT2: IN STD_LOGIC_VECTOR(SIZE DOWNTO 1); MAX: OUT STD_LOGIC_VECTOR(SIZE DOWNTO 1)); END ENTITY COMPARE; ARCHITECTURE ART OF COMPARE IS
61
BEGIN PROCESS(DAT1, DAT2) IF( DAT1(SIZE-1 DOWNTO 1) > DAT2(SIZE-1 DOWNTO 1) ) THEN MAX<=DAT1; ELSE MAX<=DAT2; END IF; END PROCESS; END ARCHITECTURE ART;
62
系统的总体组装设计 请读者根据图12.5的总体结构图自行完成。
63
12.4 系统仿真/硬件验证 12.4.1 系统的有关仿真 1.FIFO的仿真
12.4 系统仿真/硬件验证 系统的有关仿真 1.FIFO的仿真 (1) 仿真激励源:同步时钟CLK,写使能WE,八位数据输入端口DATA; (2) 仿真期望结果:当主处理器向FIFO写完一帧像素点数据后,READY信号输出值为零,同时,FIFO封锁输入通道,外部数据不能再写入FIFO。
64
(3) 仿真结果及分析:FIFO的仿真结果如图12. 29所示。从图中可以看出,主处理器写完四个像素点数据后,Q[8
65
图 FIFO的仿真结果
66
2.SIPO的仿真 (1) 激励源:同步时钟及外部输入像素的灰度信息。 (2) 期望结果:把串行数据转换为并行数据,而且输出的并行数据必须保持到第三个串行数据输入的时刻以前。 (3) 仿真结果及分析:SIPO的仿真结果如图12.30所示。由图中可以看出,如我们将串行数据每三个划分为一段,QA、QB、QC恰好是这一段的并行输出,符合设计期望。
67
图 SIPO的仿真结果
68
3.REFRESH的仿真 REFRESH模块在系统中的主要作用是实现像素处理窗口的更新。在每一时钟上升沿,并行提供三个输入像素。 (1) 激励源:外部时钟CLK及并行像素DATA0、DATA1、DATA2。 (2) 期望结果:在每个时钟上升沿到来时,像素窗口最左端的一列像素(Q0, Q1, Q2)移出,第二列(Q3, Q4, Q5)移入第一列(Q0, Q1, Q2),第三列(Q6, Q7, Q8)移入第二列(Q3, Q4, Q5),输入像素直接移入第三列(Q6, Q7, Q8),同时,该窗口必须能并行输出8个像素给Sobel滤波模块。
69
(3) 仿真结果:REFRESH模块的仿真结果如图12
70
图 REFRESH的仿真结果
71
4.FILTER的仿真 滤波器的本质是实现并行流水加法操作。在调试过程中,为了观察到实际的延时,输出信号直接来自流水加法器的输出,而非流水寄存器输出。所以存在部分毛刺。 (1) 激励源:同步时钟(CLK)及并行像素输入(QA, QB, QC, QD, QE, QF)。 (2) 期望结果:输出的数据之间满足Sobel滤波关系式。 (3) 仿真结果及分析:图12.32是它的仿真波形,由图中可以看出:
72
DATA[19..11]=QA+QB;DATA[29..21]=QB+QC
DATA[39..31]=QD+QE;DATA[49..41]=QE+QF DATB1[10..1]=DATA[19..11]+DATA[29..21] DATB2[10..1]=DATA[39..11]+DATA[49..41] RESULT=DATB1[10..1]-DATB2[10..1]
73
图 FILTER的仿真结果
74
5. RESULT及COMPARE的仿真 RESULT的仿真结果如图12.33所示;COMPARE的仿真结果如图12.34所示。
75
图 RESULT的仿真结果
76
图 COMPARE的仿真结果
77
6.PROCESSOR的仿真 图12.35是PROCESSOR的仿真图,我们先计算图中四个方向滤波器的绝对值大小: H_FILTER=422; V_FILTER=1950?1024=926 DR_FILTER=242; DL_FILTER=478 四者中的绝对值最大值是926,故最大的为V_filter。观察箭头所指的部分,正好为V_filter的值1950。经过验证,上述图中的所有输出满足输出期望。
78
图 PROCESSOR的仿真结果
79
系统的硬件验证 请读者根据自己所拥有的EDA实验开发系统自行完成。
80
12.5 设计技巧分析 (1) 本设计对于一些图像处理硬件的设计有较好的参考价值,特别是对并行流水技术、数据刷新技术分析得比较细致。
12.5 设计技巧分析 (1) 本设计对于一些图像处理硬件的设计有较好的参考价值,特别是对并行流水技术、数据刷新技术分析得比较细致。 (2) 几乎所有的CPLD/FPGA供应商提供的软件开发工具中都会提供许多已经设计好的单元电路库,特别是ALTERA的开发软件提供的LPM_MEGAFUNCTION参数化设计库。
81
12.6 系统扩展思路 该系统设计好后,可与DSP主处理器及其他相关设备进行联合调试,并测试有关结果。
Similar presentations