基于边缘检测的图像处理软件的开发及优化

合集下载

图像处理中边缘检测技术的研究

图像处理中边缘检测技术的研究
11 以 各种微 分算子 为基 础 , 合 用模板 及门限 、 . 结 平 滑 等 手 段 提 取 边 缘 @ Ro e t 子 : b r 算 子 是 2 br 算 Ro et ×2算 子 , 用 局 利
象 的 梯 度 为 两 个 4 。 向的 梯 度 向 量 和 , 接 计 算 图 5方 直 象 差 分 , 包 含 平 滑 , 不 能 抑 制 噪声 , 具 有 陡 峭 的 不 故 对
Ga s u s函 数 的 方 差 直 接 影 响 到 边 缘 检 测 的 结 果 。 较 小 时 用 于 检 测 细 节 , 较 大 时 用 于 检 测 轮 廓 。G( ) x,
1 一 2 282

③ Ki c r h算 子 : 8个 卷 积 核 , 象 中 每 个 点 都 s 有 图
【 键 词 】 边 缘 检 测 ,微 分 算 子 ,边 界 跟踪 关
AB TRACT Ed ed t ci n i a i n mp ra ts be ti o p tr vso n m a ep o e sn . i a e u ma ie h S g e e to sa b sca d i o t n u jc n c m u e iin a d i g r c s i g Th sp p rs m rz s t e
算 子 为 。 , 一 [ 一 G( ) 1
和 Hi rt l eh没 有 解 决 如 何 组 合 不 同 尺 度 滤 波 器 输 出 d
④ L pa in算 子 : 阶 微 分 算 子 , 零 交 叉 点 也 a lc a 二 其
可 作 为 图 象 的 阶 跃 型 边 缘 点 , 其极 小 值 点 可 作 为 图 而
部差分 算子 寻找边 缘 , 算沿 4。 向的一 阶差分 , 计 5方 图 ’Hi r t l eh首 先 使 用 高 斯 函 数 对 原 始 图 象 作 平 滑 , 是 d 这

基于matlab的图像边缘检测算法研究和仿真设计

基于matlab的图像边缘检测算法研究和仿真设计

基于matlab的图像边缘检测算法研究和仿真目录第1章绪论 11.1 序言 11.2 数字图像边缘检测算法的意义 1第2章传统边缘检测方法及理论基础 2 2.1 数字图像边缘检测的现状与发展 22.2 MATLAB和图像处理工具箱的背景知识 32.3 数字图像边缘检测关于边缘的定义 42.4 基于一阶微分的边缘检测算子 42.5 基于二阶微分的边缘检测算子 7第3章编程和调试 103.1 edge函数 103.2 边缘检测的编程实现 11第4章总结 13第5章图像边缘检测应用领域 13附录参考文献 15第1章绪论§1.1 序言理解图像和识别图像中的目标是计算机视觉研究的中心任务,物体形状、物体边界、位置遮挡、阴影轮廓及表面纹理等重要视觉信息在图像中均有边缘产生。

图像边缘是分析理解图像的基础,它是图像中最基本的特征。

在Marr的计算机视觉系统中,图像边缘提取占据着非常重要位置,它位于系统的最底层,为其它模块所依赖。

图像边缘提取作为计算机视觉领域最经典的研究课题,长期受到人们的重视。

图像边缘主要划分为阶跃状和屋脊状两种类型。

阶跃状边缘两侧的灰度值变化明显,屋脊状边缘则位于灰度增加与减少的交界处。

传统的图像边缘检测方法大多是从图像的高频分量中提取边缘信息,微分运算是边缘检测与提取的主要手段。

由于传统的边缘检测方法对噪声敏感,所以实际运用效果有一定的局限性。

近年来,越来越多的新技术被引入到边缘检测方法中,如数学形态学、小波变换、神经网络和分形理论等。

Canny于1986年提出基于最优化算法的边缘检测算子,得到了广泛的应用,并成了与其它实验结果作比较的标准。

其原因在于他最先建立了优化边缘检测算子的理论基础,提出了迄今为止定义最为严格的边缘检测的三个标准。

另外其相对简单的算法使得整个过程可以在较短的时间实现。

实验结果也表明,Canny算子在处理受加性高斯白噪声污染的图像方面获得了良好的效果[1]。

基于Matlab的图像边缘检测算法的实现及应用汇总

基于Matlab的图像边缘检测算法的实现及应用汇总

目录摘要 (1)引言 (2)第一章绪论 (3)1.1 课程设计选题的背景及意义 (3)1.2 图像边缘检测的发展现状 (4)第二章边缘检测的基本原理 (5)2.1 基于一阶导数的边缘检测 (8)2.2 基于二阶导的边缘检测 (9)第三章边缘检测算子 (10)3.1 Canny算子 (10)3.2 Roberts梯度算子 (11)3.3 Prewitt算子 (12)3.4 Sobel算子 (13)3.5 Log算子 (14)第四章MATLAB简介 (15)4.1 基本功能 (15)4.2 应用领域 (16)第五章编程和调试 (17)5.1 edge函数 (17)5.2 边缘检测的编程实现 (17)第六章总结与体会 (20)参考文献 (21)摘要边缘是图像最基本的特征,包含图像中用于识别的有用信息,边缘检测是数字图像处理中基础而又重要的内容。

该课程设计具体考察了5种经典常用的边缘检测算子,并运用Matlab进行图像处理结果比较。

梯度算子简单有效,LOG 算法和Canny 边缘检测器能产生较细的边缘。

边缘检测的目的是标识数字图像中灰度变化明显的点,而导函数正好能反映图像灰度变化的显著程度,因而许多方法利用导数来检测边缘。

在分析其算法思想和流程的基础上,利用MATLAB对这5种算法进行了仿真实验,分析了各自的性能和算法特点,比较边缘检测效果并给出了各自的适用范围。

关键词:边缘检测;图像处理;MATLAB仿真引言边缘检测在图像处理系统中占有重要的作用,其效果直接影响着后续图像处理效果的好坏。

许多数字图像处理直接或间接地依靠边缘检测算法的性能,并且在模式识别、机器人视觉、图像分割、特征提取、图像压缩等方面都把边缘检测作为最基本的工具。

但实际图像中的边缘往往是各种类型的边缘以及它们模糊化后结果的组合,并且在实际图像中存在着不同程度的噪声,各种类型的图像边缘检测算法不断涌现。

早在1965 年就有人提出边缘检测算子,边缘检测的传统方法包括Kirsch,Prewitt,Sobel,Roberts,Robins,Mar-Hildreth 边缘检测方法以及Laplacian-Gaussian(LOG)算子方法和Canny 最优算子方法等。

图像处理中的边缘检测算法分析与优化

图像处理中的边缘检测算法分析与优化

图像处理中的边缘检测算法分析与优化随着数字图像处理技术的不断发展,边缘检测在计算机视觉、模式识别和图像分割等领域中扮演着重要的角色。

边缘是图像中灰度变化较大的区域,通过检测边缘,我们可以提取图像的形状和结构信息,从而实现图像分析和理解。

本文将对常用的图像处理边缘检测算法进行分析,并探讨优化策略。

一、边缘检测算法概述1.1 Sobel算法Sobel算法是一种基于梯度的边缘检测算法,它通过计算图像梯度的大小和方向来确定边缘位置。

Sobel算法具有计算简单、鲁棒性较高的优点,但对噪声比较敏感,在图像边缘不够明显或存在噪声时容易引入误检。

1.2 Canny算法Canny算法是一种经典的边缘检测算法,它通过多个步骤来实现高效的边缘检测。

首先,通过高斯滤波器对图像进行平滑处理,以减少噪声的影响。

然后,计算图像的梯度幅值和方向,并进行非极大值抑制,以精确地定位边缘。

最后,通过滞后阈值法来进行边缘的连接和细化。

Canny算法具有良好的边缘定位能力和抗噪能力,在实际应用中被广泛使用。

1.3 Laplacian算子Laplacian算子是一种基于二阶导数的边缘检测算子,它通过计算图像的二阶导数来检测图像中的边缘。

Laplacian算子具有对灰度变化较大的边缘敏感的优点,但对噪声比较敏感,容易产生边缘断裂和误检。

为了提高Laplacian算子的效果,常常与高斯滤波器结合使用,以减少噪声的干扰。

二、边缘检测算法优化2.1 参数选择在边缘检测算法中,参数的选择对于最终的结果具有重要的影响。

例如,对于Canny算法来说,高斯滤波器的大小和标准差的选择直接影响到边缘的平滑程度和定位精度。

因此,在优化边缘检测算法时,需要根据具体的应用场景和图像特点选择合适的参数。

2.2 非极大值抑制非极大值抑制是Canny算法中的一种重要步骤,用于精确地定位边缘位置。

然而,在进行非极大值抑制时,会产生边缘断裂和不连续的问题。

为了解决这个问题,可以考虑使用像素邻域信息进行插值,从而减少边缘的断裂,并得到更连续的边缘。

基于DOG模型的图像边缘检测算法优化

基于DOG模型的图像边缘检测算法优化

基于DOG模型的图像边缘检测算法优化图像边缘检测是计算机视觉领域中一项重要的任务,它在图像处理、目标检测和图像分割等应用中起着关键作用。

基于DOG(Difference of Gaussians)模型的图像边缘检测算法是一种经典而广泛使用的算法,它通过计算图像中的像素灰度值差异来提取图像边缘。

本文将对基于DOG模型的图像边缘检测算法进行优化。

首先,我们需要了解DOG模型的原理。

DOG模型是通过在图像上应用两个高斯滤波器进行卷积操作,然后计算两个卷积结果之间的差异,来检测图像中的边缘。

这种差分操作可以有效地捕捉到边缘的位置和强度。

然而,传统的基于DOG模型的边缘检测算法存在一些问题,例如边缘响应不稳定和对噪声敏感。

为了解决这些问题,我们可以对算法进行优化。

下面是针对这些问题的优化策略。

首先,为了提高边缘检测的稳定性,我们可以引入多尺度处理。

传统的DOG算法只使用了一个尺度的高斯滤波器进行卷积操作,而多尺度处理可以使用不同尺度的高斯滤波器来检测不同大小的边缘。

这样可以更好地适应图像中不同尺度的边缘,提高边缘检测的准确性和稳定性。

其次,为了减小噪声对边缘检测的影响,我们可以引入非局部平均(NLM)滤波器。

NLM滤波器能够通过使用图像中其他像素的信息来对每个像素进行滤波,从而更好地保留边缘信息,并减小噪声的影响。

将NLM滤波器与DOG模型结合使用可以提高边缘检测的精度和鲁棒性。

另外,为了进一步提高算法的效果,我们可以应用梯度信息来增强边缘。

梯度信息可以通过计算像素灰度值的一阶或二阶导数来获取。

在基于DOG模型的边缘检测算法中,可以使用梯度信息来增加边缘的响应,从而使边缘更加清晰和明显。

此外,我们还可以考虑使用深度学习技术来优化基于DOG模型的边缘检测算法。

深度学习模型具有较强的表达能力和适应性,可以学习到更复杂和抽象的特征表示,从而提高边缘检测的性能。

通过使用卷积神经网络(CNN)等深度学习模型,可以取得更好的边缘检测结果。

基于边缘检测的图像识别系统研究和实现

基于边缘检测的图像识别系统研究和实现

• 191•引言:计算机视觉(Computer Vision )是在数字图像处理的基础上发展起来的新兴学科;从信息处理的层面研究视觉信息的认知过程,研究视觉信息处理的计算理论和计算方法。

它作为一门综合性的交叉学科,在航空航天、医学影像、工业控制、地理遥感信息处理等方面发挥的重要的应用。

1 方案设计本文通过航空航天项目为研发背景配合民用图片作为效果说明。

本文依据项目设计图像处理系统实现对输入的各种传感器一维数据的拟合成二维数据,形成数字图像形式,然后通过平滑,分割,边缘提取,特征提取(分类)等步骤处理,形成新的数字图像(二维数据),最后将处理后的二维数据再转换成其他传感器所需要的数据流,供其他设备或者传感器进行应用,整个图像处理系统在QT 平台上用C/C++语言实现。

如图1所示。

图1 系统数据流示意图2 主要实现过程2.1 图像生成对原始数据进行拟合和提取形成图像处理所需的二维矩阵。

2.2 图像平滑在本文描述的系统中采用中值滤波对图像进行图像预处理。

2.3 图像边缘检测图像边缘是指局部区域亮度有阶跃变化的像素点的集合。

边缘广泛存在于物体与背景之间、物体与物体之间、基元与基元之间,它是图像分割所依赖的重要特征。

边缘检测算子检查每个像素的邻域并对其灰度变化率进行量化,也包括方向的确定。

大多数使用基于方向导数掩模求卷积的方法。

边缘检测算子通常由两个边缘检测模板组成。

图像中的每个像素分别用这两个模板做卷积,得到两个方向上的梯度G_1和G_2,为了减少运算量,有时也使用近似值G=|G_1 |+|G_2 |。

梯度方向。

本文描述的系统采用的是sobel 算子为基础构建的Canny算子:(1)Sobel 算子的提出者Irwin Sobel 在1968-1973年提出了该算法,Sobel 算子对于象素的位置的影响做了加权,可以降低边缘模糊程度,因此检测效果更好。

(2)Canny 算子是John F. Canny 于1986年提出的一个多级边缘检测算法。

图像处理中的边缘检测方法与优化指南

图像处理中的边缘检测方法与优化指南

图像处理中的边缘检测方法与优化指南在图像处理领域中,边缘检测是一个重要的技术,它可以帮助我们识别图像中物体的边界以及其中的细节信息。

边缘检测的准确性直接影响着后续图像处理和分析的结果。

本文将介绍图像处理中的常用边缘检测方法,并探讨如何优化这些方法,以提高边缘检测的效果和鲁棒性。

一、常用边缘检测方法1. Sobel算子Sobel算子是一种经典的边缘检测方法,它基于图像中像素值的梯度变化来检测边缘。

Sobel算子分为水平和垂直两个方向,通过对图像进行卷积操作,分别得到水平和垂直方向上的梯度图像,然后通过对两个方向的梯度图像进行合并,得到最终的边缘图像。

Sobel算子简单易实现,对噪声具有一定的鲁棒性,但对细节信息的提取效果较弱。

2. Canny边缘检测Canny边缘检测是一种广泛应用的边缘检测方法,它不仅具有较高的准确性,而且能够有效抑制噪声。

Canny边缘检测基于多个步骤,包括高斯滤波、计算梯度和非最大抑制、确定双阈值以及边缘连接。

首先,通过高斯滤波平滑图像,减少噪声对边缘检测的干扰;然后,计算梯度图像和梯度方向,选择局部最大值作为边缘点;接着,通过双阈值将梯度图像中的强边缘和弱边缘分开,确定边缘点;最后,通过边缘连接将弱边缘点与强边缘点连接起来,形成完整的边缘图像。

3. Laplacian算子Laplacian算子是一种基于图像二阶导数的边缘检测方法,它能够提高对图像细节的检测效果。

Laplacian算子对图像进行二阶导数计算,然后根据二阶导数的变化来检测边缘。

由于Laplacian算子对噪声比较敏感,因此在应用前通常需要对图像进行平滑处理。

Laplacian算子能够检测到更多的边缘细节,但对噪声的响应较高,需要进行后续处理以提高边缘检测的准确性。

二、边缘检测方法的优化指南1. 参数选择边缘检测方法中的参数选择对于边缘检测的效果至关重要。

不同的图像和应用场景可能需要不同的参数设置。

因此,在使用边缘检测方法之前,需要根据具体情况选择合适的参数。

使用JAVA进行图像识别与处理的工具及技术

使用JAVA进行图像识别与处理的工具及技术

使用JAVA进行图像识别与处理的工具及技术引言:随着科技的不断发展,图像识别与处理已经成为了计算机科学领域的热门研究方向。

而JAVA作为一种广泛应用于软件开发的编程语言,也提供了丰富的工具和技术来支持图像识别与处理。

本文将介绍一些常用的JAVA图像处理工具和技术,并探讨其在实际应用中的优势和挑战。

一、图像处理工具1. OpenCVOpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。

它支持多种编程语言,包括JAVA。

通过使用OpenCV,开发人员可以轻松实现图像的读取、显示、滤波、边缘检测等常见操作。

同时,OpenCV还提供了一些高级功能,如人脸检测、目标跟踪等,使得图像处理更加便捷和高效。

2. Java Advanced Imaging (JAI)JAI是JAVA平台上的一组图像处理API,提供了丰富的图像处理功能。

它支持图像的读取、写入、缩放、旋转、滤波等操作,并且可以处理多种图像格式。

JAI还提供了一些高级功能,如图像合成、图像分析等,使得开发人员能够更加灵活地进行图像处理。

3. ImageJImageJ是一款基于JAVA的开源图像处理软件,提供了丰富的图像处理和分析功能。

它支持图像的读取、显示、滤波、分割等操作,并且提供了一些常用的图像分析算法,如形态学操作、图像测量等。

ImageJ还支持插件扩展,使得开发人员可以根据需求添加自定义的图像处理功能。

二、图像识别技术1. 机器学习机器学习是一种广泛应用于图像识别的技术。

通过训练模型,机器可以从大量的图像数据中学习特征,并对新的图像进行分类和识别。

JAVA提供了一些机器学习库,如Weka和DL4J,可以帮助开发人员实现图像分类、目标检测等任务。

2. 深度学习深度学习是一种基于神经网络的图像识别技术。

它通过多层次的神经网络模型,可以学习到更加复杂的图像特征,并实现更高精度的图像识别。

JAVA提供了一些深度学习库,如Deeplearning4j和DL4J,可以帮助开发人员构建和训练深度学习模型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

收稿日期:2003204201;收修定稿日期:2003206223基金项目:广西自然科学基金资助项目(桂科基0009004)作者简介:张灿龙(19782),男,湖南娄底人,硕士研究生,主要研究方向为计算机图像处理、模式识别和DSP 芯片开发及应用;王 强,男,教授,博士,研究生导师。

控制工程Control Engineering of China Jan.2004Vol.11,No.12004年1月第11卷第1期文章编号:167127848(2004)0120073204基于边缘检测的图像处理软件的开发及优化张灿龙1,王 强1,文小军1,张超英1,唐艳平2,刘海燕1(11广西师范大学物理与信息工程学院,广西桂林 541004;21桂林电子工业学院教务处,广西桂林 541004)摘 要:在采用Canny 算子提取工业图像边缘的快速分离算法的基础上,提出了在VC ++610环境下对计算Canny 算子的过程进行优化以提高处理速度的两种方法:采用编译器自带优化工具进行优化法和采用MMX (Microprocessor Media Extension )多媒体扩展技术进行优化法。

前者主要是通过最佳地组合C 优化器的各个优化选项,以达到缩短代码长度和提高代码执行速度的优化目的,后者则是利用高效的MMX 指令和SIDM (Sin 2gle Instruction Multiple Date )单指令多数据核心技术来编写汇编代码以达到优化目的的。

实验结果表明,优化后的Canny 算子运算速度提高200%~400%。

关 键 词:Canny 算子;编译器优化;MMX 技术中图分类号:TP 274 文献标识码:A1 引 言计算机视觉技术及图像处理技术的广泛应用越来越受到工业界的重视,并且已成功地应用于产品的零部件识别、分类、几何尺寸测量、表面质量及位置检测等方面。

玻璃瓶罐属透明或半透明物体,为实现其外形尺寸的自动检测必须进行边缘提取,常用的方法有阈值分割和边缘算子。

选择不同的边缘提取算子对于边缘提取效果影响很大,进而直接影响检测精度。

反复比较和实验证明,采用Canny 算子进行边缘提取能够满足检测要求。

工业产品的在线检测对检测算法实时性要求较高,而Canny 算子计算复杂度较高,虽可根据算子的可分离性用快速算法来提高处理速度,但在有些场合仍不能满足实时要求。

围绕着进一步提高处理速度,本文将讨论两种速度优化方法,即编译器自带优化和MMX 技术优化。

2 C anny 算子通常的边缘提取方法是考察图像的每个像素邻域内灰度的变化,利用边缘邻域内的一阶或二阶导数的变化来检测边缘。

经典的边缘检测算法类似于高通滤波,对带噪声的边缘比较敏感,有时会造成一些虚假轮廓或生成某些并不存在的边缘点,在处理透明或半透明物体图像时尤为突出;再者,对整幅图像也很难找到一个合适的阈值[1]。

通过反复实验证明Canny 算子能很好地突破这些局限,经它处理所得的边缘图像具有以下3个特点:①好的信噪比 即将非边缘点判为边缘点的概率很低,将边缘点判为非边缘点的概率也很低。

②好的定位性能 即检测出的边缘点绝大部分在实际边缘的中心。

③对单一边缘仅有惟一响应 即单个边缘产生多个响应的概率很低,并且虚假边缘响应得到最大的抑制。

Canny 算子能很好地提取单像素连续的边缘,但计算量很大,实际应用时常根据算子的可分离性用快速算法来实现,其推导过程见文献[2]。

快速分离算法的实现步骤如下(W 为卷积窗口大小,σ为方差,M 为图像宽度,N 为图像高度):1)计算模板 h 2[i ]=exp (-i 2/(2σ2))/∑W j =1h 2[j ],h 1[i ]=ih 2[i ];i =1,…,W 。

