patch matching 图像块匹配算法

进入实验室后,我读的第一篇paper是:Needle-Match: Reliable Patch Matching under High Uncertainty,其中涉及到了patch相似度匹配,作为一个新人我对此没有任何基础,我完全不懂如何匹配出相似的patch,当时在网上也没有找到说的很清楚的参考资料,经过两周的学习和matlab仿真,我简单讲讲如何找出一幅图中相似的p块和q块,这都是很简单的知识,仅仅献给初学者(若有错误欢迎指正):

在一幅512*512的灰度图中,以3x3的patch为例,在全图匹配出与p最相似的q块,使用的方法可称作“patch-NNs”:


1.首先把待匹配的patch块p的灰度值存入3x3矩阵,以一个像素为滑动单位(或者以3x3单位)计算全图每个3x3块q与原p的最小L2距离(欧式距离,使用其他距离也可以,如曼哈顿距离

  • 6
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
匹配算法是一种常用的运动估计算法,以下是一份简单的匹配算法代码示例: ```python import numpy as np def block_matching(prev_frame, curr_frame, block_size=16, search_range=16): """ 匹配算法实现运动估计 :param prev_frame: 上一帧图像 :param curr_frame: 当前帧图像 :param block_size: 的大小 :param search_range: 搜索范围 :return: 运动矢量场 """ height, width = prev_frame.shape mv_field = np.zeros((height // block_size, width // block_size, 2)) for i in range(0, height, block_size): for j in range(0, width, block_size): # 获取当前 curr_block = curr_frame[i:i+block_size, j:j+block_size] # 初始化最小误差和最小误差对应的运动矢量 min_error = np.inf motion_vector = np.zeros(2) # 在搜索范围内寻找最相似 for k in range(max(0, i-search_range), min(height-block_size, i+search_range)): for l in range(max(0, j-search_range), min(width-block_size, j+search_range)): # 获取参考 ref_block = prev_frame[k:k+block_size, l:l+block_size] # 计算均方误差 error = np.sum(np.square(ref_block - curr_block)) # 更新最小误差和最小误差对应的运动矢量 if error < min_error: min_error = error motion_vector = np.array([k-i, l-j]) # 记录运动矢量 mv_field[i//block_size, j//block_size] = motion_vector return mv_field ``` 在上面的代码中,我们首先将图像划分成大小为 `block_size` 的,然后在以当前为中心的一个搜索范围内寻找与之最相似,并计算它们的均方误差。最后,我们将最小误差对应的运动矢量作为当前的运动矢量,记录在运动矢量场中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值