精华内容
下载资源
问答
  • 直方图比较过程

    千次阅读 2018-08-25 14:36:20
    直方图比较过程 对于代码的实现和公式网上百度都有,这里就不再造轮子了,本文重点是思想和应用的过程.主要式在Opencv中实现的过程. 1 概述 通过直方图可以比较两张图片的相识度,可以大概的判断两张图片是否相同....

    直方图比较过程

    对于代码的实现和公式网上百度都有,这里就不再造轮子了,本文重点是思想和应用的过程.主要式在Opencv中实现的过程.

    1 概述

    通过直方图可以比较两张图片的相识度,可以大概的判断两张图片是否相同.

    对输入的两张图像计算得到直方图H1和H2,归一化到相同的尺度空间,然后通过计算H1和H2的之间的距离得到两个直返图的相似程度进而比较图像本身的相似程度.OpenCV提供的比较方法有四种:

    • Correlation 相关比较
    • Chi-Square 卡方比较
    • Intersection 十字交叉性
    • Bhattacvharyya distance 巴氏距离

    对于公式网上百度.

    2 过程

    1. 首选把图像从RGB色彩空间转换到HSV色彩空间cvColor(为什么?因为直方图都是基于亮度和灰度级别,二HSV色彩空间对色彩亮度表示比较好的方式,转换成HSV空间以后然后只取HS通道)
    2. 计算图像的直方图,然后归一化到[0~1]之间calcHist和normalize;
    3. 使用上述四种比较方法之一进行比较compareHist.

    3 应用

    对于直方图比较可以应在图片相识度的对比,对于一些简单的识别是可以实现的,比如颜色识别,可以通过比较两张图片的相似度来判断颜色.

    展开全文
  • 26-直方图比较

    2020-02-14 11:35:04
    文章目录直方图比较直方图比较方法 直方图比较 1、直方图比较方法; 2、相关API; 3、代码演示; 直方图比较方法 1、直方图比较方法用来衡量两张图片之间的相似程度; ...

    直方图比较

    1、直方图比较方法;
    2、相关API;
    3、代码演示;

    直方图比较方法

    1、直方图比较方法用来衡量两张图片之间的相似程度;
    2、比较方法:将输入的两张图片归一化到相同的尺度空间才能进行比较,先进行归一化,再计算H1与H2之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度 ,OpenCV提供了相关性比较的4种方法(数学知识):①相关性比较;②卡方比较;③十字交叉性;④巴氏距离;
    在这里插入图片描述
    在这里插入图片描述

    相关性比较(CV_COMP_CORREL)

    1、计算公式如下:
    在这里插入图片描述
    注:BIN表示像素划分的梯度等级的个数
    2、如果H1 == H2, 则 d ( H 1 , H 2 ) d(H_1,H_2) d(H1,H2) = 1,表示两幅图像具有很强的相关性;计算结果 d ( H 1 , H 2 ) d(H_1,H_2) d(H1,H2)位于(-1,+1)之间;

    卡方计算(CV_COMP_CHISQR)

    1、计算公式:
    在这里插入图片描述

    2、如果 H 1 H_1 H1 == H 2 H_2 H2,d( H 1 H_1 H1, H 2 H_2 H2) =0, 此时表示两幅图像具有最强的相关性;

    十字计算(CV_COMP_INTERSECT)

    1、计算公式:
    在这里插入图片描述

    2、度量不好用;

    巴氏距离计算(CV_COMP_BHATTACHARYYA)

    1、计算公式:
    在这里插入图片描述
    2、d( H 1 H_1 H1, H 2 H_2 H2) 位于(0,1)之间;如果d( H 1 H_1 H1, H 2 H_2 H2) = 0,表示两幅图像相关性最强(H1==H2);如果d( H 1 H_1 H1, H 2 H_2 H2) = 1,表示两幅图像没有相关性(最不相似);

    直方图计算

    1、直方图比较方法建立在已经计算出直方图的基础上,OpenCV支持多通道图像的直方图计算,计算步骤如下:
    ①先将图像从RGB彩色空间转换到HSV色彩空间(取H,S分量);
    ②计算图像直方图,然后归一化到[0~1]之间;
    ③使用直方图比较方法进行比较;
    在这里插入图片描述

    直方图比较API

    1、API : cv::compareHist(); 计算之后得到一个double返回值,根据返回值判断图像相关性;

    在这里插入图片描述

    Code

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    using namespace cv;
    
    string convertToString(double d);
    
    int main(int argc, char** argv)
    {
    	Mat base, test1, test2;
    	Mat hsvbase, hsvtest1, hsvtest2;
    	//读进原图    彩色图像和灰度图像默认不同
    	base = imread("C:\\Users\\hello\\Desktop\\lena.tiff",IMREAD_ANYDEPTH | IMREAD_ANYCOLOR);
    	test1 = imread("C:\\Users\\hello\\Desktop\\lena.bmp", IMREAD_ANYDEPTH | IMREAD_ANYCOLOR);
    	test2 = imread("C:\\Users\\hello\\Desktop\\lena.jpg", IMREAD_ANYDEPTH | IMREAD_ANYCOLOR);
    	if (base.empty() || test1.empty() || test2.empty())
    	{
    		cout << "could not load the image..." << endl;
    		return -1;
    	}
    	//色彩空间转换
    	cvtColor(base, hsvbase, CV_BGR2HSV);
    	cvtColor(test1, hsvtest1, CV_GRAY2BGR); //原图像是灰度图像
    	cvtColor(hsvtest1, hsvtest1, CV_BGR2HSV);
    	cvtColor(test2, hsvtest2, CV_BGR2HSV);
    
    	//定义一些数据给calcHist()使用
    	//设置灰度等级
    	int h_bins = 50; int s_bins = 60;
    	int histSize[] = { h_bins,s_bins };
    	//hue varies from 0 to 179 ; saturation饱和度 from 0 to 255
    	float h_ranges[] = { 0,180 };
    	float s_ranges[] = { 0,256 };
    	const float* ranges[] = { h_ranges,s_ranges };
    	//use the 0-th and 1-th channnels
    	int channels[] = { 0 ,1 };
    
    	MatND hist_base;    //ND表示多维
    	MatND hist_test1;
    	MatND hist_test2;
    	//计算直方图
    	calcHist(&hsvbase, 1, channels, Mat(), hist_base, 2, histSize, ranges, true, false);
    	normalize(hist_base, hist_base, 0, 1, NORM_MINMAX, -1,Mat());   //归一化到0-1之间
    
    	calcHist(&hsvtest1, 1, channels, Mat(), hist_test1, 2, histSize, ranges, true, false);
    	normalize(hist_test1, hist_test1, 0, 1, NORM_MINMAX, -1, Mat());
    
    	calcHist(&hsvtest2, 1, channels, Mat(), hist_test2, 2, histSize, ranges, true, false);
    	normalize(hist_test2, hist_test2, 0, 1, NORM_MINMAX, -1, Mat());
    
    	//直方图比较
    	double basebase = compareHist(hist_base, hist_base, CV_COMP_CORREL);
    	double basetest1 = compareHist(hist_base, hist_test1, CV_COMP_CORREL);
    	double basetest2 = compareHist(hist_base, hist_test2, CV_COMP_CORREL);
    	double test1test2 = compareHist(hist_test1, hist_test2, CV_COMP_CORREL);
    
    	printf("test1 compare with test2 correlation value : %f", test1test2);
    	//绘制文本     fontScale : 字体缩放
    	putText(base, convertToString(basebase), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);
    	putText(test1, convertToString(basetest1), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);
    	putText(test2, convertToString(basetest2), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);
    	putText(test2, convertToString(test1test2), Point(50, 150), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);
    
    	namedWindow("base", WINDOW_AUTOSIZE);
    	namedWindow("test1", WINDOW_AUTOSIZE);
    	namedWindow("test2", WINDOW_AUTOSIZE);
    
    	imshow("base", base);
    	imshow("test1", test1);
    	imshow("test2", test2);
    
    	waitKey(0);
    	return 0;
    
    }
    
    
    string convertToString(double d)
    {
    	ostringstream os;
    	if (os << d)
    		return os.str();
    	return "invalid convertion";
    }
    

    效果

    1、CV_COMP_CORREL: (接近1代表相似度高)
    在这里插入图片描述

    2、CV_COMP_BHATTACHARYYA: 接近0代表相似度高

    在这里插入图片描述
    3、CV_COMP_CHISQR: 相似度越高越接近0 ,越低值越大

    在这里插入图片描述
    4、CV_COMP_INTERSECT:趋近于0,相似度低;

    在这里插入图片描述

    展开全文
  • 通过直方图对两幅图像进行比较,就是就是直方图数据,比较两幅图像的直方图的相似,然后得出两图的相似系数。这是早期图像检测的常用技术手段,通常与图像特征值,边缘检测等方法结合,可以简单迅速分析出两幅图像...

    通过直方图对两幅图像进行比较,就是就是直方图数据,比较两幅图像的直方图的相似性,然后得出两图的相似系数。

    这是早期图像检测的常用技术手段,通常与图像特征值,边缘检测等方法结合,可以简单迅速分析出两幅图像是否相似。

    在MATLAB中,一般用函数 corr2()计算两图相关系数,要求图像为灰度图像,并且尺寸相同。而OpenCV就人性化很多了,采用compareHist()函数检测图像相似性,可以直接检测彩色图像,不要求图像尺寸,而且还提供了四种检测方法,然而有三种方法很坑,基本可以忽略。

    MATLAB比较两图相似性

    代码很简单,注意把彩色图像转为灰度图像即可

    img1 = imread('data/IMG1.bmp');img2 = imread('data/IMG2.bmp');gray1 = rgb2gray(img1);gray2 = rgb2gray(img2);subplot(1,2,1); imshow(gray1);subplot(1,2,2); imshow(gray2);r = corr2(gray1, gray2);fprintf('两图像相似性: %f', r)

    因为采用的是灰度图像,损失了两个像素通道,所以检测效果较差

    54acf02a025a573da678fd6ab8ead089.png

    灰度图

    61ab2c44cd8fb6016bdd800de7085f0d.png

    接近77%的相似性

    c++比较两图相似性

    c++操作稍显复杂,需要先进行彩色空间变换,变为hsv空间(一般而言直方图在hsv空间进行处理效果比较好),再获取直方图,然后进行归一化,才能进行检测。

    openc提供了四种检测方法:相关性:HISTCMP_CORREL, 卡方:HISTCMP_CHISQR, 交叉HISTCMP_INTERSECT, 巴氏距离:HISTCMP_BHATTACHARYYA

    #include #include using namespace cv;using namespace std;int main(int argc, char** argv) { Mat img1 = imread("data/images/IMG1.bmp"); Mat img2 = imread("data/images/IMG2.bmp"); imshow("image1
    展开全文
  • 1.1直方图概念 1.2直方图均衡化概念 图像直方图均衡化的实现: 直方图均衡化API: 直方图均衡化案例 void MyApi::histogramEqualize(Mat& image) { Mat gray_image,dst; cvtColor(image, gray_...

    目录

    1.概念

    1.1直方图概念

    ​ 1.2直方图均衡化概念

     2.直方图计算

    2.1直方图概念扩展

     2.2 画三通道直方图

     3.直方图的比较

    3.1Correlation 相关性比较

     3.2Chi-Square 卡方比较

     3.3intersection十字交叉性

    3.4Bhattacharyya distance 巴氏距离​

    3.5相关API

    3.6案例分析

    4.直方图的反向投影(back projection)

    4.1反向投影概述

    4.2反向投影步骤

    4.3实现步骤及相关API

    4.4 代码演示


    1.概念

    1.1直方图概念

     1.2直方图均衡化概念

     图像直方图均衡化的实现:

    直方图均衡化API:

     直方图均衡化案例

    void MyApi::histogramEqualize(Mat& image)
    {
    	Mat gray_image,dst;
    	cvtColor(image, gray_image, COLOR_BGR2GRAY);
    	imshow("灰度图", gray_image);
    	equalizeHist(gray_image, dst);
    	imshow("直方图均衡化后图像", dst);
    }

     上图分别是原图、灰度图、直方图均衡化后的图

     2.直方图计算

    2.1直方图概念扩展

     

     2.2 画三通道直方图

    void MyApi::histogram_cal(Mat& image)
    {
    	//1.把多通道的图像分离单通道
    	vector<Mat> bgr_planes;
    	split(image, bgr_planes);
    	//imshow("单个通道",bgr_planes[0]);//我们可以输出bgr中的b通道的图像
    
    	//2.计算直方图
    	int histSize = 256;
    	float range[] = { 0,256 };
    	const float* histRanges = {range};
    	Mat b_hist, g_hist, r_hist;
    	calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRanges, true, false);
    	calcHist(&bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRanges, true, false);
    	calcHist(&bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRanges, true, false);
    
    	//归一化:为了避免有些像素值的统计值很大,因此为了方便观察归一化到一定的范围内
    	int hist_h = 400;
    	int hist_w = 512;
    	int bin_w = hist_w / histSize;
    	Mat histImage(hist_w, hist_h, CV_8UC3, Scalar(0, 0, 0));
    	normalize(b_hist, b_hist, 0, hist_h, NORM_MINMAX, -1, Mat());
    	normalize(g_hist, g_hist, 0, hist_h, NORM_MINMAX, -1, Mat());
    	normalize(r_hist, r_hist, 0, hist_h, NORM_MINMAX, -1, Mat());
    
    	//绘制直方图
    	for (int i = 1; i < histSize; i++)
    	{
    		line(histImage, Point((i - 1) * bin_w, hist_h - cvRound(b_hist.at<float>(i - 1))),
    			Point((i)*bin_w, hist_h - cvRound(b_hist.at<float>(i))), Scalar(255, 0, 0), 2, LINE_AA);
    		line(histImage, Point((i - 1) * bin_w, hist_h - cvRound(g_hist.at<float>(i - 1))),
    			Point((i)*bin_w, hist_h - cvRound(g_hist.at<float>(i))), Scalar(0, 255, 0), 2, LINE_AA);
    		line(histImage, Point((i - 1) * bin_w, hist_h - cvRound(r_hist.at<float>(i - 1))),
    			Point((i)*bin_w, hist_h - cvRound(r_hist.at<float>(i))), Scalar(0, 0, 255), 2, LINE_AA);
    	}
    	imshow("彩色图像直方图", histImage);
    }

     3.直方图的比较

    对于输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间(图像大小要一致)然后可以通过计算H1与H2之间的距离得到两个直方图的相似程度,进而比较图像本身的相似程度。openCV提供了比较方法有四种:

    • Correlation 相关性比较
    • Chi-Square 卡方比较
    • intersection十字交叉性
    • Bhattacharyya distance 巴氏距离

    3.1Correlation 相关性比较

     3.2Chi-Square 卡方比较

     3.3intersection十字交叉性

    3.4Bhattacharyya distance 巴氏距离

    3.5相关API

    opencv4中compareHist中的method是改为如下:

    相关性比较(HISTCMP_CORREL)值越接近1,相关性越高;越接近0,相关性越低;
    卡方比较(HISTCMP_CHISQR)值越小越接近,为0时相似度最高;
    巴氏距离(HISTCMP_BHATTACHARYYA),完全匹配为 0,完全不匹配为1

    3.6案例分析

    源文件函数如下:

    string convertToString(double d)//double类型转为string类型
    {
    	ostringstream os;
    	if (os << d)
    		return os.str();
    	return "invalid convertsion";
    }
    
    void MyApi::histogram_comp(Mat& image, Mat& test1, Mat& test2)
    {
    	//图像颜色空间转到HSV空间
    	cvtColor(image, image, COLOR_BGR2HSV);
    	cvtColor(test1, test1, COLOR_BGR2HSV);
    	cvtColor(test2, test2, COLOR_BGR2HSV);
    
    	//设置两个灰度等级
    	int h_bins = 50;
    	int s_bins = 60;
    	int histSize[] = {h_bins,s_bins};
    
    	float h_ranges[] = { 0, 180 };
    	float s_ranges[] = { 0, 256 };
    	const float* ranges[] = {h_ranges,s_ranges};
    	int channels[] = { 0,1 };
    
    	MatND hist_image;
    	MatND hist_test1;
    	MatND hist_test2;
    
    	//计算直方图
    	calcHist(&image, 1, channels, Mat(), hist_image, 2, histSize, ranges, true, false);
    	normalize(hist_image, hist_image, 0, 1, NORM_MINMAX, -1, Mat());
    
    	calcHist(&test1, 1, channels, Mat(), hist_test1, 2, histSize, ranges, true, false);
    	normalize(hist_test1, hist_test1, 0, 1, NORM_MINMAX, -1, Mat());
    
    	calcHist(&test2, 1, channels, Mat(), hist_test2, 2, histSize, ranges, true, false);
    	normalize(hist_test2, hist_test2, 0, 1, NORM_MINMAX, -1, Mat());
    
    	//相互比较
    	double imageimgae = compareHist(hist_image, hist_image, HISTCMP_CORREL);
    	double imagetest1 = compareHist(hist_image, hist_test1, HISTCMP_CORREL);
    	double imagetest2 = compareHist(hist_image, hist_test2, HISTCMP_CORREL);
    	double test1test2 = compareHist(hist_test1, hist_test2, HISTCMP_CORREL);
    	printf("test1与test2比较的相关性指标为:%f", test1test2);
    
    	putText(image, convertToString(imageimgae), Point(50, 50), FONT_HERSHEY_COMPLEX,
    		1, Scalar(0, 0, 255), 2, LINE_AA);
    	putText(test1, convertToString(imagetest1), Point(50, 50), FONT_HERSHEY_COMPLEX,
    		1, Scalar(0, 0, 255), 2, LINE_AA);
    	putText(test2, convertToString(imagetest2), Point(50, 50), FONT_HERSHEY_COMPLEX,
    		1, Scalar(0, 0, 255), 2, LINE_AA);
    
    	namedWindow("image", WINDOW_AUTOSIZE);
    	namedWindow("test1", WINDOW_AUTOSIZE);
    	namedWindow("test2", WINDOW_AUTOSIZE);
    
    	imshow("image", image);
    	imshow("test1", test1);
    	imshow("test2", test2);
    
    }

     测试函数如下:

    #include<opencv2/opencv.hpp>
    #include<iostream>
    #include"myApi.h"
    using namespace cv;
    using namespace std;
    
    int main(int argc, char** argv) {
    	Mat src = imread("F:\\testImage\\test.png");
    	if (src.empty()) {
    		printf("could not load image...");
    		return -1;
    	}
    	//如果图像过于大,不能完全显示整张图像可以使用namedWindow()可以实现对图像的自由缩放
    	//namedWindow("input_window", WINDOW_FREERATIO);
    	//imshow("input_window", src);
    	Mat test1 = imread("F:\\testImage\\test1.png");
    	Mat test2 = imread("F:\\testImage\\test2.png");
    
    	MyApi ma;
    	ma.histogram_comp(src,test1,test2);
    
    	waitKey(0);
    	return 0;
    }

     从左到右分别是image与test1比较的相似性、与test2比较的相似性、与image比较的相似性

    4.直方图的反向投影(back projection)

    4.1反向投影概述

    4.2反向投影步骤

    1. 建立直方图模型
    2. 计算待测图像直方图并映射到模型中
    3. 从模型反向计算生成图像

    4.3实现步骤及相关API

    1. 加载图片imread
    2. 将图像从RGB色彩空间转换到HSV色彩空间cvtcolor
    3. 计算直方图和归一化calcHist与normalize
    4. Mat与MatND其中Mat表示二维数据,MatND表示三维或者多维数据,此处均可以用Mat表示
    5. 计算反向投影图像calcBackProject

    4.4 代码演示

    mixChannels()参数说明:

    void mixChannels(
    const Mat* src, //输入数组或向量矩阵,所有矩阵的大小和深度必须相同。
    size_t nsrcs, //矩阵的数量
    Mat* dst, //输出数组或矩阵向量,大小和
    深度必须与src[0]相同
    size_t ndsts,//矩阵的数量
    const int* fromTo,//指定被复制通道与要复制到的位置组成的索引对
    size_t npairs //fromTo中索引对的数目
    );

    #define INPUT_TITLE "Input Image"
    #define OUTPUT_TITLE "Back Projection"
    #define HIST_TITLE "Histogram"
     
    #include<iostream>
    #include<opencv2\opencv.hpp>
     
    using namespace std;
    using namespace cv;
     
     
     
    /*———————————本代码所需变量定义及初始化——————————— */
    Mat src, hsv_src, hue, backProjectionImg;
    int bins = 12;
    int nchannels[] = { 0,0 };
     
    /*—————————————本代码所需函数声明————————————— */
    void Hist_And_BackProjection(int, void*);
     
     
    int main() {
    	/*—————————————全局变量的赋值————————————— */
    	//1.图像载入
    	src = imread("D:/hand.jpg");
    	if (!src.data)
    	{
    		cout << "ERROR : could not load image.\n";
    		return -1;
    	}
    	//2.将图像转化为HSV图像
    	cvtColor(src, hsv_src, CV_BGR2HSV);
     
    	//3.创建一个图像
    	hue.create(hsv_src.size(), hsv_src.depth());
     
    	//窗口命名
    	namedWindow(INPUT_TITLE, CV_WINDOW_AUTOSIZE);
    	namedWindow(OUTPUT_TITLE, CV_WINDOW_AUTOSIZE);
    	namedWindow(HIST_TITLE, CV_WINDOW_AUTOSIZE);
     
    	//从输入图像中拷贝某通道到输出图像中特定的通道
    	mixChannels(&hsv_src, 1, &hue, 1, nchannels, 1);
     
    	//动态调整直方图的 bins ,并做反向投影
    	createTrackbar("Histogram Bins", INPUT_TITLE, &bins, 180, Hist_And_BackProjection);
    	Hist_And_BackProjection(0, 0);
     
    	imshow(INPUT_TITLE, src);
     
    	waitKey(0);
    	return 0;
    }
     
     
    /*—————————————本代码所需函数实现————————————— */
    void Hist_And_BackProjection(int, void*) {
     
    	//局部变量
    	float range[] = { 0,180 };
    	const float *histRanges = { range };
    	int hist_h = 400;
    	int hist_w = 400;
    	int bin_w = hist_w / bins;
    	Mat h_hist;
    	Mat histImage(hist_w, hist_h, CV_8UC3, Scalar(0, 0, 0));
     
    	//直方图计算及归一化处理
    	calcHist(&hue, 1, 0, Mat(), h_hist, 1, &bins, &histRanges, true, false);
    	normalize(h_hist, h_hist, 0, 255, NORM_MINMAX, -1, Mat());
     
    	//直方图反向投影
    	calcBackProject(&hue, 1, 0, h_hist, backProjectionImg, &histRanges, 1, true);
     
    	//画直方图分部图
    	for (int i = 0; i < bins; i++)
    	{
    		/*rectangle(histImage,
    			Point((i - 1)*bin_w, (hist_h - cvRound(h_hist.at<float>(i - 1)*(400 / 255)))),
    			Point(i*bin_w, (hist_h - cvRound(h_hist.at<float>(i)*(400 / 255)))),
    			Scalar(0, 0, 255),
    			-1);*/
     
    		rectangle(histImage,
    			Point((i - 1)*bin_w, (hist_h - cvRound(h_hist.at<float>(i - 1)*(400 / 255)))),
    			Point(i*bin_w, hist_h),
    			Scalar(0, 0, 255),
    			-1);
    	}
     
    	imshow(OUTPUT_TITLE, backProjectionImg);
    	imshow(HIST_TITLE, histImage);
     
    }

    展开全文
  • 【OpenCV 4】图像直方图比较

    千次阅读 2019-06-26 23:36:29
    OpenCV 4.1.0 图像直方图比较(C++代码演示)。 编程环境:OpenCV 4.1.0 + Visual Studio 2017
  • 26.直方图比较

    2020-04-10 01:03:00
    直方图比较方法 相关API 代码演示 2.直方图比较方法——概述 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进而比较图像本身的...
  • 直方图比较(图片相关性比较)

    千次阅读 2019-11-06 09:44:29
    直方图比较方法 对输入的两张图像计算得到直方图H1和H2,归一化得到相同的尺度空间然后可以通过计算H1和H2之间的距离得到两个直方图相似程度进而比较图像本身的相似程度。opencv提供的比较方法有四种: ...
  • 图像直方图比较,就是计算两幅图像的直方图数据,比较两组数据的相似,从而得到两幅图像之间的相似程度,直方图比较在早期的CBIR中是应用很常见的技术手段,通常会结合边缘处理、词袋等技术一起使用。 相关API: ...
  • 直方图比较 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间 然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进 而比较图像本身的相似程度。Opencv提供的比较方法有四种: Correlation ...
  • 第26课 直方图比较

    2020-02-16 22:07:16
    相关API3.1直方图比较compareHist()4. 例程 1. 直方图比较方法 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间;然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进而比较图像本身的...
  • OpenCV-图像处理(25、直方图比较

    万次阅读 多人点赞 2019-01-17 17:13:40
    直方图比较方法-概述 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间 然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进 而比较图像本身的相似程度。Opencv提供的比较方法有四种: ...
  • 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间 然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进 而比较图像本身的相似程度。 Opencv提供的比较方法有四种: Correlation 相关性...
  • OpenCV——直方图比较

    2021-06-10 16:52:23
    例如通过插值对图像进行放缩后图像的直方图虽然不会与之前完全一致,但是两者一定具有很高的相似,因而可以通过比较两张图像的直方图分布相似对图像进行初步的筛选与识别。 H1:第一张图像直方图。 H2:第二张...
  • 1,直方图均衡化 (Histogram Equalization) 假如图像的灰度分布不均匀,其灰度分布集中在较窄的范围内,使图像的细节不够清晰,对比度较低。直方图均衡化,对图像进行非线性拉伸,重新分配图像的灰度值,使一定...
  • 直方图比较: 图1: 图2: 直方图比较结果: 巴氏距离为:0.09168121741644489, 相关度为:0.9793654472068899, 卡方距离为:26024.95389270589 代码部分: import numpy as np import cv2 as cv from matplotlib ...
  • 一、直方图比较 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度,进而比较图像本身的相似程度。 Opencv提供的比较方法有四种 ...
  • opencv025-直方图比较

    2018-12-13 09:52:12
    直方图比较方法-概述 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间。然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度。Opencv提供的比较方法有四种: -...
  • opencv之直方图比较图像相似度

    万次阅读 2018-05-13 23:49:32
    对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度。Opencv提供的比较方法有四种:Correlation 相关性比较Chi-...
  • 1.前言 想了解直方图比较中每种比较的方式,比较的原理,希望大家能有一定的概率论基础,或者统计学基础,如果对这块理论不太了解,还想深入学习算法,建议先学习一下概率论或统计学。2.直方图比较概述对输入的两张...
  • opencv_26直方图比较

    2020-05-21 19:22:36
    对输入的两张图像计算得到直方图H1,H2,归一化到相同的尺度空间然后可以通过计算H1和H2之间的距离得到两个直方图的相似程度,今儿比较两幅图像的相似程度。 opencv 提供四种方法 Correlation 相关性比较 Chi-Square ...
  • OpenCV24---直方图比较

    2020-03-28 00:30:18
    二十四、直方图比较 利用两张图片的直方图判断两张图片的相似,也可以判断两个图片是否为同一图片。 1、直方图比较方法 对输入的两张图象计算得到直方图H1与H2,归一化到相同的尺度空间然后可以通过计算H1和H2之间...
  • OpenCV学习22--直方图比较

    千次阅读 2018-03-20 10:40:00
    对输入的两张图像计算得到直方图H1与H2,归一化到相同的...直方图比较方法 Correlation相关性比较 Chi-Squra卡方比较 Intersection十字交叉 Bhattacharyya distance巴氏距离 直方图比较方法–相关性计算(CV...
  • 【OpenCV】直方图比较 直方图比较方法-概述 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间 然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进 而比较图像本身的相似程度。Opencv提供...
  • 直方图比较 (compareHist 2组数据去对比)1.1 相关性比较 HISTCMP_CORREL (多少的时候是最好的 1) N bins 直方图的等级1.2 卡方比较 HISTCMP_CHISQR (多少的时候是最好的 0)1.3 十字交叉 HISTCMP_INTERSECT1.4...
  • 图像直方图比较,就是计算两幅图像的直方图数据,比较两组数据的相似,从而得到两幅图像之间的相似程度,直方图比较在早期的CBIR中是应用很常见的技术手段,通常会结合边缘处理、词袋等技术一起使用。 OpenCV...
  • 基于直方图比较的图像相似度计算

    万次阅读 2013-12-26 22:19:51
    在查找资料过程中,首先看到的图像相似度计算方法就是直方图比较。该算法计算过程很容易理解,首先对于两幅图像分别计算其直方图,然后根据某种衡量标准进行比较,比较结果即为两幅图像的相似度。贴心的OpenCV已提供...
  • 比较两个图片的灰度直方图,并计算直方图重合度 核心函数:cv2.calcHist() 计算一系列数组的直方图,图像的灰度直方图可以统计出图像中的每一个像素的灰度值在整个图像中出现的次数。 定义cv2.calcHist(images, ...
  • 本文主要介绍了灰度直方图相关的处理,包括以下几个方面的内容:利用OpenCV计算图像的灰度直方图,并绘制直方图曲线直方图均衡化的原理及实现直方图规定化(匹配)的原理及实现图像的灰度直方图一幅图像由不同灰度值的...
  • 直方图比较方法 python中其他绘制2D直方图方法 显示直方图 参考资料: RGB/HSI颜色空间解读 一般用的都是RGB图像。但是由于HSI颜色空间更符合人体感知,因此很多工作都需要先将RGB转为HSI。在冈萨瓦斯的《数字...
  • 例如通过插值对图像进行放缩后图像的直方图虽然不会与之前完全一致,但是两者一定具有很高的相似,因而可以通过比较两张图像的直方图分布相似对图像进行初步的筛选与识别。 OpenCV 4中提供了用于比较两个图像...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,840
精华内容 11,536
关键字:

关联性直方图比较