2)求边缘强度①把原图像f (x ,y )按列与h 2[W ]卷积,再把卷积结果按行与h 1[W ],得到E m (x ,y )。

②把原图像f (x ,y )按行与h 2[W ]卷积,再把卷积结果按列与h 1[W ],得到E n (x ,y )。

③求出边缘强度A (x ,y )=[E m (x ,y )2+E n (x ,y )2]1/2,Thre =∑Mx =1∑Ny =1A (x ,y )/(M ×N )。

3)如果满足以下条件之一,则判为边缘点。

①A (x ,y )>Thre ,且E m (x ,y )≥E n (x ,y );且A (x ,y )>A (x -2,y ),A (x -1,y ),A (x +1,y ),A (x +2,y )。

②A (x ,y )>Thre ,且E m (x ,y )<E n (x ,y );且A (x ,y )>A (x ,y -2),A (x ,y -1),A (x ,y +1),A (x ,y +2)。

通过实验发现快速分离算法较标准Canny 算子计算量大大减少,而且得到的边缘图像质量也比标准Canny 算子的要好。

对玻璃瓶图像用快速分离算法的处理结果如图1所示。

(a )玻璃瓶原始图(b )边缘图图1 快速分离算法的处理结果3 使用编译器优化软件工业图像检测系统对实时性要求很高。

