图像处理之直方图匹配

合集下载

如何进行高效的图像匹配和图像配准

如何进行高效的图像匹配和图像配准

如何进行高效的图像匹配和图像配准图像匹配和图像配准是计算机视觉领域中常见的任务,其目的是通过计算机算法将两幅或多幅图像进行比较,从而找出它们之间的相似性或者进行图像的对齐。

本文将介绍一些高效的图像匹配和图像配准的方法。

一、图像匹配图像匹配即是将一幅图像中的特征在另一幅图像中找到对应物体或者区域。

下面是一些常见的图像匹配方法:1.特征点匹配特征点匹配是最常见的图像匹配方法之一,它通过在图像中提取特征点,并计算特征点的描述子,然后使用某种度量来比较两幅图像的特征点,找出最相似的特征点对。

常用的特征点匹配算法包括SIFT、SURF和ORB等。

2.直方图匹配直方图匹配是一种基于图像全局颜色或纹理分布的匹配方法,它将图像的直方图进行比较,通过计算直方图之间的相似性度量来进行匹配。

直方图匹配适用于颜色和纹理信息较为明显的图像匹配任务。

3.模板匹配模板匹配是一种基于像素点灰度值的匹配方法,它通过将一个预定义的模板图像滑动或者扫描到待匹配图像上,计算模板和图像之间的相似性度量,从而找到最佳匹配位置。

模板匹配适用于物体检测和目标跟踪等应用场景。

4.特征描述子匹配特征描述子匹配是一种将图像中的局部特征点的描述子进行比较的匹配方法,它通过计算特征点描述子之间的相似性度量找到最佳匹配。

常用的特征描述子匹配算法包括基于二值描述子的BRISK和ORB,基于二进制描述子的BRIEF和FREAK,以及基于浮点数描述子的SIFT、SURF和AKAZE等。

二、图像配准图像配准是将两幅或多幅图像进行对齐,使得它们在空间上或者几何上具有一致性。

下面是一些常用的图像配准方法:1.特征点配准特征点配准是将两幅图像中的特征点进行对应的一种配准方法,它通过计算特征点的几何变换关系,然后将其中一幅图像进行变换,使得两幅图像的特征点对应一致。

常用的特征点配准方法包括RANSAC、LMS和Hough变换等。

2.像素级配准像素级配准是将两幅图像的像素进行一一对应的配准方法,它通过计算图像间的几何变换关系,然后将其中一幅图像进行变换,使得两幅图像在几何上对应一致。

ENVI实习直方图匹配,校正,分类

ENVI实习直方图匹配,校正,分类

ENVI实习一实验目的(1)主要学习ENVI软件的基本功能(2)ENVI 软件完成影像增强(包括直方图匹配和去云)、融合、正射校正和监督、非监督分类四个大方面的试验。

(3)掌握视窗操作模块的功能和操作技能二软件和设备ENVI4.5一套三实验原理各个任务的试验原理和操作详细见下面操作,再次不详述。

一、图像增强(算法、原理、对比图)1、直方图匹配在ENVI 中使用Histogram Matching 工具可以自动地把一幅实现图像的直方图匹配到另一幅上,从而使两幅图像的亮度分布尽可能地接近。

使用该功能以后,在该功能被启动的窗口内,输入直方图将发生变化,以与所选图像显示窗口的当前输出直方图相匹配。

在灰阶和彩色图像上,都可以使用该功能。

操作步骤:选择Enhance > Histogram Matching,出现Histogram Matching Input parameters 对话框,在Match To中选择想匹配的图像。

在Input Histogram 会有Image、Scroll、Zoom、Band、、ROI来选择如数直方图的来源,下图为输入图像数据及其所用的拉伸(直方图匹配之前):下图为Match To 想匹配的图像及其拉伸:利用直方图匹配后图像2的直方图结果:从结果可以看出,匹配后的图像在亮度上已经明显增强,从偏暗增强为较亮;其直方图与#1中的图像直方图在亮度上分布也很接近。

2、图像去云常规的云处理算法会随云的覆盖类型的不同而不同,对在大范围内存在薄云的影像来说,采用同态滤波法较好。

同态滤波法把频率过滤与灰度变化结合起来,分离云与背景地物,最终从影像中去除云的影响,这种方法由于涉及到滤波器以及截至频率的选择,在滤波的过程中有时会导致一些有用信息的丢失。

