图像检索:一维直方图+EMD距离

EMD距离详细介绍已经在在这里已经给出。

思路:我们把一张图像的归一化的一维直方图作为signature的权重值,把色相的值作为signature。也就是一般在比较两幅图像的EMD距离时,signature是一样,只是权重值不一样。

通过以下程序,就可以得到一幅图像的signature:

#include<iostream>
using namespace std;

#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
using namespace cv;

int main(int argc,char* argv[])
{
	Mat image,imageHsv,hist,histRow,normalHist;
	image = imread(argv[1],1);
	if(argc !=2 || !image.data)
	{
		cerr << " No image!" <<endl;
	}
	//颜色空间的转换
	cvtColor(image,imageHsv,CV_BGR2HSV);

	//一维直方图
	int hbins = 90;
	int histSize[] = {hbins};
	float hranges[] = {0.0,180.0};
	const float* ranges[] = {hranges};

	int channels[] ={0};
	calcHist(&imageHsv,1,channels,Mat(),hist,1,histSize,ranges,true,false);
	normalize(hist,normalHist,1,0,CV_L1,CV_32F);

	Mat signature(hbins,2,CV_32FC1);
	normalHist.copyTo(signature.col(0));
	//我们把bin的均值作为signature中的特征,放在signature的第二列
	float step = 180.0/hbins;
	for( int r=0;r < hbins; r++)
		signature.at<float>(r,1) =(step*r+(step*(r+1)-1))/2.0;
	return 0;
}

图像检索:一维直方图+EMD距离,布布扣,bubuko.com

时间: 2024-10-13 10:39:04

图像检索:一维直方图+EMD距离的相关文章

图像检索:二维直方图+EMD距离

#include<iostream> #include<fstream> #include<map> #include<string> using namespace std; #include<opencv2\core\core.hpp> #include<opencv2\highgui\highgui.hpp> #include<opencv2\imgproc\imgproc.hpp> using namespace

【练习7.4】使用直方图陆地移动距离EMD区分不同光线条件下的图片cvCalcEMD2

提纲 题目要求 程序代码 结果图片 要言妙道 题目要求: 设计一个直方图,可以判断给定的图像是在哪种光线条件下被捕捉到的. 程序代码: 1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点. 2 // 3 //D:\\Work\\Work_Programming\\Source\\Image\\lena.jpg 4 5 #include "stdafx.h" 6 #include <cv.h> 7 #include <highg

【练习7.3】从直方图创建signature、计算两个直方图的EMD距离

提纲 题目要求 程序代码 结果图片 要言妙道 题目要求: 收集三种光照条件下的手的直方图,计算它们之间的EMD距离 程序代码: 1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点. 2 // 3 //D:\\Work\\Work_Programming\\Source\\Image\\lena.jpg 4 5 #include "stdafx.h" 6 #include <cv.h> 7 #include <highgui.h

图像检索之EMD距离(Earth Mover&#39;s Distance)

在理解EMD距离模型时,需要先对<运筹学>中运输问题,做一下了解.下面给出几个运输问题的小例子,作为补充知识: 那么,对于上述问题我们发现是一个 产量=销量=500 ,即产销平衡的问题,可以提出这样的数学模型: 假设运到物品的个数为,用代表运到单个物品的运费(在上述表格中都有),用表示产地的产量,表示销地的销量,则总运费为,使总运费最小的数学模型为: 还有令两种可能就是 产量>销量 或者 产量<销量,这里不做模型的讨论,上面三种运输问题都可以用单纯形法进行求解.因为只有当"

图像检索:一维直方图+欧几里得距离+flann+KNN

在F盘生成了一个文件名称为"文件夹"的文本文件. 第一步:批处理提取图像的一维颜色直方图,并保存到.xml中的featureHists 第一个參数:图像的路径 第二个參数:保存的.xml #include<iostream> #include<fstream> #include<string> using namespace std; #include<opencv2\imgproc\imgproc.hpp> #include<op

直方图 陆地移动距离 cvCalcEMD2 基于HSV的HS

程序: HSize=30,SSize=32:比例为2.89 HSize=20,SSize=20:比例为2.88 HSize=50,SSize=50:比例为2.87 代码: #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> CvHistogram* histogram(IplImage* src,int HSize,int SSize

第11集 一维直方图

1.把彩***像分成3个图像(cvSplit) 2.创建直方图并且分配内存(CvHistogram* hist=cvCreateHist) 3.读取图像的直方图,把数据存放在直方图结构体中(cvCapcHist) 4.读取直方图结构体中每个值的点数(cvQueryHistValue_1D) 5.描点,画图(cvPoint,cvFillConvexPoly) 直方图的其它操作: 1.cvNorMalizeHist(CvHistogram* hist,double factor) 归一化直方图,fa

图像检索中相似度度量公式:各种距离(1)

基于内容的图像检索(Content-Based Image Retrieval)是指通过对图像视觉特征和上下文联系的分析,提取出图像的内容特征作为图像索引来得到所需的图像. 相似度度量方法 在基于内容的图像检索中需要通过计算查询和候选图像之间在视觉特征上的相似度匹配.因此需要定义一个合适的视觉特征相似度度量方法对图像检索的效果无疑是一个很大的影响.提取的视觉特征大都可以表示成向量的形式,事实上,常用的相似度度量方法都是向量空间模型,也就是把视觉特征看作是向量空间中的点,通过计算两个点之间的接近程

利用一维颜色直方图做图像检索

在F盘生成了一个文件名为"目录"的文本文件. 第一步:批处理提取图像的一维颜色直方图 #include<iostream> #include<fstream> #include<string> using namespace std; #include<opencv2\imgproc\imgproc.hpp> #include<opencv2\core\core.hpp> #include<opencv2\highgui