人们在用VC ++610编译器开发实时处理软件的过程中往往忽略了使用编译器自带的优化器来提高软件的运行速度。

优化器对程序代码的作用如下:1)启用register 和inline 键字 register 键字要求编译器为相关变量指定寄存器。

这样不仅节省了堆栈空间,而且通过将变量存在寄存器中能保证以最快的速度访问它,因为处理器读写自己的寄存器比读写内存快得多。

一个函数调用被编译后会产生大量的机器代码。

函数调用需要执行一系列操作,这些操作都是很耗时的,特别是当函数调用发生在循环体内时,更会大大影响程序的执行速度。

通过声明函数为inline (内联),可以消除这种“瓶颈”。

因为inline 函数很少使用堆栈,不更新指令指针使其指向某些其他内存段的开始处,所以可以显著地改进运行性能。

2)省略帧指针 /O Y 选项禁止在调用堆栈中创建帧指针,这样不再需要创立和删除帧指针,从而可以提高函数调用的速度。

对于Intel 386或更高的CPU ,它还节省一个寄存器EBP ,可以用于保存频繁使用的变量和子表达式。

当然付出的代价是相对于ESP 编码内存要比相对于EBP 的引用多占一个字节,在此处利大于弊。

3)关闭堆栈检查 定义保护页为分配给堆栈的最后页。

