图像处理中的全局优化技术(经典至极)
- 格式:docx
- 大小:2.72 MB
- 文档页数:42
计算机视觉技术的实时图像处理方法与优化策略计算机视觉技术在当今数字化时代中起着不可忽视的作用。
随着图像和视频数据的爆炸式增长,实时图像处理成为一项关键技术。
实时图像处理的目标是在最短的时间内对大量的图像进行高质量的处理和分析,以满足各种应用需求。
本文将介绍计算机视觉技术中常用的实时图像处理方法和优化策略。
一、实时图像处理方法1. 图像预处理图像预处理是实时图像处理的第一步,目的是对原始图像进行去噪、增强和尺度标准化等操作,以提高后续处理的精度和准确性。
常用的图像预处理方法包括噪声去除算法、直方图均衡化和图像归一化等。
2. 特征提取特征提取是计算机视觉中的关键步骤,目的是从图像中提取出能够表征物体或场景的特征。
实时图像处理中常用的特征提取方法包括边缘检测、角点检测、纹理特征提取和光流估计等。
这些方法可以通过分析图像的局部特征、颜色和纹理等信息,识别目标并进行分类。
3. 目标检测与识别目标检测与识别是计算机视觉中的重要任务。
实时图像处理中,目标检测与识别需要在实时性的同时保证准确性。
常用的目标检测与识别方法包括基于特征的方法、基于机器学习的方法和深度学习方法等。
这些方法可以通过对图像进行分类和定位,实现对感兴趣目标的检测和识别。
4. 图像分割图像分割是将图像分割成不同的区域或对象的过程。
实时图像处理中常用的图像分割方法包括基于阈值的方法、边缘检测和区域生长等。
这些方法可以将图像分割成一系列的连通区域,用于定位、分析和识别感兴趣的目标。
二、优化策略1. 并行计算并行计算是实现实时图像处理的关键策略之一。
通过将图像处理任务划分为多个子任务,并行处理可以显著提高图像处理的速度和效率。
常用的并行计算方法包括并行编程模型、GPU加速和分布式计算等。
2. 算法优化算法优化是实现实时图像处理的另一个重要策略。
通过对常用算法进行优化和改进,可以提高图像处理的速度和质量。
常用的算法优化方法包括快速算法、近似算法和算法并行化等。
如何进行高效的图像增强和降噪图像增强和降噪是数字图像处理中的重要任务之一。
它们的目的是改善图像的视觉质量和可视化细节,并消除图像中的不必要的噪声。
在本文中,我将介绍一些常用的图像增强和降噪技术,以及一些实现这些技术的高效算法。
一、图像增强技术1.灰度变换:灰度变换是一种调整图像亮度和对比度的常用技术。
它可以通过改变灰度级来增加图像的对比度和动态范围,提高图像的视觉效果。
2.直方图均衡化:直方图均衡化是通过重新分配图像灰度级来增加图像对比度的一种方法。
它通过改变图像的直方图来增强图像的细节和对比度。
3.双边滤波:双边滤波是一种能够保留图像边缘信息,同时消除噪声的滤波技术。
它能够通过平滑图像来改善图像的质量,同时保持图像的细节。
4.锐化增强:锐化增强是一种通过增加图像的高频分量来提高图像的清晰度和细节感的方法。
它可以通过增加图像的边缘强度来突出图像的边缘。
5.多尺度增强:多尺度增强是一种通过在多个尺度上对图像进行增强来提高图像视觉质量的方法。
它可以通过提取图像的不同频率分量来增强图像的细节和对比度。
二、图像降噪技术1.均值滤波:均值滤波是一种常见的降噪方法,它通过将像素值替换为其周围像素的均值来减少噪声。
然而,它可能会导致图像的模糊,特别是在对边缘等细节进行处理时。
2.中值滤波:中值滤波是一种基于排序统计理论的降噪方法,它通过将像素值替换为其周围像素的中值来消除噪声。
相比于均值滤波,中值滤波能够在去除噪声的同时保留图像的边缘细节。
3.小波降噪:小波降噪是一种利用小波变换的降噪方法,它在时频域上对图像进行分析和处理。
它能够通过消除噪声的高频分量来降低图像的噪声水平。
4.非局部均值降噪:非局部均值降噪是一种通过将像素值替换为与其相似的像素均值来减少噪声的方法。
它能够通过比较像素的相似性来区分图像中的噪声和细节,并有选择地进行降噪。
三、高效实现图像增强和降噪的算法1.并行计算:利用并行计算技术,如GPU加速、多线程等,在处理图像增强和降噪算法时,可以提高计算效率和算法的实时性。
图像处理技术的应用方法与性能优化技巧随着科技的不断发展,图像处理技术已经成为了日常生活中不可或缺的一部分。
图像处理技术广泛应用于医学影像、计算机视觉、智能安防、游戏开发等领域。
本文将介绍图像处理技术的应用方法和性能优化技巧,帮助读者更好地理解和应用这一技术。
一、图像处理技术的应用方法1.1 图像增强图像增强是一种常用的图像处理方法,旨在改善图像的质量、增强图像的细节和对比度。
常见的图像增强方法有直方图均衡化、亮度调整、对比度增强等。
通过对图像进行增强,可以提高图像的视觉效果和辨识度。
1.2 图像滤波图像滤波是一种有效的去噪和平滑图像的方法。
常见的图像滤波算法有均值滤波、中值滤波和高斯滤波等。
通过对图像进行滤波处理,可以减少图像中的噪声、增加图像的清晰度,并提高后续图像处理任务的效果。
1.3 图像分割图像分割是将图像分成若干个互不相交的区域的过程,旨在在图像中找到具有相同特征的像素点集合。
常见的图像分割方法有基于阈值分割、基于边缘检测的分割和基于聚类的分割等。
图像分割在计算机视觉中应用广泛,例如目标检测、图像分析等领域。
1.4 特征提取特征提取是从原始图像中提取有效信息的过程,用于表示和描述图像的特征。
常见的图像特征包括颜色、纹理、形状等。
图像特征提取在计算机视觉和模式识别中起着关键作用,可以用于目标识别、图像检索等应用中。
二、性能优化技巧2.1 并行计算图像处理中的许多算法和任务都可以通过并行计算来提高计算性能。
并行计算是指将一个大的计算任务分成多个小任务,分别在多个处理单元上同时执行。
常见的并行计算技术包括多核CPU、GPU并行计算和分布式计算等。
通过并行计算,可以有效地提高图像处理的速度和效率。
2.2 缓存优化缓存优化是一种针对图像处理算法和任务的性能优化方法。
通过合理地利用缓存机制,可以减少内存访问和数据传输的次数,从而提高算法的运行速度。
常见的缓存优化方法包括数据对齐、空间局部性和时间局部性的优化等。
图像处理算法的性能优化技巧图像处理算法是计算机视觉和图像处理领域的核心技术之一。
随着图像处理应用的不断扩展和深化,对算法性能的需求也越来越高。
为了提高图像处理算法的性能,我们可以采用以下优化技巧。
1. 并行计算并行计算是一种通过同时进行多个计算任务来提高计算效率的方法。
在图像处理中,可以利用并行计算来加速算法的执行速度。
我们可以分析算法中的循环结构,将可以并行计算的部分提取出来,在不同的处理单元上同时进行计算。
通过合理设计并行计算的任务分配和数据通信方式,可以显著提高图像处理算法的性能。
2. 数据优化数据优化是通过合理处理数据来提高算法性能的一种方法。
在图像处理算法中,我们可以采用以下策略进行数据优化:a. 数据压缩:对于图像处理中的大型数据集,可以采用数据压缩算法来减小数据的存储空间和传输带宽。
常用的数据压缩算法包括JPEG、PNG等。
b. 数据预处理:通过对原始数据进行预处理,可以减小算法所需要处理的数据量。
比如对图像进行降噪、平滑或者边缘检测等预处理操作,可以减小后续算法的计算量。
c. 数据结构优化:选择合适的数据结构来存储和操作图像数据,可以提高算法的效率。
比如使用矩阵数据结构来表示图像,可以利用矩阵运算的高效性来加速算法的执行。
3. 算法优化算法优化是通过改进算法的设计和实现来提高性能的一种方法。
在图像处理算法中,我们可以采用以下策略进行算法优化:a. 算法分解:将复杂的图像处理算法分解为多个简单的子任务,分别进行处理。
这样可以提高算法的可维护性和可扩展性,同时也可以利用并行计算来加速算法的执行。
b. 优化代码实现:对算法的代码实现进行优化,可以提升算法的执行速度。
比如使用高效的数据结构、避免使用不必要的循环和条件判断等。
c. 近似计算:对于一些精度要求不高的图像处理任务,可以采用近似计算的方法来减小计算量。
通过权衡计算精度和计算量,可以在保证算法效果的前提下提高算法的性能。
4. 硬件加速硬件加速是通过利用专用硬件进行计算来提高图像处理算法性能的一种方法。
图像处理算法的并行计算优化方法和技巧随着图像处理的广泛应用和数据量的增加,对于图像处理算法的计算效率要求也越来越高。
并行计算是提高图像处理算法计算效率的主要方法之一。
本文主要探讨图像处理算法的并行计算优化方法和技巧,以满足对计算效率的要求。
在进行图像处理算法的并行计算优化之前,我们首先需要了解图像处理算法的特点。
通常,图像处理算法通过对每个像素点进行操作来达到图像处理的目的。
这意味着图像处理算法之间是高度并行且可以独立计算的。
基于这个特点,我们可以采用以下方法来实现图像处理算法的并行计算优化。
首先,对于图像处理算法的并行计算优化,我们可以利用多线程技术。
多线程技术是一种将一个进程分成多个线程,每个线程执行不同的任务的方法。
在图像处理算法中,可以将图像划分成多个块,每个线程负责处理一个块的图像数据。
通过利用多线程,可以充分利用计算资源,提高算法的计算效率。
其次,我们还可以利用多核处理器来进行图像处理算法的并行计算优化。
现代计算机中大多数的处理器都是多核处理器,多核处理器可以并行地执行多个任务。
因此,我们可以将图像处理算法的不同部分分配给不同的核心来并行处理。
通过这种方式,可以进一步提高图像处理算法的计算效率。
此外,利用图像处理算法的局部性特点也是图像处理算法并行计算优化的重要方法之一。
图像处理算法通常会在邻近的像素之间进行计算。
因此,我们可以将图像数据按照一定的规则划分成多个子区域,并将每个子区域分配给不同的处理单元来并行计算。
通过这种方式,可以减少不同处理单元之间的通信开销,提高算法的计算效率。
并行计算优化还可以通过数据并行和任务并行两种方式来实现。
在数据并行中,不同的处理单元并行计算相同的算法,但对不同的数据进行处理。
而在任务并行中,不同的处理单元并行计算不同的算法,但对相同的数据进行处理。
具体选择哪种方式取决于算法的特点和需求。
此外,针对图像处理算法的具体特点,我们还可以采用一些特定的技巧来优化并行计算。
AI技术在图像处理中的算法与应用优化一、引言随着人工智能(Artificial Intelligence,简称AI)技术的快速发展,图像处理领域也逐渐成为了AI技术的重要应用之一。
AI技术在图像处理中的算法与应用优化,不仅能够改善图像质量,提升图像识别准确度,还能够拓展图像处理领域的边界。
本文将重点讨论AI技术在图像处理中具体算法和应用的优化方法。
二、基于AI技术的图像识别算法优化图像识别是AI技术在图像处理领域中最常见且核心的应用之一。
为了提高图像识别算法的性能和准确度,在多个方面进行了优化。
2.1 基于深度学习网络结构优化深度学习是目前主流的图像识别方法之一,其中卷积神经网络(Convolutional Neural Network, CNN)被广泛应用于图像处理中。
针对CNN网络结构,在传统结构基础上进行改进可以提高运行效率和减少参数数量。
例如,采用卷积层通道剪枝策略可以减少冗余参数;引入注意力机制可以使网络更加关注图像中重要的区域,提高识别准确度。
2.2 数据增强与预处理技术数据增强和预处理方法对图像识别算法性能起到至关重要的作用。
通过旋转、平移、变换大小等手段,对数据集进行增强,可以增加训练集的多样性,并提高模型的鲁棒性。
此外,还可以使用归一化、降噪等预处理技术来消除图像中的噪声和干扰信息,提升算法在复杂场景下的表现。
2.3 引入迁移学习迁移学习是指将已经在某个任务上训练得到的模型应用于其他相关任务中。
在图像处理领域,使用预训练好的神经网络模型作为初始权重,然后通过微调(fine-tune)来适应新目标任务,可以大幅提高算法在新领域数据上的表现。
三、基于AI技术的图像生成算法优化除了图像识别算法外,AI技术还可以应用于图像生成任务中。
针对基于AI 技术的图像生成算法优化,以下是几点值得探讨和研究的方向。
3.1 图像超分辨率重建图像超分辨率重建是将低分辨率图像恢复到高分辨率的过程,这对于图像展示和后续处理都具有重要意义。
优化算法图像设计方案
在图像设计中,优化算法是一种用于改善图像质量和性能的核心技术。
在设计图像处理算法时,我们应该考虑到以下几个方面来优化算法图像设计方案。
首先,我们可以通过降低图像处理算法的复杂度来提高运行效率。
在设计算法时,我们可以使用更加高效的算法和数据结构来减少运行时间和空间复杂度。
例如,使用快速傅里叶变换(FFT)算法来实现图像的频域处理,可以大大提高算法的效率。
其次,我们可以通过选择合适的参数和设置来优化算法图像设计方案。
例如,在图像增强算法中,我们可以根据图像的特性和需求来选择合适的增强参数,如亮度、对比度等,从而提高图像的视觉效果。
另外,我们可以通过增加图像处理算法的并行化来优化算法图像设计方案。
并行化可以提高算法的并发性和处理能力,从而加快图像处理的速度。
例如,我们可以使用并行计算技术来同时处理图像的不同区域,然后将结果合并到同一个图像中。
此外,优化算法图像设计方案还需要考虑到一些特定的应用需求。
例如,在图像识别和分类领域,我们可以使用深度学习算法来提高识别准确率和性能。
另外,在图像压缩和传输领域,我们可以使用压缩算法和数据压缩技术来减少图像的数据量,从而提高传输效率和节省存储空间。
总结起来,优化算法图像设计方案需要考虑到算法的复杂度、参数设置、并行化和特定应用需求等方面。
通过合理的算法设计和参数选择,我们可以提高图像处理的效果和性能,从而满足不同应用场景的需求。
AI图像处理算法的性能优化技巧近年来,随着人工智能(AI)技术的迅速发展,图像处理算法在各种领域中得到了广泛应用,如计算机视觉、医学影像分析、智能驾驶等。
然而,由于图像处理算法的复杂性和计算量大的特点,其执行效率往往成为限制其应用的一个重要因素。
因此,对于AI图像处理算法的性能优化技巧的研究变得十分重要。
本文将就此问题展开讨论,总结出几种常见的性能优化技巧。
首先,一种重要的性能优化技巧是通过合理的数据表示和存储方式来减少算法的计算量。
由于图像数据的存储和处理要求巨大的计算资源,使用合适的数据结构来存储和处理图像数据是提高算法性能的关键。
例如,采用压缩和截断等方法可以有效节约存储空间,并降低存储和处理的时间复杂度。
此外,利用分布式计算和并行计算等技术来优化图像处理算法也是提高性能的一种有效方式。
其次,合理选择和设计算法是提高图像处理算法性能的关键。
在实际应用中,我们常常需要在图像处理算法的准确性和执行效率之间进行权衡。
当算法执行时间过长或计算资源有限时,我们可以采用一些近似算法、加速算法或减少数据维度的方法来降低计算复杂度,从而提高算法的性能。
例如,经典的卷积神经网络 (CNN) 中,可以使用稀疏卷积、混合精度计算和网络剪枝等技术来减少计算量,提高执行效率。
此外,优化算法的实现也是提高图像处理算法性能的重要环节。
在实际编程过程中,通过对算法的优化实现,可以进一步提高算法的执行效率。
例如,使用高效的矩阵运算库、多线程并行计算、硬件加速和图像处理库等工具可以显著提高图像处理算法的执行效率。
此外,对算法的计算和存储优化也是提高性能的有效手段。
通过减少内存访问次数、内存布局优化和缓存利用等技术,可以减少计算的开销,提高算法的执行效率。
另外,针对特定的问题和应用场景,我们可以将图像处理算法与领域相关的先验知识相结合,从而进一步提高算法的性能。
例如,在医学影像分析领域中,结合医学专家的经验和标注数据,可以设计出更加高效和准确的图像处理算法。
提高计算机图像处理能力的方法近年来,计算机图像处理技术迅猛发展,应用领域也越来越广泛。
无论是数字娱乐产业、医疗诊断还是工业检测,都离不开计算机图像处理的支持。
然而,要提高计算机图像处理的能力并不是一件易事,需要通过多种方法和技术手段来实现。
一、优化算法和数据结构算法和数据结构是计算机图像处理能力的基石。
通过优化算法和数据结构的设计,可以提高图像处理的效率和精确度。
例如,在图像降噪算法中,可以采用快速傅里叶变换(FFT)等高效算法来实现。
另外,通过合理选择和设计数据结构,可以减少计算机运算量,提高图像处理的效率。
二、利用并行计算技术随着计算机硬件的不断发展,利用并行计算技术来提高图像处理能力已成为一种趋势。
并行计算技术可以充分利用计算机的多核处理器和图形处理器(GPU)等并行计算单元,同时处理多个图像任务,提高图像处理的效率。
例如,使用CUDA技术可以将图像处理任务分解为多个子任务,在多个GPU核心上并行计算,大大加快处理速度。
三、使用机器学习和深度学习技术近年来,机器学习和深度学习技术在计算机图像处理领域取得重要突破。
通过训练神经网络模型,可以实现图像分类、目标检测、图像生成等任务。
这些技术可以自动学习图像特征和模式,并根据学习结果进行图像处理。
例如,使用卷积神经网络(CNN)可以实现自动图像识别和分割,在人脸识别、医学影像分析等领域得到广泛应用。
四、采用高性能计算平台提高计算机图像处理能力还可以通过使用高性能计算平台来实现。
高性能计算平台可以提供更高的计算能力和存储能力,满足大规模图像处理任务的需求。
例如,可以利用云计算平台来进行图像处理,通过弹性伸缩的特性,灵活调配计算资源,提高图像处理的处理能力和效率。
总之,提高计算机图像处理能力是一个复杂而多样的过程。
通过优化算法和数据结构、利用并行计算技术、使用机器学习和深度学习技术,以及采用高性能计算平台等方法,可以不断提升计算机图像处理的能力。
这些方法的综合应用将会在未来的图像处理领域发挥重要作用,推动计算机图像处理技术不断进步,为人类带来更多福祉。
图像处理中的全局优化技术(Global optimization techniques in image processing and computer vision) (一)2013-05-29 14:26 1659人阅读评论(1) 收藏举报算法图像处理计算机视觉imagevisionMulinB按:最近打算好好学习一下几种图像处理和计算机视觉中常用的global optimization (或energy minimization) 方法,这里总结一下学习心得。
分为以下几篇:1. Discrete Optimization: Graph Cuts and Belief Propagation (本篇)2. Quadratic Optimization : Poisson Equation and Laplacian Matrix3. Variational Methods for Optical Flow Estimation4. TODO: Likelihood Maximization (e.g., Blind Deconvolution)1. Discrete Optimization: Graph Cuts and Belief Propagation很多图像处理和视觉的问题可以看成是pixel-labeling问题,用energy minimization framework可以formulate成以下能量方程:其中第一项叫data term (或叫unary term),是将label l_p赋给像素p时的cost,第二项叫smoothness term (或叫pairwise term),是每两个相邻pixel的labeling不同时产生的cost (w_pq是spatial varying weight,比如跟p和q的difference相关)。
传统的smoothness term 一般只考虑两两(pairwise)相邻的pixel,最近几年的CVPR和ICCV上开始出现很多higher-order MRF的研究,比如这位大牛的paper,这是题外话。
这种energy minimization framework其实从概率的角度看,等价于求Markov Random Field (MRF) 的maximum a posteriori (MAP) 概率。
求解这类energy minimization的方法,最流行的有两个,Graph Cuts 和Belief Propagation。
1.1 Graph Cuts刚开始学习Graph Cuts时,不知道到底这方法是从哪篇paper最早提出来的,因为在后来的paper里引用的参考文献一般指向好几个来源,这里先大致梳理一下参考文献。
一般认为,将Graph Cuts引入图像处理领域的先驱paper是Greig等人1989年发表的[1],不过貌似没有引起太大的注意。
真正使Graph Cuts在图像领域风靡起来的是两个俄罗斯人(貌似是在Cornell做出的成果),Yuri Boykov和Vladimir Kolmogorov,以及他们的导师Ramin Zabih。
首先引起大家注意的是Boykov在ICCV 2001上的使用Graph Cuts解决Interactive Image Segmentation的paper[2],以及这篇paper提到的一个max-flow算法[3] (该max-flow 算法最早是发在2001年的一个CVPR Workshop上,后来扩展到TPAMI [3])。
需要注意的是,这两篇paper里的Graph Cuts算法,只是针对只有两个label (待求变量是binary variable)的情况。
而Boykov的2001 TPAMI paper[4]提出使用alpha expansion技术将多个label的问题转化成一系列的binary label问题去逼近,这使得Graph Cuts算法开始风靡起来。
后来Kolmogorov的2004 TPAMI paper[5]进一步讨论了什么样的能量方程可以被Graph Cuts优化,并给出了一个简单清晰的根据能量方程构造相应graph的算法,该算法基本成为被大家广泛使用的Graph Cuts算法。
Boykov和Kolmogorov的代码可以从这里找到。
下面简单介绍一下Graph Cuts算法,先从binary label开始(见参考文献[2] [3])。
顾名思义,Graph Cuts是将图像中的所有pixel以及两个label作为node,根据data cost和smoothness cost建立node之间的edge,这样构造一个(无向)graph,然后通过cut算法将整个graph 切成两个分离的部分。
如下图所示:注意,图中的cut会切断它经过的所有edge(包括蓝色、红色、和土黄色的edge)。
如果将两个label的node看成两个特殊的terminal,这样的一个cut会阻断所有s连往t的路径(edge)。
在Boykov的ICCV 2001 paper [2]中,他证明了通过简单的方式构造这样的一个graph,如果能找到一个min-cut (即该cut经过的edge cost加起来在所有possible的cut 中最小),其实就是上面的能量方程的最小解(见paper中的Theorem 1)。
那么如何找到min-cut呢?在图论里,有证明找到min-cut其实等价于找到max-flow,即从s流往t的最大流量。
其实,min-cut等价于max-flow的intuition很简单,从一个terminal流往另一个terminal的最大流量,其瓶颈肯定是min-cut的位置。
这里有个有意思的介绍,关于网络里s-t flow的计算。
计算max-flow的经典算法主要有两种,一种是基于augmenting-path,一种是基于push-relabeling。
在Boykov和Kolmogorov的TPAMI 2004 paper [3]里,介绍了一种基于augmenting-path,为了图像这种扁平graph量身定制的max-flow算法,通过实验证明了其效率,这里有他们的代码。
在解决multi-labeling问题时(其实是更为普遍和常见的问题),在能量方程满足某些特定的条件下(注意:该限定条件其实挺难满足,后面讨论!),可以使用alpha expansion算法将其转化为一系列binary-labeling问题来逼近,参见Boykov TPAMI 2001 paper [4]。
见下图:这种alpha expansion思路很简单,当处理每一个label时(假设其为a),将其他所有的label 看成一个label package(假如称之为b),这时问题就变成了binary-labeling。
此时在进行cut 时,如果一个原来是a的pixel被cut给b,将无法确定到底给该pixel具体哪一个label(由于b是个大杂烩)。
所以在进行cut时,只允许原来是b的pixel被cut给a,也就是标记为a的pixel在expanding,这就是算法名字的来源。
需要注意的是,为了使得这样的一次alpha expansion可以被max-flow算法计算出来,graph的构造比之前的binary-labeling要稍微复杂一些(比如仅仅允许alpha expansion的话,有些跟b相连的edge weight要设成无穷大)。
使用alpha expansion算法的步骤很简单,如下:[cpp]view plaincopy1.// alpha expansion algorithm pseudo-code2.initialize labeling;3.4.while not converged5.{6.for each label a in L7. {8. construct a graph;9.do max-flow cut;10.if energy is smaller than before, accept it;11.else decline it;12. }13.}值得注意的是,这种alpha expansion只是multi-labeling问题的近似求解,而之前的max-flow算法是binary-labeling问题的exact求解方法。
而且,为了使得这种alpha expansion时的graph可以被构造出来,能量方程需要满足一定的限定条件,具体来说,是能量方程中的pairwise term函数V_pq需要满足某些限定条件。
在Boykov TPAMI 2001 paper [4]中称之为V_pq必须是一个metric(类似于满足“距离”的定义,比如:可交换、满足三角不等式)。
在Kolmogorov TPAMI 2004 paper [5] 中将其推广为V_pq必须是一个submodular函数(文中称之为regular,其实后来都称之为submodular),即函数V_pq必须满足V(0,0) + V(1,1) <= V(0,1) + V(1,0)条件。
该条件乍一看貌似很容易满足,特别是对于binary-labeling来说。
然而,注意,在alpha expansion中,该条件变成了如下,注意,其中l_p和l_q可能不一样。
这样一来其实该条件没那么容易满足!比如常用的quadratic cost就不满足!常用的pairwise term的V_pq函数如下表所示(Potts Model中delta函数是unit impulse函数):例如,quadratic cost时,l_p=3, l_q=10, a=5, 这时,上面条件里左侧第一项的值是49,第二项是0,不等式右侧第一项是4,第二项是25,显然不等式不成立!另外需要一提的是,其实即使上述的条件不成立,仍然可以使用alpha expansion,使用的时候可以对一些不满足条件的项进行修改,这种技术在CVPR 05的一篇paper里提出[6],叫做truncating,在这里的代码(文件energy.h,函数add_term2里)可以找到例子,代码非常简单:[cpp]view plaincopy1.//Truncating for non-submodualr term, code by Kolmogorov2.//A, D, C, B分别是上述不等式的四项3.if ( A+D > C+B)4.{5. Value delta = A+D-C-B;6. Value subtrA = delta/3;7.8. A = A-subtrA;9. C = C+subtrA;10. B = B+(delta-subtrA*2);11.}这种truncating之后的算法其实并不能保证最终结果是strong local minimum (注意,没有truncating的alpha expansion只是能保证找到strong local minimum,不能保证是global mininum),但是实际使用中效果不错。