王小东, 赵仁宏
(潍坊医学院, 山东 潍坊 261053)
医学影像在现代医疗诊断中具有重要的作用,许多疾病的早期诊断与确诊都离不开医学影像数据。医学影像的边缘蕴含重要的诊断信息,因此如何得到更准确的图像边缘对于疾病的早期诊断至关重要[1]。医学图像边缘提取算法有很多种,常见的有roberts算子、prewit算子、sobel算子以及Kirsch算子等[2]。这些算子的运算方法不同,处理效果各异。其中Kirsch算子运算过程最为复杂,但处理效果最为精确。
Kirsch算子是Kirsch[3]提出来的,它是目前 边缘检测算法中运算过程最复杂的。它采用8个方向的3×3模板与图像进行卷积,可以同时检测8个方向的边缘,并取最大值作为图像的边缘输出。不同于其他算子,Kirsch算子检测的边缘方向是最多的,因此在保持细节和抗噪声方面都有较好的效果,只是运算过程较复杂。3×3模板如图1所示。
图1 3×3区域的像素亮度值Pixel brightness value for 3×3 area
对于任意像素点p来说,在p点周围8个像素点的像素分别为a0、a1……a7,则Kirsch算子可表示如式(1)[4]。
(1)
从运算过程可知,Kirsch算子运算过程复杂,需要同时进行8个方向的卷积运算,并比较最大值。因此所需的运算量较大,影响运算速度,同时给设备增加了负担[5]。
Kirsch算子的实现有两种方式,一种是软件方式,一种是硬件方式[6]。由Kirsch算子的运算公式可知,软件实现方式需要同时计算出8个方向的结果后再进行比较得到最大值,将会大大影响运算速度,不能实时处理。因此软件方式实现起来运算效率较低。FPGA器件具有可并行运算、可集成化等特点,适合于进行并行运算,而且运算速度较快[7,8]。因此可以采用FPGA器件进行编程设计,对Kirsch算子进行硬件实现,在同一时间进行8次并行运算,然后采用比较器进行比较。程序总体设计流程表述如下:
1)同时计算8个方向的亮度卷积值;
2)将数据两两分组比较大小,只保留较大的值;
3)将第一轮比较的4个值再两两分组进行比较,得到2个较大值。再进行最终比较,得到最后的最大值。
整体程序流程图如图2所示。
图2 程序总体设计流程图Overall program flow chart
在对8个数据进行比较的过程中,为了进一步提高运算效率,可以采用三步走的方式,即先对8个数据进行两两分组,分成4组,进行第一步比较,得到4个较大值;然后再对这4个数据进行两两分组,比较后得到2个最大值;最后再进行最终比较,得到最终的最大值。这样一共用了3个时钟得到最大值,比起8个数据依次比较得到最大值可以节省4个时钟,因此可以大大提高运算效率,使图像边缘提取能够实时处理。比较器运算流程如图3所示。
图3 比较器运算流程图Comparator operation flow chart
将Kirsch算法以及分步比较方法采用veri-log语言进行编程实现[9],并下载到QuartusⅡ软件中用modelsim软件进行仿真验证,得到仿真图如图4所示。验证无误后将程序下载到FPGA芯片中进行硬件实现,并将芯片嵌入到医学影像学设备中,选择一幅医学图像进行边缘提取处理,得到最终结果如图所示,图5为原始图像,图6为处理后的图像。通过对实验结果进行分析,表明该芯片边缘提取处理算法效果准确清晰,运算速度较快,能够对医学影像进行实时的图像分割边缘提取处理,并可以下载到FPGA芯片平台中进行实现,可为医学诊断提供重要的边缘数据[10]。
图4 modelsim仿真图 Modelsim simulation image
图5 原始图像Original image
图6 边缘提取图像Edge extraction image
本文设计了一种利用FPGA器件进行图像边缘提取实现的优化算法,对Kirsch算子运算过程进行了优化,利用FPGA器件的并行处理能力,并在比较运算中采用分步比较的方式,节省了运算量,提高了运算速度。最后,将算法编程实现后在QuartusⅡ平台上进行了仿真验证,结果表明可以得到实时处理后的准确清晰的医学边缘图像,证实了该算法的准确性与可行性。