进行堆栈检查时,C ++编译器将计算每一个函数的局部变量的总大小。

当一个错误的定义产生了一个可能延伸到保护页的对象时,编译器将产生一个C 运行库的堆栈检查程序。

虽然堆栈检查可以建立一个更可靠的应用程序,但其增加了一个程序的开销,并不必要地降低了运行效率,所以从实时处理的角度出发,往往关闭堆栈检查。

4)消除死代码和死存储 死代码指由于各种原因,按照算法逻辑流程,确实达不到、没有使用的代码块。

对于这种情况,在进行优化设置后,编译器将不对这些死代码或死存储产生目标指令,并自动在最终优化的可执行代码中消除这些情况,从而可以提高整个代码的执行速度。

根据所建立目标的不同,Microsoft Visual Studio 预定义了一套自己的缺省优化设置,然而有时根据具体情况需要手工调整一个工程的编译器优化选项,具体操作步骤如下:①在编译器中选中Project →Settings →C/C ++标签;②在Optimizations 下拉表中选择Maximize Speed ;③在Project Options 框中删除“/ZI ”和“/GX ”,然后重新编译。

上述操作实际上是最佳地组合了前述所有优化选项。

实验结果表明:得到同样的处理结果,优化后速度却大幅度提高,但付出的代价是优化后的软件不能再设置断点,这给进行程序再调试带来了不便。

