OpenCvSharp学习笔记24--直方图比较

更新时间:2023-07-20 18:53:40 阅读: 评论:0

OpenCvSharp 学习笔记24--直⽅图⽐较
⼀,直⽅图⽐较⽅法概述:
对输⼊的两张图像计算得到直⽅图H1和H2,归⼀化到相同的尺度空间(如果⽐较的两个图像的⼤⼩不⼀致,计算直⽅图后得到的像素频次不⼀致,⽆法⽐较,必须归⼀化到相同的尺度空间才可以⽐较) 然后通过计算H1和H2的之间的距离得到两个直返图的相似程度进⽽⽐较图像本⾝的相似程度.OpenCV提供的⽐较⽅法有四种:1:Correlation 相关性⽐较:
:是均值  ,为直⽅图区间(bins)的个数。 :⽐较的两个直⽅图数据集(梯度范围⼀致)
关于食物的单词分⼦:  的直⽅图每个值 减去它的均值,  的直⽅图每个值 减去它的均值 得到两个值相乘,再求总和分母: 和分⼦计算⽅式差不多,求的是⽅差总和,然后再开平⽅。
结论: ⼤相关性系数要⽐⼩相关性系数匹配的好。完全匹配的相关性系数为1,⽽完全 不匹配会得到 -1。⽽ 0 对应着两个分布没有关系(随机组合)。
2:Chi- Square 卡⽅⽐较:
:表⽰两个直⽅图数据集,梯度范围⼀致)。 :直⽅图bins级别中的每⼀个值。
由上⾯的公式可以推到处:低分值表⽰直⽅图匹配的很好。如果两幅图像⼀样则 为 0 。⽽完全不匹配的值⽆下限(依赖直⽅图的⼤⼩)。3:Interction 交集法:
管理团队方案直⽅图交集法,简单基于两个直⽅图的交集,该⽅法对两个直⽅图中的共同部分求和。
:表⽰两个直⽅图数据集,梯度范围⼀致)。
这个公式⽐较简单。对于该度量⽅法,⾼分值意味着匹配较好,如果两个直⽅图都进⾏了归⼀化,完全匹配对应的值是1 ,完全不匹配对应的值是 0 。身正
d (H ,H )=
correl 12(H (I )−)(H (I )−)∑I 1H
ˉ12∑2H ˉ22(H (I )−)(H (H )−)∑I 1H赵高简介
ˉ12H ˉ2H ˉ=H ˉk N
H (J )
∑J K N :H ;H 12H 1H 2d (H ,H )=Chi −Square 12I
∑H (I )1(H (I )−H (I ))
122
H ,H 12I d (H ,H )=
Interction 12min(H (I ),H (I ))
I
12H ,H 12
4:Bhattacharyya distance method 巴⽒距离:是对两个分布重叠度的⼀种度量⽅法。
:表⽰两个直⽅图数据集,梯度范围⼀致)。
:是均值为直⽅图区间(bins)的个数。
结论: 匹配效果越好 ,值越⼩。效果越差,值越⼤。完全匹配是 0 ,⽽完全不匹配是1。
⼆ ,使⽤步骤和API :
1. ⾸先把图像从RGB⾊彩空间转换到HSV⾊彩空间
2. 计算图像的直⽅图,然后归⼀化到 ( 0 ~ 1) 之间
属马和属羊
3. 使⽤上⾯介绍的4中⽅法⽐较 ,API: Cv2.CompareHist Cv2.CompareHist(): 返回⽐较结果 double 类型。
参数描述
InputArray h1⽐较的第⼀个直⽅图InputArray h2
⽐较的第⼆个直⽅图HistCompMethods method
直⽅图的⽐较⽅法,枚举类型
三, 代码:
static Mat baMat, src1, src2;
private static void HistogarmToComparison(string path1, string path2, string path3)        {
using (baMat = new Mat(path1, ImreadModes.AnyColor | ImreadModes.AnyDepth))            using (src1 = new Mat(path2, ImreadModes.AnyColor | ImreadModes.AnyDepth))            using (src2 = new Mat(path3, ImreadModes.AnyColor | ImreadModes.AnyDepth))            {
//1:从BGR 空间转换到HSV ⾊彩空间
Mat baHSV = new Mat();                Mat src1HSV = new Mat();                Mat src2HSV = new Mat();
Cv2.CvtColor(baMat, baHSV, ColorConversionCodes.BGR2HSV);                Cv2.CvtColor(src1, src1HSV, ColorConversionCodes.BGR2HSV);                Cv2.CvtColor(src2, src2HSV, ColorConversionCodes.BGR2HSV);                //Mat[] mats = new Mat[] { baHSV, src1HSV, src2HSV };                Mat[] mats1 = Cv2.Split(baHSV);                Mat[] mats2 = Cv2.Split(src1HSV);                Mat[] mats3 = Cv2.Split(src2HSV);                //计算直⽅图并归⼀化数据                int bin1 = 50; //灰度等级                int bin2 = 60;//灰度等级                int[] histSiz = { bin1, bin2 };
int[] channels = { 0, 1 };//图像通道数
d (H ,H )=
correl 121−
N H
西南科技大学是几本
ˉ1H ˉ22∑I H (I )∗H (I )12H ,H 12H
ˉN :
int[] channels = { 0, 1 };//图像通道数
Rangef[] rangefs = new Rangef[] //梯度值范围
{
new Rangef(0, 180),
new Rangef(0,256)
};
Mat baHist = new Mat(baMat.Size(), MatType.CV_32FC2);
Mat src1Hist = new Mat(src1.Size(), MatType.CV_32FC2);
Mat src2Hist = new Mat(src2.Size(), MatType.CV_32FC2);
Cv2.CalcHist(mats1, channels, new Mat(), baHist, 2, histSiz, rangefs, true, fal);
Cv2.Normalize(baHist, baHist, 0, 1, NormTypes.MinMax, -1, null);
Cv2.CalcHist(mats2, channels, new Mat(), src1Hist, 2, histSiz, rangefs, true, fal);
Cv2.Normalize(src1Hist, src1Hist, 0, 1, NormTypes.MinMax, -1, null);
Cv2.CalcHist(mats3, channels, new Mat(), src2Hist, 2, histSiz, rangefs, true, fal);
Cv2.Normalize(src2Hist, src2Hist, 0, 1, NormTypes.MinMax, -1, null);
//⽐较直⽅图
double bcomb = Cv2.CompareHist(baHist, baHist, HistCompMethods.Correl);
double s1coms2 = Cv2.CompareHist(src1Hist, src2Hist, HistCompMethods.Correl);
double bcoms1 = Cv2.CompareHist(baHist, src1Hist, HistCompMethods.Correl);
double bcoms2 = Cv2.CompareHist(baHist, src2Hist, HistCompMethods.Correl);
Mat mats1Ands2 = new Mat();
src2.CopyTo(mats1Ands2);
Cv2.PutText(baMat, bcomb.ToString(), new Point(30, 30), HersheyFonts.HersheyComplex, 1, new Scalar(0, 255, 0), 2, LineTypes.AntiAlias);
思念泛滥成灾
Cv2.PutText(src1, bcoms1.ToString(), new Point(30, 30), HersheyFonts.HersheyComplex, 1, new Scalar(0, 255, 0), 2, LineTypes.AntiAlias);
Cv2.PutText(src2, bcoms2.ToString(), new Point(30, 30), HersheyFonts.HersheyComplex, 1, new Scalar(0, 255, 0), 2, LineTypes.AntiAlias);
Cv2.PutText(mats1Ands2, s1coms2.ToString(), new Point(30, 30), HersheyFonts.HersheyComplex, 1, new Scalar(0, 255, 0), 2, LineTypes.AntiAl ias);
using (new Window("b_com_b :baMat", WindowMode.Normal, baMat))
using (new Window("b_com_s1 :src1", WindowMode.Normal, src1))
using (new Window("b_com_s2 :src2", WindowMode.Normal, src2))
using (new Window("s1_com_s2 :mats1Ands2", WindowMode.Normal, mats1Ands2))
{
Cv2.WaitKey(0);
}
}
}
绿色先锋
输出⽐较结果:

本文发布于:2023-07-20 18:53:40,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1107416.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:匹配   图像   得到   结果   相似   分布   总和   没有
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图