计算机视觉

您所在的位置:网站首页 如何计算两张图片的相似度呢 计算机视觉

计算机视觉

#计算机视觉| 来源: 网络整理| 查看: 265

在计算机视觉中如何识别两张图片是否相似,可以通过图像的像素值,根据颜色特征来识别是否为相似图片

计算图片的相似度方法 1.像素方差1.1缩放图片1.2灰度处理1.3计算图像每行的平均值1.4计算方差1.5比较方差 2.哈希值计算2.1平均值哈希2.1.1图片缩放成8*82.1.2灰度化图像G2.1.3计算整个灰度图像的像素平均值avg2.1.4计算hash图像H 2.2感知哈希2.2.1图片缩放32*322.2.2灰度化图像 G 1 G_{1} G1​2.2.3计算得到图像G的离散余弦变换的图像 G 2 G_{2} G2​2.2.4取 G 2 G_{2} G2​左上角8*8子图像 G 3 G_{3} G3​,计算这个图像中所有像素的平均值,假设其值为a2.2.5计算hash图像H 2.3差异值哈希2.3.1缩放图片9*82.3.2灰度化2.3.3差异值计算2.3.4计算hash图像H 2.3汉明距离计算 3.余弦距离计算4.直方图计算

1.像素方差 1.1缩放图片 1.2灰度处理 1.3计算图像每行的平均值 1.4计算方差

计算所有行的平均值,并以此计算所有行的方差和 s 2 = ( x 1 − M ) 2 + ( x 2 − M ) 2 + ( x 3 − M ) 2 + . . . + ( x n − M ) 2 n s^2=\frac{(x_{1}-M)^2+(x_{2}-M)^2+(x_{3}-M)^2+...+(x_{n}-M)^2}{n} s2=n(x1​−M)2+(x2​−M)2+(x3​−M)2+...+(xn​−M)2​ 其中 x n 表 示 第 n 行 的 像 素 平 均 值 , M 表 示 所 有 行 的 像 素 平 均 值 x_{n}表示第n行的像素平均值,M表示所有行的像素平均值 xn​表示第n行的像素平均值,M表示所有行的像素平均值

1.5比较方差

代码中先使用yolov模型对图片进行了目标检测,提取出检测部分的图像,然后在对图像做相似度处理。

import cv2 as cv import matplotlib.pyplot as plt from yolo.yolo import yolo_detect def detect(data): x,y,w,h=yolo_detect(data) image=cv.imread(data,cv.IMREAD_UNCHANGED) print(x,y,w,h) img=image[x:x+w,y:y+h] return img def imgavg(img): sidelength=30 #缩放 img=cv.resize(img,(sidelength,sidelength),interpolation=cv.INTER_CUBIC) #灰度化 gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY) #每行平均值 avglist=[] for i in range(sidelength): avg=sum(gray[i])/len(gray[i]) avglist.append(avg) return avglist def variance(avglist): avg=sum(avglist)/len(avglist) s=0 for i in avglist: s+=(i-avg)*(i-avg)/len(avglist) return s data1='data/car1.jpg' image1=cv.imread(data1,cv.IMREAD_UNCHANGED) data2='data/car2.jpg' image2=cv.imread(data2,cv.IMREAD_UNCHANGED) img1=detect(data1) img2=detect(data2) avg1=imgavg(img1) avg2=imgavg(img2) print("两图片方差:%s"%(abs(variance(avg1)-variance(avg2)))) x=range(30) plt.figure("兰博基尼") plt.subplot(2,2,1) plt.imshow(image1) plt.subplot(2,2,2) plt.plot(x,avg1,marker="*",label="$car1$") plt.plot(x,avg2,marker="*",label="$car2$") plt.legend() plt.subplot(2,2,3) plt.imshow(image2) plt.legend() plt.show()

在这里插入图片描述

2.哈希值计算 2.1平均值哈希 2.1.1图片缩放成8*8 image=cv.resize(img,(8,8),interpolation=cv.INTER_CUBIC) 2.1.2灰度化图像G gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY) 2.1.3计算整个灰度图像的像素平均值avg s=0 for i in range(8): for j in range(8): s=s+gray[i,j] avg=s/64 2.1.4计算hash图像H

初始化一张尺寸大小与灰度图像一样的hash图像,其中所有值为0,一行一行遍历图像 G G G。 如果图像中像素 G ( i , j ) > = a G(i,j)>=a G(i,j)>=a,则hash图像 H ( i , j ) = 1 H(i,j)=1 H(i,j)=1。 如果图像中像素 G ( i , j ) < a G(i,j) = a G_{2}(i,j)>=a G2​(i,j)>=a,则hash图像 H ( i , j ) = 1 H(i,j)=1 H(i,j)=1。 如果图像中像素 G 2 ( i , j ) < a G_{2}(i,j)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3