4 软件的MMX 技术优化为了提高生产效率还必须进一步提高处理速度。

过去微型机计算能力达不到要求时,往往采用硬件流水线并行处理,或采用高速DSP (数字处理芯片)来加快运行速度。

这一方面增加了系统开发的费用,延长了开发周期;另一方面又使得系统适应能力差,系统的参数调整将导致重新设・47・控 制 工 程 第11卷计电路[3]。

随着微型机性能的不断提高,特别是MMX技术的出现,使得通常需要借助于专用加速硬件或通用DSP才能完成的复杂实时性处理工作,可以直接在通用PC机上用软件方法实现。

1)MMX技术及其优化原理[4]①采用SIDM技术 SIDM(单指令多数据流)技术指运用单条指令并行的处理多个数据元素,实现某种程度的并行运算。

在MMX中采用SIDM技术后,使得MMX指令能一次并行处理64bit的数据,即能同时处理8个图像数据(8 bit)、4个音频数据(16bit)或2个双字(32bit),从而使软件处理速度提高2~8倍。

②采用高效的MMX指令 大部分图像处理程序都具有整数数据类型、高度重复的循环体、频繁的乘法与累加、高计量的算法、高度的并行操作等关键特性。

基于这一结论,用MMX优化代码时,可以使程序产生最大的整体性提高。