对于局部有云的影像来说,一般使用时间平均法,这种算法适用于地物特征随时间变化较小的地区,如荒漠、戈壁等地区;对于植被覆盖茂密的地区,由于植被的长势与时间有密切的关系,不同时相的植被长势在影像中有明显的区别,这种简单的替代算法不再适用。

图像匹配的算法种类和原理

图像匹配的算法种类和原理

图像匹配的算法种类和原理
图像匹配是一种广泛应用于计算机视觉领域的技术,用于判断两个或多个图像之间的相似性或是否存在某种关联。

以下是几种常见的图像匹配算法和其原理:
1. 直方图匹配:该算法基于图像的颜色分布,通过比较两个图像的直方图来评估它们的相似性。

直方图是一种将图像像素值与其频率关联起来的统计工具。

2. 特征点匹配:该算法通过提取图像中的特征点,如角点、边缘等,然后比较两个图像中的特征点之间的距离或相似性来确定它们之间的匹配关系。

常见的特征点匹配算法包括SIFT、SURF 和ORB。

3. 模板匹配:该算法使用一个预先定义好的模板图像,将其与输入图像进行比较,找出最佳匹配的位置。

模板匹配算法通常使用相关性或差异性度量来评估匹配程度。

4. 形状匹配:该算法旨在比较图像中的形状特征,例如提取图像边界上的轮廓,并计算它们之间的相似性。

形状匹配通常与图像分割和轮廓提取技术结合使用。

5. 神经网络匹配:近年来,深度学习和卷积神经网络(CNN)等技术的发展为图像匹配带来了新的突破。

使用深度神经网络,可以学习到更高级别的特征表示,并通过训练模型来实现图像匹配任务。

这些算法各有优缺点,并且在不同应用场景下具有不同的适用性。

在实际应用中,经常需要结合多种算法来实现更准确的图像匹配结果。

ENVI实习直方图匹配,校正,分类

ENVI实习直方图匹配,校正,分类

ENVI实习一实验目的(1)主要学习ENVI软件的基本功能(2)ENVI 软件完成影像增强(包括直方图匹配和去云)、融合、正射校正和监督、非监督分类四个大方面的试验。

(3)掌握视窗操作模块的功能和操作技能二软件和设备ENVI4.5一套三实验原理各个任务的试验原理和操作详细见下面操作,再次不详述。

一、图像增强(算法、原理、对比图)1、直方图匹配在ENVI 中使用Histogram Matching 工具可以自动地把一幅实现图像的直方图匹配到另一幅上,从而使两幅图像的亮度分布尽可能地接近。

使用该功能以后,在该功能被启动的窗口内,输入直方图将发生变化,以与所选图像显示窗口的当前输出直方图相匹配。

在灰阶和彩色图像上,都可以使用该功能。

操作步骤:选择Enhance > Histogram Matching,出现Histogram Matching Input parameters 对话框,在Match To中选择想匹配的图像。

在Input Histogram 会有Image、Scroll、Zoom、Band、、ROI来选择如数直方图的来源,下图为输入图像数据及其所用的拉伸(直方图匹配之前):下图为 Match To 想匹配的图像及其拉伸:利用直方图匹配后图像2的直方图结果:从结果可以看出,匹配后的图像在亮度上已经明显增强,从偏暗增强为较亮;其直方图与#1中的图像直方图在亮度上分布也很接近。

2、图像去云常规的云处理算法会随云的覆盖类型的不同而不同,对在大范围内存在薄云的影像来说,采用同态滤波法较好。

同态滤波法把频率过滤与灰度变化结合起来,分离云与背景地物,最终从影像中去除云的影响,这种方法由于涉及到滤波器以及截至频率的选择,在滤波的过程中有时会导致一些有用信息的丢失。

对于局部有云的影像来说,一般使用时间平均法,这种算法适用于地物特征随时间变化较小的地区,如荒漠、戈壁等地区;对于植被覆盖茂密的地区,由于植被的长势与时间有密切的关系,不同时相的植被长势在影像中有明显的区别,这种简单的替代算法不再适用。

图像处理技术中的直方图匹配方法介绍

图像处理技术中的直方图匹配方法介绍

图像处理技术中的直方图匹配方法介绍直方图匹配是图像处理技术中常用的一种方法,它可以用来改变图像的亮度分布,使之符合特定的标准。

本文将介绍直方图匹配的原理、方法和应用。

直方图是图像中各灰度级的统计信息,它可以反映图像的亮度分布。

直方图匹配的目标是通过对比两个图像的直方图,调整一个图像的像素值,使其直方图与另一个图像的直方图相匹配。

