颜色相似度量
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
histImage_Red_Sub=Mat::zeros(histHeight,bins,CV_8UC3);
(5) //绘制红色分量直方图 for(int i=0;i<bins;i++){ float binValue_red=redHist.at<float>(i); int
intensity_red=cvRound(binValue_red*histHeight/maxValue_red); rectangle(histImage_Red,Point(i*scale,histHeight-1), Point((i+1)*scale-1,histHeight-intensity_red),Scalar(0,0,255)); }
1.相关(method=CV_COMP_CORREL) 2.卡方(method=CV_COMP_CHISQR) 3.直方图相交(method=CV_COMP_INTERSECT) 4.巴氏距离(method=CV_COMP_BHATTACHARYYA)
测试图片:
程序运行结果(一维直方图):
说明:对于直方图相交,高分表示好的匹配,而低分表示坏匹配。而 巴氏距离则相反,低分表示好的匹配,高分表示坏的匹配。
(3)巴氏距离 Bhattacharyya Distance
Bhattacharyya距离测量两个离散或连续概率分布 的相似性。它与衡量两个统计样品或种群之间的重叠 量的Bhattacharyya系数密切相关。
巴氏距离的定义 对于离散概率分布 p和q在同一域 X,它被定义为:
其中:是Bhattacharyya系数。
hist_size,ranges,true,false); (4) //为绘制直方图进行参数准备 double maxValue_red,maxValue_red_Sub; minMaxLoc(redHist,0,&maxValue_red,0,0); minMaxLoc(redHist_Sub,0,&maxValue_red_Sub,0,0); int histHeight=256; int scale=1; Mat histImage_Red=Mat::zeros(histHeight,bins,CV_8UC3); Mat
二.基于颜色特征的相似度量
颜色是图像的一种重要视觉性质, 是人识别图像的 主要感知特征之一 。相对于其他的特征,颜色特 。 征非常稳定,对于旋转、平移和尺度变化等都不敏感,而 且颜色特征计算简单,因此在图像处理中得到广 泛的重视和研究 。目前, 基于颜色特征的信息检索成为 图像检索中的一种重要而广泛使用的方法 。颜 色特征可用不同形式的颜色直方图来表示,主要有 3 个 独立的一维直方图, 分别为彩色图像 RGB3 个分 量的直方图,基于该颜色直方图之间的距离或它们的交 可以来判断颜色相似度 。
cout<<"R对比结果为(直方图相 交):"<<compareResults_r<<endl;
(9) //巴氏距离法计算原图和测试图
compareResults_r=compareHist(redHist,redHist_Sub,CV_C OMP_BHATTACHARYYA);
cout<<"R对比结果为(巴氏距 离):"<<compareResults_r<<endl;
基于直方图的颜色相似度计算方法
优点:与图像旋转、平移和尺寸变化无关 缺点:两幅看起来颜色非常相似的图像 ,如果它
们的颜色直方图交集为空或者直方图之间距离很大 , 那么相似度为零或者很小 ,这显然不符合人的感知 。
具体方法:绝对值距离、巴氏距离、欧式距离、 直方图相交法、x2距离、参考颜色表、中心矩等
对于连续概率分布,Bhattacharyya系数被定义为:
(3)OpenCV中直方图对比
要对两个直方图(如H1和H2)进行比较,要选择 衡量直方图相似度的对比标准(d(H1,H2))。在 OpenCV2.X中,用compareHist()函数来对比两个直方 图的相似度。
compareHist()函数用于两幅直方图进行比较。有两个版 本的C++原型,如下:
(3) //进行直方图的计算(红色分量部分) calcHist(&srcImage,1,channels_r,Mat(),redHist,1,hist_size,r
anges,true,false); calcHist(&srcImage_Sub,1,channels_r,Mat(),redHist_Sub,1,
normalize(redHist_Sub,redHist_Sub,0,1,NORM_MINM AX,-1,Mat());
(8) //直方图相交法对比原图和测试图
double compareResults_r=compareHist(redHist,redHist_Sub, CV_COMP_INTERSECT);
RGB三色直方图的对比
说明:对于直方图相交,高分表示好的匹配,而低分表示坏匹 配。而巴氏距离则相反,低分表示好的匹配,高分表示坏的匹配。
主要代码分析
(1) //载入原图和测试图并显示 Mat srcImage,srcImage_Sub; srcImage=imread("1.jpg"); srcImage_Sub=imread("2.jpg"); imshow("原始图",srcImage); imshow("原始图2",srcImage_Sub); (2) //定义与初始化相关变量 int bins=256; int hist_size[]={bins}; float range[]={0,256}; const float* ranges[]={range}; MatND redHist,redHist_Sub; int channels_r[]={0};
(2)HSV颜色模型
每一种颜色都是由色相(Hue,简H),饱和度 (Saturation,简S)和色明度(Value,简V)所表示 的。HSV模型对应于圆柱坐标系中的一个圆锥形子集, 圆锥的顶面对应于V=1。它包含RGB模型中的R=1,G=1, B=1 三个面,所代表的颜色较亮。色彩H由绕V轴的旋 转角给定。红色对应于 角度0° ,绿色对应于角度 120°,蓝色对应于角度240°。在HSV颜色模型中,每 一种颜色和它的补色相差180°。饱和度S取值从0到1, 所以圆锥顶面的半径为1。
颜色相似度量
XXX
一.颜色模型
颜色模型就是指某个三维颜色空间中的一个可见 光子集,它包含某个颜色域的所有颜色。
在大多数的彩色图形显示设备一般都是使用红、 绿、蓝三原色,我们的真实感图形学中的主要的颜色 模型也是RGB模型,但是红、绿、蓝颜色模型用起来 不太方便,它与直观的颜色概念如色调、饱和度和亮 度Biblioteka Baidu没有直接的联系。颜色模型主要有HSV、RGB、 HSI、CHL、LAB、CMY等。它们在不同的行业各有所 指,但在计算机技术方面运用最为广泛。
(6) //显示红色分量直方图
imshow("Red",histImage_Red);
imshow("RedSub",histImage_Red_Sub); (7) //矩阵归一化
normalize(redHist,redHist,0,1,NORM_MINMAX,1,Mat());
for(int i=0;i<bins;i++){ float binValue_red=redHist_Sub.at<float>(i); int
intensity_red=cvRound(binValue_red*histHeight/maxValue_red); rectangle(histImage_Red_Sub,Point(i*scale,histHeight-1), Point((i+1)*scale-1,histHeight-intensity_red),Scalar(0,0,255)); }
(1)RGB颜色模型
RGB 颜色模型使用了颜色成分红(R)、绿(G)和蓝 (B)来定义所给颜色中红色、绿色和蓝色的光的量。在24 位图像中,每一颜色成分都由0到255之间的数值表示。在 位速率更高的图像中,如48位图像,值的范围更大。在加 颜色模型中,如RGB,颜色是通过透射光形成的。因此, RGB 被应用于监视器中,对红色、蓝色和绿色的光以各种 方式调和来产生更多颜色。当红色、蓝色和绿色的光以其 最大强度组合在一起时,眼睛看到的颜色就是白色。理论 上,颜色仍为红色、蓝色和绿色,但是在监视器上这些颜 色的像素彼此紧挨着,用眼睛无法区分出这三种颜色。当 每一种颜色成分的值为0时,即表示没有任何颜色的光,因 此,眼镜看到的颜色就为黑色。 RGB 是最常用的颜色模型, 因此,他可以存储和显示多种颜色。
C++: double compareHist(InputArray H1,InputArray H2,
int methiod)
C++: double compareHist(const SparseMat& H1,const SparseMat& H2,int method) 它们的前两个参数都是要比较的大小相同的直方图,第 三个变量是所选择的距离标准。可用如下的4种方法,比 较两个直方图:
(1)Minkowsky 距离
设a, b是两幅图像对应的特征向量,ai,bi分别代 表特征分量。Minkowsky 距离是基于Lp 范数定义的:
a) 如果 p=l,称为城区距离(city-block),也就是绝对值 距离:
b) 如果 p=2,称为欧式距离(Euclideandistance):
(10)
waitKey(0); return 0;
THANK YOU!!!
欧氏距离是最易于理解的一种距离计算方法,源 自欧氏空间中两点间的距离公式。 c) 如果 p →∞,称为切比雪夫距离(Chebyshevdistance):
(2)直方图相交法
直方图相交法(histogram intersection)是由 Swain 等人于 1991 年首次提出的,直方图相交法计算简单快 速并且能较好地抑制背景的影响。
(5) //绘制红色分量直方图 for(int i=0;i<bins;i++){ float binValue_red=redHist.at<float>(i); int
intensity_red=cvRound(binValue_red*histHeight/maxValue_red); rectangle(histImage_Red,Point(i*scale,histHeight-1), Point((i+1)*scale-1,histHeight-intensity_red),Scalar(0,0,255)); }
1.相关(method=CV_COMP_CORREL) 2.卡方(method=CV_COMP_CHISQR) 3.直方图相交(method=CV_COMP_INTERSECT) 4.巴氏距离(method=CV_COMP_BHATTACHARYYA)
测试图片:
程序运行结果(一维直方图):
说明:对于直方图相交,高分表示好的匹配,而低分表示坏匹配。而 巴氏距离则相反,低分表示好的匹配,高分表示坏的匹配。
(3)巴氏距离 Bhattacharyya Distance
Bhattacharyya距离测量两个离散或连续概率分布 的相似性。它与衡量两个统计样品或种群之间的重叠 量的Bhattacharyya系数密切相关。
巴氏距离的定义 对于离散概率分布 p和q在同一域 X,它被定义为:
其中:是Bhattacharyya系数。
hist_size,ranges,true,false); (4) //为绘制直方图进行参数准备 double maxValue_red,maxValue_red_Sub; minMaxLoc(redHist,0,&maxValue_red,0,0); minMaxLoc(redHist_Sub,0,&maxValue_red_Sub,0,0); int histHeight=256; int scale=1; Mat histImage_Red=Mat::zeros(histHeight,bins,CV_8UC3); Mat
二.基于颜色特征的相似度量
颜色是图像的一种重要视觉性质, 是人识别图像的 主要感知特征之一 。相对于其他的特征,颜色特 。 征非常稳定,对于旋转、平移和尺度变化等都不敏感,而 且颜色特征计算简单,因此在图像处理中得到广 泛的重视和研究 。目前, 基于颜色特征的信息检索成为 图像检索中的一种重要而广泛使用的方法 。颜 色特征可用不同形式的颜色直方图来表示,主要有 3 个 独立的一维直方图, 分别为彩色图像 RGB3 个分 量的直方图,基于该颜色直方图之间的距离或它们的交 可以来判断颜色相似度 。
cout<<"R对比结果为(直方图相 交):"<<compareResults_r<<endl;
(9) //巴氏距离法计算原图和测试图
compareResults_r=compareHist(redHist,redHist_Sub,CV_C OMP_BHATTACHARYYA);
cout<<"R对比结果为(巴氏距 离):"<<compareResults_r<<endl;
基于直方图的颜色相似度计算方法
优点:与图像旋转、平移和尺寸变化无关 缺点:两幅看起来颜色非常相似的图像 ,如果它
们的颜色直方图交集为空或者直方图之间距离很大 , 那么相似度为零或者很小 ,这显然不符合人的感知 。
具体方法:绝对值距离、巴氏距离、欧式距离、 直方图相交法、x2距离、参考颜色表、中心矩等
对于连续概率分布,Bhattacharyya系数被定义为:
(3)OpenCV中直方图对比
要对两个直方图(如H1和H2)进行比较,要选择 衡量直方图相似度的对比标准(d(H1,H2))。在 OpenCV2.X中,用compareHist()函数来对比两个直方 图的相似度。
compareHist()函数用于两幅直方图进行比较。有两个版 本的C++原型,如下:
(3) //进行直方图的计算(红色分量部分) calcHist(&srcImage,1,channels_r,Mat(),redHist,1,hist_size,r
anges,true,false); calcHist(&srcImage_Sub,1,channels_r,Mat(),redHist_Sub,1,
normalize(redHist_Sub,redHist_Sub,0,1,NORM_MINM AX,-1,Mat());
(8) //直方图相交法对比原图和测试图
double compareResults_r=compareHist(redHist,redHist_Sub, CV_COMP_INTERSECT);
RGB三色直方图的对比
说明:对于直方图相交,高分表示好的匹配,而低分表示坏匹 配。而巴氏距离则相反,低分表示好的匹配,高分表示坏的匹配。
主要代码分析
(1) //载入原图和测试图并显示 Mat srcImage,srcImage_Sub; srcImage=imread("1.jpg"); srcImage_Sub=imread("2.jpg"); imshow("原始图",srcImage); imshow("原始图2",srcImage_Sub); (2) //定义与初始化相关变量 int bins=256; int hist_size[]={bins}; float range[]={0,256}; const float* ranges[]={range}; MatND redHist,redHist_Sub; int channels_r[]={0};
(2)HSV颜色模型
每一种颜色都是由色相(Hue,简H),饱和度 (Saturation,简S)和色明度(Value,简V)所表示 的。HSV模型对应于圆柱坐标系中的一个圆锥形子集, 圆锥的顶面对应于V=1。它包含RGB模型中的R=1,G=1, B=1 三个面,所代表的颜色较亮。色彩H由绕V轴的旋 转角给定。红色对应于 角度0° ,绿色对应于角度 120°,蓝色对应于角度240°。在HSV颜色模型中,每 一种颜色和它的补色相差180°。饱和度S取值从0到1, 所以圆锥顶面的半径为1。
颜色相似度量
XXX
一.颜色模型
颜色模型就是指某个三维颜色空间中的一个可见 光子集,它包含某个颜色域的所有颜色。
在大多数的彩色图形显示设备一般都是使用红、 绿、蓝三原色,我们的真实感图形学中的主要的颜色 模型也是RGB模型,但是红、绿、蓝颜色模型用起来 不太方便,它与直观的颜色概念如色调、饱和度和亮 度Biblioteka Baidu没有直接的联系。颜色模型主要有HSV、RGB、 HSI、CHL、LAB、CMY等。它们在不同的行业各有所 指,但在计算机技术方面运用最为广泛。
(6) //显示红色分量直方图
imshow("Red",histImage_Red);
imshow("RedSub",histImage_Red_Sub); (7) //矩阵归一化
normalize(redHist,redHist,0,1,NORM_MINMAX,1,Mat());
for(int i=0;i<bins;i++){ float binValue_red=redHist_Sub.at<float>(i); int
intensity_red=cvRound(binValue_red*histHeight/maxValue_red); rectangle(histImage_Red_Sub,Point(i*scale,histHeight-1), Point((i+1)*scale-1,histHeight-intensity_red),Scalar(0,0,255)); }
(1)RGB颜色模型
RGB 颜色模型使用了颜色成分红(R)、绿(G)和蓝 (B)来定义所给颜色中红色、绿色和蓝色的光的量。在24 位图像中,每一颜色成分都由0到255之间的数值表示。在 位速率更高的图像中,如48位图像,值的范围更大。在加 颜色模型中,如RGB,颜色是通过透射光形成的。因此, RGB 被应用于监视器中,对红色、蓝色和绿色的光以各种 方式调和来产生更多颜色。当红色、蓝色和绿色的光以其 最大强度组合在一起时,眼睛看到的颜色就是白色。理论 上,颜色仍为红色、蓝色和绿色,但是在监视器上这些颜 色的像素彼此紧挨着,用眼睛无法区分出这三种颜色。当 每一种颜色成分的值为0时,即表示没有任何颜色的光,因 此,眼镜看到的颜色就为黑色。 RGB 是最常用的颜色模型, 因此,他可以存储和显示多种颜色。
C++: double compareHist(InputArray H1,InputArray H2,
int methiod)
C++: double compareHist(const SparseMat& H1,const SparseMat& H2,int method) 它们的前两个参数都是要比较的大小相同的直方图,第 三个变量是所选择的距离标准。可用如下的4种方法,比 较两个直方图:
(1)Minkowsky 距离
设a, b是两幅图像对应的特征向量,ai,bi分别代 表特征分量。Minkowsky 距离是基于Lp 范数定义的:
a) 如果 p=l,称为城区距离(city-block),也就是绝对值 距离:
b) 如果 p=2,称为欧式距离(Euclideandistance):
(10)
waitKey(0); return 0;
THANK YOU!!!
欧氏距离是最易于理解的一种距离计算方法,源 自欧氏空间中两点间的距离公式。 c) 如果 p →∞,称为切比雪夫距离(Chebyshevdistance):
(2)直方图相交法
直方图相交法(histogram intersection)是由 Swain 等人于 1991 年首次提出的,直方图相交法计算简单快 速并且能较好地抑制背景的影响。