以紧缩字乘法累加指令PMADDWD为例,处理一幅256级灰度的图像,由于图像像素常以8位整数为字节表示,8个这样的像素将一起紧缩为一个64位值并移入一个MMX寄存器中。

当执行PMAD2 DWD指令时,原操作数的4个有符号紧缩字与目标操作数对应相乘,得到两对32位的乘积,并按位相加,最终将两个和数一次形成于单个64位目标寄存器中,这相当于一次性处理了8个像素,而且多数MMX指令可以在一个时钟周期内执行,因此其性能相对于一般的指令有惊人的提高。

另外,MMX还提供了一些高效的数据访问指令(MOVD,MOVQ),它们分别可以同时访问两个双字(32位)和一个四字(64位)。

2)Canny算子的MMX实现 根据Canny 算子计算的圆对称性,可将其分解为行、列两个方向的一维运算。

反复使用紧缩移位、紧缩扩展、紧缩压缩指令及饱和运算是用MMX实现Canny算子的核心。

下面给出MMX实现Canny算子的核心代码(假定mm0,mm1,mm2,3个寄存器存放同一行相邻3点的灰度):QDStep1构造两个行、列模板序列Model2 Col1,ModelCol2,ModelRow1,ModelRow2;Step2以此ModelCol1,ModelCol2按行对图像作模板运算,卷积结果再除以256。