直方图匹配的原理是将原始图像的亮度分布映射到目标图像的亮度分布上。

具体过程包括以下步骤:计算原始图像和目标图像的直方图。

直方图可以通过统计每个灰度级的像素个数计算得出。

将原始图像的直方图进行归一化处理,以使得图像的亮度范围保持一致。

计算原始图像和目标图像的累积直方图。

累积直方图反映了每个灰度级及其前面所有灰度级的像素个数累加值。

接着,根据原始图像和目标图像的累积直方图,计算像素值映射表。

该映射表可以通过将原始图像上的每个灰度级映射到目标图像上对应的灰度级来实现直方图匹配。

使用像素值映射表将原始图像的像素值映射到目标图像上,完成直方图匹配。

在图像处理中,直方图匹配有多种应用。

其中一个主要应用是图像增强。

通过将一幅图像的直方图匹配到另一幅具有良好亮度分布的图像上,可以增强原始图像的对比度和细节,改善图像的视觉效果。

直方图匹配也可以用于图像配准。

在医学影像、遥感影像等领域,图像配准是一个重要的任务。

通过直方图匹配,可以使两幅图像在亮度上具有一致性,从而提高图像配准的准确性。

直方图匹配还可以用于图像分类和目标检测。

通过将图像的直方图与训练样本的直方图进行匹配,可以实现图像的自动分类和目标的自动检测。

需要注意的是,直方图匹配虽然可以改善图像的亮度分布,但也可能导致图像的颜色失真。

因此,在应用直方图匹配时需要谨慎,根据具体情况进行权衡和调整。

总结来说,直方图匹配是图像处理中常用的方法,可以通过调整图像的亮度分布实现图像增强、图像配准、图像分类和目标检测。

在实际应用中,需要充分考虑图像的特点和需求,谨慎选择合适的参数和方法,以达到最佳效果。

histogram matching 匀色算法

histogram matching 匀色算法

histogram matching 匀色算法直方图匹配(Histogram Matching)是一种用于调整图像颜色分布的图像处理技术,以使其与参考图像的颜色分布相匹配。

匹配的目标是使图像的颜色分布更均匀,从而改善图像的视觉质量。

以下是直方图匹配的一般算法步骤:
1. 计算直方图:对于待处理图像和参考图像,首先计算它们的颜色直方图。

颜色直方图表示图像中各个颜色级别的分布情况。

2. 累积分布函数:计算待处理图像和参考图像的颜色分布的累积分布函数(CDF)。

CDF表示颜色级别的累积分布情况,可用于比较两个图像的颜色分布。

3. 匹配直方图:对于每个颜色级别,将待处理图像的CDF映射到参考图像的CDF。

这意味着将待处理图像的颜色级别映射到参考图像中的相应颜色级别。

这个映射可以通过简单的插值或其他变换方法来实现。

4. 调整图像:使用新的CDF映射,对待处理图像中的颜色级别进行调整,以匹配参考图像的颜色分布。

这通常涉及重新分配颜色级别的像素值。

5. 输出结果:输出调整后的图像,其颜色分布应与参考图像匹配。

直方图匹配的目标是改善图像的视觉一致性,使其具有与参考图像相似的颜色特性。

这在图像处理、计算机视觉和计算机图形学中用于各种应用,包括颜色校正、图像合成和图像增强。

图像处理实践中常见问题及解决方案

图像处理实践中常见问题及解决方案

图像处理实践中常见问题及解决方案图像处理是指对图像进行数字化处理、分析及修改的一种技术。

在图像处理实践中,常常会遇到一些问题,如图像质量、噪声、颜色处理等等。

本文将介绍图像处理实践中常见的问题,并提供相应的解决方案。

一个常见的问题是图像质量的提升。

在现实环境中,图像可能会因为光照不足、噪声干扰等因素而失真。

为了提高图像质量,可以采取以下几个解决方案。

首先,可以采用图像增强技术。

图像增强技术可以通过增加图像的对比度、清晰度和亮度来改善图像的质量。

一种常用的图像增强方法是直方图均衡化,它可以增强图像的细节并改善图像的对比度。

其次,可以使用图像去噪技术。

噪声是影响图像质量的一个常见问题。

为了减少图像中的噪声,可以采用滤波器。

滤波器可以通过平滑图像的局部区域来去除噪声,并保持图像的细节。

一种常用的滤波器是高斯滤波器,它可以通过平滑图像中的像素点来减少噪声。

另外,颜色处理也是图像处理中的一个重要问题。

