Opencvを利用して画像の類似度を比較する
1440 ワード
画像類似度の比較には多くの方法があり,これはRGBヒストグラムを例に挙げた.
各ピクチャに記述された特徴ベクトルのセットを生成させる規則を用いた.
Opencvのヒストグラム比較関数は,いくつかの比較規則があるが,ヒストグラムのデータ構造のみをサポートし,特徴ベクトルをヒストグラムのデータ構造に擬似合成し,その類似度比較関数を用いることができる.
具体的な数学計算方法に興味があるのはopencvの公式チュートリアルを見ることができ、ここではパーセンテージ形式の類似度パラメータを生成することを期待しているので、CV_を使用します.COMP_CORREL
以下はpythonで記述されたコードです
各ピクチャに記述された特徴ベクトルのセットを生成させる規則を用いた.
Opencvのヒストグラム比較関数は,いくつかの比較規則があるが,ヒストグラムのデータ構造のみをサポートし,特徴ベクトルをヒストグラムのデータ構造に擬似合成し,その類似度比較関数を用いることができる.
具体的な数学計算方法に興味があるのはopencvの公式チュートリアルを見ることができ、ここではパーセンテージ形式の類似度パラメータを生成することを期待しているので、CV_を使用します.COMP_CORREL
以下はpythonで記述されたコードです
import cv2.cv as cv
def createHist(img):
#cv.CvtColor(img,img,cv.CV_BGR2HSV)
b_plane = cv.CreateImage((img.width,img.height), 8, 1)
g_plane = cv.CreateImage((img.width,img.height), 8, 1)
r_plane = cv.CreateImage((img.width,img.height), 8, 1)
cv.Split(img,b_plane,g_plane,r_plane,None)
planes = [b_plane, g_plane, r_plane]
bins = 4
b_bins = bins
g_bins = bins
r_bins = bins
hist_size = [b_bins,g_bins,r_bins]
b_range = [0,255]
g_range = [0,255]
r_range = [0,255]
ranges = [b_range,g_range,r_range]
hist = cv.CreateHist(hist_size, cv.CV_HIST_ARRAY, ranges, 1)
cv.CalcHist([cv.GetImage(i) for i in planes], hist)
cv.NormalizeHist(hist,1)
return hist
def imgcompare(image1,image2):
img1 = cv.LoadImage(image1)
hist1 = createHist(img1)
img2 = cv.LoadImage(image2)
hist2 = createHist(img2)
return cv.CompareHist(hist1,hist2,cv.CV_COMP_CORREL)
print imgcompare("test_19037_19037_source.jpg","19015.jpg")
print imgcompare("test_19037_19037_source.jpg","19014.jpg")