PXOR mm7,mm7//将mm7清零MOVQ mm3,mm0//备份mm0到mm3PUNPCK LBW mm0,mm7//保存mm0的低位双字PUNPCKHBW mm3,mm7//保存mm0的高位双字MOVQ mm4,mm1//备份mm1到mm4PUNPCK LBW mm1,mm7//保存mm1的低位双字PUNPCKHBW mm4,mm7//保存mm1的高位双字PADDUSW mm0,mm1//合并两寄存器mm0,mm1 PADDUSW mm3,mm4//合并两寄存器mm3,mm4 MOVQ mm6,ModelCol1//把模板系数存入mm6 PMULL W mm0,mm6//mm0保存低位的卷积结果PMULL W mm3,mm6//mm3保存高位的卷积结果PSRL W mm0,8//卷积结果除以256PSRL W mm3,8//卷积结果除以256PACKUSWB mm0,mm3//合并卷积结果MOVQ mm5,mm0//保存卷积结果MOVQ mm0,mm2//备份中心点到mm0PUNPCK LBW mm0,mm7//mm0保存mm2的低位双字PUNPCKH BW mm2,mm7//mm0保存mm2的低位双字MOVQ mm6,ModelCol2//把模板系数存入mm6 PMULL W mm0,mm6//mm0保存mm2的高位双字PMULL W mm2,mm6//mm2保存mm2的高位双字PSRL W mm0,8//将低位部分的卷积结果除以256 PSRL W mm2,8//将高位部分的卷积结果除以256 PACKUSWB mm0,mm2//合并卷积结果PADDUSB mm5,mm0//保存卷积结果 其他步骤可以参照第2节中快速算法的步骤,具体实现与Step2类似。

相关文档
最新文档