在不同的应用场景中,可能需要对图像的色彩进行调整。

为了在图像处理中实现颜色的调整,可以采用以下几个解决方案。

首先,可以使用颜色空间转换。

颜色空间转换可以将图像从一种颜色空间转换到另一种颜色空间,从而实现颜色的调整。

常用的颜色空间包括RGB、CMYK和HSV等。

通过选择合适的颜色空间,可以改变图像的色调、亮度和饱和度。

其次,可以使用直方图匹配技术。

直方图匹配可以通过比较图像的直方图来调整图像的颜色分布。

通过将图像的直方图与目标直方图进行匹配,可以实现颜色的调整和特定效果的实现。

此外,还可能遇到图像分割的问题。

图像分割是将图像分成不同的区域或目标的过程。

为了实现图像分割,可以采用以下两种常见的方法。

第一种方法是基于阈值的分割。

基于阈值的分割是通过将图像的像素点分成两个或多个类别来实现分割的。

通过设置合适的阈值,可以将图像中不同的区域分割出来。

这种方法简单易用,但对于复杂的图像可能效果不理想。

第二种方法是基于边缘的分割。

图像的直方图均衡、匹配及图像分割【数字图像处理大作业】

图像的直方图均衡、匹配及图像分割【数字图像处理大作业】

数字图像处理—————————————————————————————Porject3:图像的直方图均衡、匹配及图像分割摘要:本文利用matlab的编程,绘出图像的直方图。

本文用了一般的直方图均衡和自适应的直方图均衡的算法分别对各个直方图进行均衡,得到了不同的效果。

本文讨论了单映射规则和组映射规则的直方图匹配技术。

本文采用了一般的直方图图像分割技术对图像进行分割,同时还讨论了一种基于梯度的直方图阈值图像分割技术。

2012 年4 月12 日星期四项目题目:共10 幅经变亮或者变暗处理的源图像;要求:1.把附件图像的直方图画出;2.把所有图像进行直方图均衡;输出均衡后的图像和源图像进行比对;分析改善内容;3.进一步把图像按照对源图像直方图的观察,各自指定不同源图像的直方图,进行直方图匹配,进行图像增强;4.利用直方图对图像elain和woman 进行分割;技术分析1. 画出附件的直方图,先利用读取图像数据的函数将图像的数据点读取出来,然后再对数据点的值进行排序,然后再统计每个灰度值出现的次数,然后再用这些数据值绘出直方图2. 把所有图像进行直方图均衡;输出均衡后的图像和源图像进行比对;分析改善内容;先说说直方图均衡的原理:从数学上来说图像直方图是图像各灰度值统计特性与图像灰度值的函数,它是对图像中每一灰度值出现频率的统计,从图形上来说,它是一个二维图,横坐标表示图像中各个像素点的灰度级,纵坐标为各个灰度级上图像各个像素点出现的次数或概率。

灰度直方图性质:①表征了图像的一维信息。

只反映图像中像素不同灰度值出现的次数(或频数)而未反映像素所在位置。

②与图像之间的关系是多对一的映射关系。

一幅图像的直方图基本上可描述图像的概貌,如图像的阴暗状况和对比度等特征都可以通过直方图反映出来。

