OpenCV圖像處理之直方圖比較方法詳解_第1頁
OpenCV圖像處理之直方圖比較方法詳解_第2頁
OpenCV圖像處理之直方圖比較方法詳解_第3頁
OpenCV圖像處理之直方圖比較方法詳解_第4頁
OpenCV圖像處理之直方圖比較方法詳解_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第OpenCV圖像處理之直方圖比較方法詳解目錄一、直方圖比較二、圖像直方圖比較方法三、代碼實現(xiàn)四、圖像處理效果

一、直方圖比較

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

Correlation相關性比較

Chi-Square卡方比較

Intersection十字交叉性

Bhattacharyyadistance巴氏距離。

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

其中:

其中N是直方圖的BIN個數(shù),是均值。

(2)直方圖比較方法-相關性計算(CV_COMP_CORREL)

H1,H2分別表示兩個圖像的直方圖數(shù)據(jù)

(3)直方圖比較方法-十字交叉性計算(CV_COMP_INTERSECT)

H1,H2分別表示兩個圖像的直方圖數(shù)據(jù)

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

H1,H2分別表示兩個圖像的直方圖數(shù)據(jù),

二、圖像直方圖比較方法

加載原圖像

將圖像色彩空間由BGR三通道轉換為HSV空間(由于直方圖對亮度和灰度比較敏感,色彩空間轉換就是突出這兩個因素盡量去除其他因素)

計算直方圖進行歸一化處理,歸一化到0到1之間,調用calcHist和normalize

直方圖比較,使用上述四種方法之一,調用compareHist

直方圖比較API函數(shù)接口

API接口

doublecompareHist(InputArrayh1,InputArrayH2,intmethod)

參數(shù)說明:

第一個參數(shù)InputArray類型h1,直方圖數(shù)據(jù)

第二個參數(shù)InputArray類型h2,直方圖數(shù)據(jù)

第三個參數(shù)int類型method比較方法,上述四種方法之一

返回值:采用上述四中方法之一計算后的兩個直方圖相關系數(shù)

關于intmethod的取值:

enumHistCompMethods{

HISTCMP_CORREL=0,//相關性比較

HISTCMP_CHISQR=1,//卡方比較

HISTCMP_INTERSECT=2,//十字交叉性

HISTCMP_BHATTACHARYYA=3,//巴氏距離

HISTCMP_HELLINGER=HISTCMP_BHATTACHARYYA,

HISTCMP_CHISQR_ALT=4,//替代卡方:通常用于紋理比較。

HISTCMP_KL_DIV=5//KL散度

不同直方圖相關性比較方法的特點:

Correlation相關性比較(CV_COMP_CORREL)值越大,相關度越高,最大值為1,最小值為0,越接近1越相似

Chi-Square卡方比較(CV_COMP_CHISQR)值越小,相關度越高,最大值無上界,最小值0,越接近0越相似

Intersection十字交叉性(CV_COMP_INTERSECT)對于相似度比較,值越大,表明相關度越高,最大值無上界;完美匹配為1,完全不匹配為0;

Bhattacharyyadistance巴氏距離(CV_COMP_BHATTACHARYYA)值越小,相關度越高,最大值為1,最小值為0,越接近1越相似

三、代碼實現(xiàn)

#include"stdafx.h"

#includeopencv2/opencv.hpp

#includeiostream

#includemath.h

usingnamespacestd;

usingnamespacecv;

stringconvertToString(doubled);

intmain(intargc,char**argv){

Matbase,test1,test2;//RGB圖像

Mathsvbase,hsvtest1,hsvtest2;//HSV圖像

base=imread("F:/photo/zx.jpg");

if(!base.data){

printf("couldnotloadimage...\n");

return-1;

test1=imread("F:/photo/a.jpg");

test2=imread("F:/photo/c.jpg");

//轉化為HSV圖像

cvtColor(base,hsvbase,COLOR_BGR2HSV);

cvtColor(test1,hsvtest1,COLOR_BGR2HSV);

cvtColor(test2,hsvtest2,COLOR_BGR2HSV);

inth_bins=50;ints_bins=60;

inthistSize[]={h_bins,s_bins};

//huevariesfrom0to179,saturationfrom0to255

floath_ranges[]={0,180};

floats_ranges[]={0,256};

constfloat*ranges[]={h_ranges,s_ranges};

//Usetheo-thand1-stchannels

intchannels[]={0,1};

MatNDhist_base;

MatNDhist_test1;

MatNDhist_test2;

calcHist(hsvbase,1,channels,Mat(),hist_base,2,histSize,ranges,true,false);

normalize(hist_base,hist_base,0,1,NORM_MINMAX,-1,Mat());

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());

doublebasebase=compareHist(hist_base,hist_base,2);//zx

doublebasetest1=compareHist(hist_base,hist_test1,2);//zxanda

doublebasetest2=compareHist(hist_base,hist_test2,2);//zxandc

doubletes1test2=compareHist(hist_test1,hist_test2,2);//aandc

printf("test1comparewithtest2correlationvalue:%f",tes1test2);

Mattest12;

test2.copyTo(test12);

putText(base,convertToString(basebase),Point(50,50),FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255),2,LINE_AA);//zx

putText(test1,convertToString(basetest1),Point(50,50),FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255),2,LINE_AA);//zxanda

putText(test2,convertToString(basetest2),Point(50,50),FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255),2,LINE_AA);//zxandc

putText(test12,convertToString(tes1test2),Point(50,50),FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255),2,LINE_AA);//aandc

namedWindow("base",0);

resizeWindow("base",base.cols/2,base.rows/2);

namedWindow("test1",0);

resizeWindow("test1",test1.cols/2,test1.rows/2);

namedWindow("test2",0);

resizeWindow("test2",test2.cols/2,test2.rows/2);

imshow("base",base);

imshow("test1",test1);

imshow("test2",test2);

imshow("test12",test12);

waitKey(0);

return0;

stringconvertToString(doubled){

ostringstreamos;

if(osd)

returnos.str();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論