微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Harris 检测器和 RANSAC 优化两幅图像的匹配

如何解决如何使用 Harris 检测器和 RANSAC 优化两幅图像的匹配

我想混合两个相似的图像(在可见光和红外光下拍摄)。图像是用不同的相机拍摄的,没有对齐。我需要先找到匹配项并扭曲它们。

我使用此代码查找匹配项。它在大多数情况下都可以正常工作,但对于某些图像,它会失败。没有找到足够的内点。

我可以做些什么来改进它?更改参数或算法?或者以某种方式预处理图像?

我认为问题在于关键点检测,在某些情况下,Harris 角点检测器正确选择的特征并不多。有什么更好的方法吗?

我试图将这段代码放入一个循环中并使用不同的参数运行它,但它没有多大帮助。也许我运气不好,这种类型的图像很难匹配。

from imageio import imread

import matplotlib.pyplot as plt

from skimage import img_as_float
from skimage.color import rgb2gray

from skimage.transform import ProjectiveTransform
from skimage.measure import ransac
from skimage.feature import plot_matches,match_descriptors,corner_peaks,corner_harris,BRIEF

       
def show_matches(images,keypoints,matches):
    fig,ax = plt.subplots(1,1,figsize=(7,7))
    plot_matches(ax,*images,*keypoints,matches)
    ax.axis('off')
    plt.show()
                   

KEYP_CFG = dict(
            min_distance = 3,threshold_rel = 1e-7,)
RANS_CFG = dict(
            max_trials = 800,min_samples = 10,residual_threshold = 1,)
MATCH_CFG = dict(
            max_distance = 200,)
BRIEF_CFG = dict(
            patch_size = 59,)
  
fpaths = ["a.png","b.jpg"]

images = [img_as_float(imread(fp)) for fp in fpaths]

images_gray = [rgb2gray(im) if im.ndim > 2 else im for im in images]

print("find matches...") 
keypoints = []
descriptors = []

brief = BRIEF(mode="uniform",**BRIEF_CFG)
for im in images_gray:
    keypoints1 = corner_peaks(corner_harris(im),**KEYP_CFG)
    brief.extract(im,keypoints1)
    keypoints.append(keypoints1[brief.mask])
    descriptors.append(brief.descriptors)

matches = match_descriptors(*descriptors,cross_check=True,**MATCH_CFG)
show_matches(images_gray,matches)

print("calc transformation...") 
src_keys = keypoints[1][matches[:,1]][:,::-1]
dst_keys = keypoints[0][matches[:,0]][:,::-1]

model_robust,inliers = ransac(
    (src_keys,dst_keys),ProjectiveTransform,**RANS_CFG)

show_matches(images_gray,matches[inliers])

匹配失败的例子:

Found matches

inliers failed

c.png

d.jpg

工作正常且可用于扭曲和混合图像的匹配示例:

Found matches

inliers OK

a.png b.jpg

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。