既然一幅图像的概貌可以通过直方图反映出来,反之,可以通过修改直方图的方法来调整图像的灰度分布情况,因为直方图反映的是一个图像的灰度值的概率统计特征,所以,基于直方图的图像增强技术是以概率统计学理论为基础的,直方图反映的是一个图像的灰度值的概率统计特征。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public static bool HistogramMatching(Bitmap srcBmp, Bitmap matchingBmp, out Bitmap dstBmp) {
if (srcBmp == null || matchingBmp == null) {
dstBmp = null;
//R
for (int i = 0; i < 256; i++) {
diffBR = 1;
for (int j = kR; j < 256; j++) {
//找到两个累计分布函数中最相似的位置
diffAR = Math.Abs(srcCpR[i] - matchCpR[j]);
if (diffAR - diffBR < 1.0E-08) {//当两概率之差小于0.000000001时可近似认为相等
double[] srcCpG = null;
double[] srcCpB = null;
double[] matchCpB = null;
double[] matchCpG = null;
double[] matchCpR = null;
//分别计算两幅图像的累计概率分布
getCumulativeProbabilityRGB(tempSrcBmp, out srcCpR, out srcCpG, out srcCpB);
tempG[0] = hG[0];
tempB[0] = hB[0];
}
cpR[i] = (tempR[i] / totalPxl);
cpG[i] = (tempG[i] / totalPxl);
cpB[i] = (tempB[i] / totalPxl);
}
}
/// <summary>
///获取图像三个分量的直方图数据
hB[ptr[j * 3]]++;
hG[ptr[j * 3 + 1]]++;
hR[ptr[j * 3 + 2]]++;
}
}
}
srcBmp.UnlockBits(bmpData);
return;
}
for (int i = 0; i < 256; i++) {
if (i != 0) {
tempR[i] = tempR[i - 1] + hR[i];
tempG[i] = tempG[i - 1] + hG[i];
tempB[i] = tempB[i - 1] + hB[i];
}
else {
tempR[0] = hR[0];
hB = new int[256];
hG = new int[256];
BitmapData bmpData = srcBmp.LockBits(new Rectangle(0, 0, srcBmp.Width, srcBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
}
//映射变换
BitmapData bmpData = dstBmp.LockBits(new Rectangle(0, 0, dstBmp.Width, dstBmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe {
return;
}
cpR = new double[256];
cpG = new double[256];
cpB = new double[256];
int[] hR = null;
int[] hG = null;
int[] hB = null;
double[] tempR = new double[256];
ptr[j * 3 + 1] = mapPixelG[ptr[j * 3 + 1]];
ptr[j * 3] = mapPixelB[ptr[j * 3]];
}
}
}
dstBmp.UnlockBits(bmpData);
return true;
}
/// <summary>
///计算各个图像分量的累计概率分布
private static void getCumulativeProbabilityRGB(Bitmap srcBmp, out double[] cpR, out double[] cpG, out double[] cpB) {
if (srcBmp == null) {
cpB = cpG = cpR = null;
diffBR = diffAR;
//记录下此时的灰度级
kR = (byte)j;
}
else {
kR = (byte)Math.Abs(j - 1);
break;
}
}
if (kR == 255) {
for (int l = i; l < 256; l++) {
mapPixelR[l] = kR;
}
break;
return false;
}
dstBmp = new Bitmap(srcBmp);
Bitmap tempSrcBmp = new Bitmap(srcBmp);
Bitmap tempMatchingBmp = new Bitmap(matchingBmp);
double[] srcCpR = null;
直方图匹配,又称直方图规定化,即变换原图的直方图为规定的某种形式的直方图,从而使两幅图像具有类似的色调和反差。直方图匹配属于非线性点运算。
直方图规定化的原理:对两个直方图都做均衡化,变成相同的归一化的均匀直方图,以此均匀直方图为媒介,再对参考图像做均衡化的逆运算
/// <summary>
///直方图匹配
/// </summary>
/// <param name="srcBmp">原始图像</param>
/// <param name="matchingBmp">匹配图像</param>
/// <param name="dstBmp">处理后图像</param>
/// <returns>处理成功true失败false</returns>
unsafe {
byte* ptr = null;
for (int i = 0; i < srcBmp.Height; i++) {
ptr = (byte*)bmpData.Scan0 + i * bmpData.Stride;
for (int j = 0; j < srcBmp.Width; j++) {
/// </summary>
/// <param name="srcBmp">原始图像</param>
/// <param name="cpR">R分量累计概率分布</param>
/// <param name="cpG">G分量累计概率分布</param>
/// <param name="cpB">B分量累计概率分布</param>
byte kR = 0, kG = 0, kB = 0;
//逆映射函数
byte[] mapPixelR = new byte[256];
byte[] mapPixelG = new byte[256];
byte[] mapPixelB = new byte[256];
//分别计算RGB三个分量的逆映射函数
diffBG = diffAG;
kG = (byte)j;
}
else {
kG = (byte)Math.Abs(j - 1);
break;
}
}
if (kG == 255) {
for (int l = i; l < 256; l++) {
mapPixelG[l] = kG;
}
break;
}
mapPixelG[i] = kG;
double[] tempG = new double[256];
double[] tempB = new double[256];
getHistogramRGB(srcBmp, out hR, out hG, out hB);
int totalPxl = srcBmp.Width * srcBmp.Height;
}
//B
for (int i = 0; i < 256; i++) {
diffBB = 1;
for (int j = kB; j < 256; j++) {
diffAB = Math.Abs(srcCpB[i] - matchCpB[j]);
if (diffAB - diffBB < 1.0E-08) {
byte* ptr = null;
for (int i = 0; i < dstBmp.Height; i++) {
ptr = (byte*)bmpData.Scan0 + i * bmpData.Stride;
相关文档
最新文档