📜  使用 Mahotas 的 Wally 问题在哪里(1)

📅  最后修改于: 2023-12-03 15:36:31.877000             🧑  作者: Mango

使用 Mahotas 的 Wally 问题在哪里

Mahotas 是一个为了计算机视觉和图像分析而编写的Python库。其中包括了一种名为Wally的算法,该算法是用于在图像中查找子图案的一种方法。在这篇文章中,我们将介绍Mahotas的Wally算法以及如何使用它。

什么是 Mahotas 的 Wally 算法?

Mahotas的Wally算法是一种基于显著性的图像搜索算法。它通过在要搜索的图像中查找与查询图像相似的区域来实现这一目的。在Mahotas中,Wally算法使用了一种称为Zernike多项式的技术来进行相似性匹配。当然,Wally算法不仅仅是一种单一的算法,它还包括了一系列的预处理步骤和后续的操作。

如何使用 Mahotas 的 Wally 算法?

使用Mahotas的Wally算法可以参考以下步骤:

  1. 安装Mahotas库:使用pip安装Mahotas库即可:

    pip install mahotas
    
  2. 导入mahotas库和要用于测试的图像和目标图像:

    import mahotas as mh
    image = mh.imread('image.jpg')
    target = mh.imread('target.jpg')
    
  3. 使用Wally算法进行搜索:

    from mahotas.features import corner_peaks
    from mahotas.features import zernike_moments
    
    image = mh.imread('image.jpg')
    target = mh.imread('target.jpg')
    
    # 在图像中搜索目标
    targ_moments = zernike_moments(target.astype(float))
    targ_angles = mh.features.surf(target)
    image_moments = zernike_moments(image.astype(float))
    image_angles = mh.features.surf(image)
    result = mh.match_template(image.astype(float), target.astype(float), metric = 'npd')
    result_no_norm = mh.match_template(image.astype(float), target.astype(float), metric = 'npd', normalizer = None)
    
    # 获取匹配结果中的所有明显的角落
    coords = corner_peaks(result, exclude_border = len(target) // 2)
    
    # 显示结果
    import matplotlib.pyplot as plt
    plt.imshow(image)
    plt.gray()
    plt.plot([c[1] for c in coords], [c[0] for c in coords], 'ro')
    plt.show()
    

需要注意的是,Mahotas的Wally算法对图像和目标图像的大小有一些要求,即它们的尺寸必须大于16 × 16像素,且必须为正方形。此外,由于Wally算法的复杂性,其搜索速度相对较慢,而在大型图像上的搜索可能需要一些时间。

总之,Mahotas的Wally算法是一种功能强大的图像搜索算法,可以应用于多种实际应用中,例如拼图游戏、图像检索等。通过以上步骤的介绍,相信大家对如何使用Mahotas的Wally算法进行图像搜索有了更加深刻的了解。