一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

OpenCV-圖像處理(25、直方圖比較)

 印度阿三17 2019-01-29

直方圖比較方法-概述

對輸入的兩張圖像計算得到直方圖H1與H2,歸一化到相同的尺度空間
然后可以通過計算H1與H2的之間的距離得到兩個直方圖的相似程度進
而比較圖像本身的相似程度。Opencv提供的比較方法有四種:

  • Correlation 相關(guān)性比較 -(計算結(jié)果范圍為 -1到1 -1很不相關(guān),1完全一樣 )
  • Chi-Square 卡方比較 -(計算結(jié)果越接近0,兩個直方圖越相似)
  • Intersection 十字交叉性 -(計算公式為取兩個直方圖每個相同位置的值的最小值,然后求和,這個比較方式不是很好,不建議使用)
  • Bhattacharyya distance 巴氏距離 - (比較結(jié)果是很準的,計算結(jié)果范圍為 0-1 ,0表示兩個直方圖非常相關(guān),1最不相似)

1. 直方圖比較方法-相關(guān)性計算(CV_COMP_CORREL)

計算結(jié)果范圍為 -1到1 -1很不相關(guān),1完全一樣
在這里插入圖片描述
在這里插入圖片描述

2. 直方圖比較方法-卡方計算(CV_COMP_CHISQR)

計算結(jié)果越接近0,兩個直方圖越相似
在這里插入圖片描述
H1,H2分別表示兩個圖像的直方圖數(shù)據(jù)

3. 直方圖比較方法-十字計算(CV_COMP_INTERSECT)

計算公式為取兩個直方圖每個相同位置的值的最小值,然后求和,這個比較方式不是很好,不建議使用
在這里插入圖片描述
H1,H2分別表示兩個圖像的直方圖數(shù)據(jù)

4. 直方圖比較方法-巴氏距離計算(CV_COMP_BHATTACHARYYA )

比較結(jié)果是很準的,計算結(jié)果范圍為 0-1 ,0表示兩個直方圖非常相關(guān),1最不相似
在這里插入圖片描述
在這里插入圖片描述
H1,H2分別表示兩個圖像的直方圖數(shù)據(jù)

相關(guān)API(cv::compareHist)

  1. 首先把圖像從RGB色彩空間轉(zhuǎn)換到HSV色彩空間cvtColor
  2. 計算圖像的直方圖,然后歸一化到[0~1]之間calcHist和normalize;
  3. 使用上述四種比較方法之一進行比較compareHist

compareHist(
InputArray h1, // 直方圖數(shù)據(jù),下同
InputArray H2,
int method// 比較方法,上述四種方法之一
)

程序步驟:

  • 加載圖像數(shù)據(jù)
    在這里插入圖片描述
  • 從RGB空間轉(zhuǎn)換到HSV空間
    在這里插入圖片描述
  • 計算直方圖并歸一化
    在這里插入圖片描述
  • 比較直方圖,并返回值
    在這里插入圖片描述

程序代碼

#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) {
	// 1. 聲明儲存基準圖像和另外兩張對比圖像的矩陣( RGB 和 HSV )
	Mat base, test1, test2;
	Mat hsvbase, hsvtest1, hsvtest2;
	// 2. 裝載基準圖像(src_base) 和兩張測試圖像:
	base = imread("E:/Experiment/OpenCV/Pictures/lenanoise.jpg");
	if (!base.data) {
		printf("could not load image...\n");
		return -1;
	}
	test1 = imread("E:/Experiment/OpenCV/Pictures/lena.jpg");
	test2 = imread("E:/Experiment/OpenCV/Pictures/lena1.jpg");
	// 3. 將圖像轉(zhuǎn)化到HSV格式:
	cvtColor(base, hsvbase, CV_BGR2HSV);//轉(zhuǎn)換為 HSV 顏色空間,也是3通道
	cvtColor(test1, hsvtest1, CV_BGR2HSV);
	cvtColor(test2, hsvtest2, CV_BGR2HSV);

	// 4. 初始化計算直方圖需要的實參(bins, 范圍,通道 H 和 S ).
	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 o-th and 1-st channels     
	int channels[] = { 0, 1 };
		
	// 5. 創(chuàng)建儲存直方圖的 MatND 實例:
	//ND 表示二維或多維的Mat ,typedef Mat MatND; 源碼中MatND的聲明。 Mat表示二維的數(shù)組
	MatND hist_base;
	MatND hist_test1;
	MatND hist_test2;

	// 6. 計算基準圖像,兩張測試圖像
	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());
	

	// 7. 使用4種對比標準將基準圖像(hist_base)的直方圖與其余各直方圖進行對比:
	//比較的算法 CV_COMP_CORREL CHISQR INTERSECT BHATTACHARYYA
	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 tes1test2 = compareHist(hist_test1, hist_test2, CV_COMP_CORREL);
	printf("test1 compare with test2 correlation value :%f", tes1test2);

	Mat test12;
	test2.copyTo(test12);
	// 8. 將比較的結(jié)果轉(zhuǎn)換為string,然后以文字的方式繪制到圖形上
	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(test12, convertToString(tes1test2), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);
	
	namedWindow("base", CV_WINDOW_AUTOSIZE);
	namedWindow("test1", CV_WINDOW_AUTOSIZE);
	namedWindow("test2", CV_WINDOW_AUTOSIZE);

	imshow("base", base);
	imshow("test1", test1);
	imshow("test2", test2);
	imshow("test12", test12);

	waitKey(0);
	return 0;
}

string convertToString(double d) {
	ostringstream os;
	if (os << d)  // << 運算符重載了,將double轉(zhuǎn)成string
		return os.str();
	return "invalid conversion";
}

運行截圖

在這里插入圖片描述
在這里插入圖片描述

參考博客:

  1. https://blog.csdn.net/huanghuangjin/article/details/81175339
  2. https://blog.csdn.net/LYKymy/article/details/83210430
來源:http://www./content-4-105551.html

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    蜜桃av人妻精品一区二区三区| 亚洲综合精品天堂夜夜| 欧美一区二区三区五月婷婷| 欧美国产极品一区二区| 日本加勒比系列在线播放| 精品亚洲香蕉久久综合网| 欧美亚洲国产日韩一区二区| 国产亚洲精品久久久优势| 老司机精品视频在线免费| 91超频在线视频中文字幕| 欧美日韩亚洲国产精品| 欧美亚洲另类久久久精品| 99精品人妻少妇一区二区人人妻| 99热九九热这里只有精品| 日韩欧美黄色一级视频| 欧美日韩免费黄片观看| 中文字幕禁断介一区二区| 国产精品日本女优在线观看| 婷婷色香五月综合激激情| 久久中文字人妻熟女小妇| 又黄又色又爽又免费的视频| 日本女优一区二区三区免费| 国产精品偷拍视频一区| 91亚洲国产日韩在线| 亚洲男女性生活免费视频| 偷自拍亚洲欧美一区二页| 亚洲精品福利入口在线| 99久只有精品免费视频播放| 一区二区三区日本高清| 草草夜色精品国产噜噜竹菊| 欧美国产极品一区二区| 亚洲国产成人一区二区在线观看| 99一级特黄色性生活片| 日韩国产传媒在线精品| 年轻女房东2中文字幕| 日韩无套内射免费精品| 国产精品一区二区日韩新区| 日本三区不卡高清更新二区| 久久精品亚洲精品一区| 国产精品一区二区传媒蜜臀| 丰满人妻熟妇乱又乱精品古代|