類似画像検索 - LBPヒストグラム

LBP(Local Binary Pattern)については、Local Binary Patterns with Python & OpenCV - PyImageSearchLocal Binary Patternとその周辺(PDF)などを参照。
Pythonではscikit-imageに実装がある。
その他前回と同様。

import numpy as np
import cv2
import glob
from skimage import feature

def lbp_hist(img):
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    lbp = feature.local_binary_pattern(img, 8, 1)
    hist = cv2.calcHist([np.float32(lbp)], [0], None, [256], [0, 256])
    hist = cv2.normalize(hist, None, 0.0, 1.0, cv2.NORM_MINMAX)

    return hist

# cv2.HISTCMP_CORREL cv2.HISTCMP_CHISQR
# cv2.HISTCMP_INTERSECT cv2.HISTCMP_BHATTACHARYYA
METHOD = cv2.HISTCMP_CORREL

q_img = cv2.imread("101_ObjectCategories/airplanes/image_0001.jpg")
q_hist = lbp_hist(q_img)

for file in sorted(glob.glob("101_ObjectCategories/*/*.jpg")):    
    t_img = cv2.imread(file)
    t_hist = lbp_hist(t_img)
    res = cv2.compareHist(q_hist, t_hist, METHOD)
    print(file, "%f" %res)

上位10件。

画像 距離(相関)
airplanes/image_0001.jpg 1.000000
airplanes/image_0308.jpg 0.997389
airplanes/image_0767.jpg 0.996352
airplanes/image_0530.jpg 0.996154
airplanes/image_0115.jpg 0.996093
airplanes/image_0538.jpg 0.996070
airplanes/image_0316.jpg 0.995516
airplanes/image_0474.jpg 0.995418
airplanes/image_0531.jpg 0.994930
airplanes/image_0033.jpg 0.994806

左上がクエリー。
https://kakasi.skr.jp/images/lbp-hist.jpg