首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何度量相似度,找出哪些图像与具有最高相似度的对应图像匹配?

如何度量相似度,找出哪些图像与具有最高相似度的对应图像匹配?
EN

Stack Overflow用户
提问于 2022-08-21 13:47:21
回答 1查看 199关注 0票数 0

我有两个文件夹的图像,每一个包含大约145张图片。我想测量相似度,找出哪些图像匹配相应的图像,哪些图像具有最高的相似性。让我们假设,取决于这两个点的中心之间的距离。但是度量相似性的尺度不应该取决于出现在每幅图像中的两个点的直径大小。

根据欧几里德距离,这是我用来寻找相似之处的代码!

代码语言:javascript
复制
 from skimage.metrics import structural_similarity as ssim
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
import numpy as np
import cv2
import glob
import scipy.spatial.distance as dist
import os
np.seterr(divide='ignore', invalid='ignore')



images_list = []
images_list2 = []
resultlist = []
Maxlist= []
SIZE = 512


path = r"C:\Users\fadil\Desktop\Project\Segmentation\Exp1_v1_30062021 - Copy-2\CT&DCT\CT\U_Net_Segmentation_CT\result1\*.*"
for file in glob.glob(path):
    print(file)  # just stop here to see all file names printed
    img = cv2.imread(file, 0)  # now, we can read each file since we have the full path
    images_list.append(img)
images_list = np.array(images_list)

path3 = r"C:\Users\fadil\Desktop\Project\Segmentation\Exp1_v1_30062021 - Copy-2\CT&DCT\CT\U_Net_Segmentation_CT\result2\*.*"
for file2 in glob.glob(path3):
    print(file2)  # just stop here to see all file names printed
    img2 = cv2.imread(file2, 0)  # now, we can read each file since we have the full path
    images_list2.append(img2)
images_list2 = np.array(images_list2)




img_num:int= 1
for img2 in range(images_list2.shape[0]):
    input_img2 = images_list2[img2, :, :]
    print(img2)
    img_number = 1
    resultlist.clear()
    for image in range(images_list.shape[0]):
               input_img = images_list[image, :, :]  # Grey images. For color add another dim.
               s = dist.euclidean(input_img, input_img2)
               resultlist.append(float(s))
               img_number += 1
    print(resultlist)

    with open(r"C:\Users\fadil\Desktop\Project\Segmentation\Exp1_v1_30062021 - Copy-2\CT&DCT\CT\Similartiy Data result  euclidean\file"+str(img_num)+".txt", "w") as f:
        for M in resultlist:
            f.write(str(M) + "\n")

 #print(len(resultlist))
    ll=max(resultlist)
    Maxlist.append(float(ll))
    print(ll)
    print(Maxlist)
    MM=resultlist.index(ll)
    print (MM)
    list=images_list[MM]
    ###############################################

    from skimage import data, img_as_float
    im1 = images_list[MM]
    im2=input_img2
    im1 = img_as_float(im1)
    rows, cols = im1.shape
    im2 = img_as_float(im2)
    rows, cols = im2.shape
    fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 4),
                             sharex=True, sharey=True)
    ax = axes.ravel()

    mse_none = mean_squared_error(im1, im2)
    ssim_none = ssim(im1, im1, data_range=im1.max() - im1.min())

    mse_noise = mean_squared_error(im1, im2)
    ssim_noise = ssim(im1, im2,
                      data_range=im2.max() - im2.min())

    mse_const = mean_squared_error(im1, im2)
    ssim_const = ssim(im1, im2,
                      data_range=im2.max() - im2.min())

    label = 'MSE: {:.16f},\n SSIM: {:.16f},\n MM'

    ax[0].imshow(im1, cmap=plt.cm.gray, vmin=0, vmax=1)
    ax[0].set_xlabel(label.format(mse_none, ssim_none))
    ax[0].set_title('GT CT')

    ax[1].imshow(im2, cmap=plt.cm.gray, vmin=0, vmax=1)
    ax[1].set_xlabel(label.format(mse_noise, ssim_noise))
    ax[1].set_title('RE CT')





    ###############################################
    cv2.imwrite(r"C:\Users\fadil\Desktop\Project\Segmentation\Exp1_v1_30062021 - Copy-2\CT&DCT\CT\Similartiy Data result  euclidean\image"+str(img_num)+".jpg",list)
    cv2.imwrite(r"C:\Users\fadil\Desktop\Project\Segmentation\Exp1_v1_30062021 - Copy-2\CT&DCT\CT\Similartiy Data result  euclidean\image" + str(img_num) + ".png", input_img2)
    img_num += 1
#print(Maxlist)
#plt.plot(Maxlist, Maxlist)
#plt.show()
with open(r"C:\Users\fadil\Desktop\Project\Segmentation\Exp1_v1_30062021 - Copy-2\CT&DCT\CT\Similartiy Data result  euclidean\file"+str(img_num)+".txt", "w") as f:
     for N in Maxlist:
        f.write(str(N) + "\n")
import pickle
plt.tight_layout()
plt.show()

cv2.waitKey(0)
cv2.destroyAllWindows()

我已收到以下错误代码:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:/Users/fadil/Desktop/Project/Segmentation/Exp1_v1_30062021 - Copy-2/CT&DCT/CT/U_Net_Segmentation_CT/Similarity euclidean.py", line 45, in <module>
    s = dist.euclidean(input_img, input_img2)
  File "C:\Users\fadil\.conda\envs\tf\lib\site-packages\scipy\spatial\distance.py", line 626, in euclidean
    return minkowski(u, v, p=2, w=w)
  File "C:\Users\fadil\.conda\envs\tf\lib\site-packages\scipy\spatial\distance.py", line 513, in minkowski
    u = _validate_vector(u)
  File "C:\Users\fadil\.conda\envs\tf\lib\site-packages\scipy\spatial\distance.py", line 340, in _validate_vector
    raise ValueError("Input vector should be 1-D.")
ValueError: Input vector should be 1-D.

进程已完成,退出代码为%1

EN

回答 1

Stack Overflow用户

发布于 2022-08-21 15:22:48

利用关键点提取算法可以实现图像匹配。其中一个算法是ORB,它是opencv库的一部分。您可以找到关于ORB 这里的更多信息。

使用ORB匹配两个图像的简单代码如下所示。您可以根据您的要求修改代码,并循环遍历所有图像以找到匹配的图像。

代码语言:javascript
复制
import numpy as np
import cv2
  
     
query_img = cv2.imread('query.jpg') 
train_img = cv2.imread('train.jpg')
  
# Convert images into grayscale
query_img_bw = cv2.cvtColor(query_img,cv2.COLOR_BGR2GRAY)
train_img_bw = cv2.cvtColor(train_img, cv2.COLOR_BGR2GRAY)
  
# Initialize the ORB detector algorithm
orb = cv2.ORB_create()
  
# Now detect the keypoints and compute

queryKeypoints, queryDescriptors = orb.detectAndCompute(query_img_bw,None)
trainKeypoints, trainDescriptors = orb.detectAndCompute(train_img_bw,None)
 
#match the keypoints
matcher = cv2.BFMatcher()
matches = matcher.match(queryDescriptors,trainDescriptors)
  
# draw the matches to the final image
# containing both the images 

final_img = cv2.drawMatches(query_img, queryKeypoints,
train_img, trainKeypoints, matches[:20],None)
  
final_img = cv2.resize(final_img, (1000,650))
 
# Show the final image
cv2.imshow("Matches", final_img)
cv2.waitKey(3000)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73435042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档