(图像匹配)用脚本找出图案中重复出现的匹配的两个最小单元
概述:运用图像匹配技术,找出一张图片中重复出现的最小单元,并用opencv库将它分别裁剪下来
参考的github——基于图像匹配模型patch2pix:[https://github.com/GrumpyZhou/patch2pix](https://github.com/GrumpyZhou/patch2pix)
1.环境:
安装环境的过程这边就不讲了,我用的是pytorch1.7.0+cuda10.2,如果pytorch版本过高模型会有warning。
老版本pytorch安装也很简单,进入pytorch官网,点install

再点previous verisons就可以了,需要注意的是要和自己的cuda版本匹配。
2.应用以及思路
在文件目录的example里有作者给出的示例脚本:

我们只要对visualize_matches.ipynb脚本进行修改即可,在修改之前也可以先运行一下,对应作者给的图片示例。
作者给出的图片都是两个对比的图片

举例:


结果:

那么我们怎么用图像匹配的思想,只输入一张图片,并且从一张图片中找出两个重复的部分呢?
举个例子,给出下面一张图,我要做的工作就是找出的就是它能匹配的两个最小的单元:

这里我用到的是滑动窗口的思想,默认第一个串口是我的左上角,串口大小我尝试了一下对于1440 * 900的图,窗口大小200* 200效果就很不错。
从纵向上每隔200像素滑动一个窗口,与地一个窗口进行比较,我们会得到一个matches的值,它里面保存的就是两个窗口匹配的像素点的坐标。通过坐标之间的像素差值,计算所有匹配的像素点的平均值,我们就可以粗略计算出图像块的周期,并且用cv将他裁剪出来。
下面给出我的脚本代码:
import sys
sys.path.append('..')
from argparse import Namespace
import os
import numpy as np
import pydegensac
from utils.common.plotting import plot_matches
from utils.eval.model_helper import *
import cv2
import time
np.set_printoptions(precision=2)
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
METHOD = 'patch2pix'
if METHOD == 'nc':
# Initialize ncnet matcher
args = Namespace(ncn_thres=0.9, imsize=1024, ksize=2,
ckpt='../pretrained/ncn_ivd_5ep.pth')
matcher = init_ncn_matcher(args)
else:
# Initialize patch2pix matcher
args = Namespace(io_thres=0.25, imsize=1024, ksize=2,

本文探讨如何使用图像匹配技术,通过滑动窗口和opencv,从一张图片中找出重复出现的最小单元。通过修改visualize_matches脚本,实现周期像素检测并裁剪匹配区域。过程涉及pytorch模型和几何验证。
最低0.47元/天 解锁文章
1356

被折叠的 条评论
为什么被折叠?



