一、先附上图像检索效果
二、基于内容的图像检索架构
图像检索的基本架构
三、数据集
图像库为Corel-1000数据集包含有非洲人、海滩、建筑物、大巴车、恐龙、大象、花朵、马、风景、美食10种不同的类别1000张图像。数据库示例:
四、图像特征提取
(一)颜色特征—颜色矩
颜色矩是基于数学的一种描述颜色分布的方法,通过计算不同颜色矩来描述图像中颜色的分布情况(具体颜色矩的理论基础自行学习)。颜色矩实现代码:
import cv2
import numpy as np
# 颜色矩
def colorMoments(img_path):
img = cv2.imread(img_path)
if img is None:
return
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
color_feature = []
h_mean = np.mean(h)
s_mean = np.mean(s)
v_mean = np.mean(v)
color_feature.extend([h_mean, s_mean, v_mean])
h_std = np.std(h)
s_std = np.std(s)
v_std = np.std(v)
color_feature.extend([h_std, s_std, v_std])
h_skewness = np.mean(abs(h - h.mean()) ** 3)
s_skewness = np.mean(abs(s - s.mean()) ** 3)
v_skewness = np.mean(abs(v - v.mean()) ** 3)
h_thirdMoment = h_skewness ** (1. / 3)
s_thirdMoment = s_skewness ** (1. / 3)
v_thirdMoment = v_skewness ** (1. / 3)
color_feature.extend([h_thirdMoment, s_thirdMoment, v_thirdMoment])
return color_feature
(二)形状特征—Hu不变矩
Hu不变矩其基本原理是利用灰度图像的各阶矩来分析图像的灰度分布特性。该方法具有旋转、缩放和平移不变性的特点,能够有效地表示图像的形状信息(具体Hu不变矩的理论基础自行学习)。Hu不变矩实现代码:
import cv2
import numpy as np
# hu不变矩
def huMoments(img_path):
img = cv2.imread(img_path)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
moments = cv2.moments(img_gray)
humoments = cv2.HuMoments(moments)
humoments = -(np.log(np.abs(humoments))) / np.log(10)
feature = []
for i in humoments:
feature.append(i[0])
return feature
(三)纹理特征—灰色共生矩阵
灰度共生矩阵(GLCM),是利用图像内部不同空间位置的灰度分布情况来表示图像的纹理信息,共包含14种不同的纹理特征,其中包括能量、熵、对比度、方差和逆方差等(具体灰色共生矩阵的理论基础自行学习)。灰色共生矩阵实现代码:
# 代码中仅采用能量、熵、对比度和逆方差4种纹理特征表示图像纹理信息。
import cv2
import math
# 定义最大灰度级数
gray_level = 64
def maxGrayLevel(img):
max_gray_level = 0
(height, width) = img.shape
# print(height, width)
for y in range(height):