[英]Alternative approach to pixel matching
嗨,我正在尝试执行图像对齐和焦点堆叠,并取得了一些成果。 生成的堆叠图像仍然有一些噪音,而不是所需的最佳结果。 根据我的理解,这是因为在将图像拼接在一起之前执行了图像对齐。 噪声也可能是由于使用像素匹配完成对齐的方法。 我在这里看到了一篇文章: https : //www.mfoot.com/blog/2011/07/08/enfuse-for-extended-dynamic-range-and-focus-stacking-in-microscopy/这谈到了另一种选择它考虑来自局部邻域的像素而不是图像中的匹配像素。 我找不到任何关于此的信息。 有人可以指导我找到可能有帮助的任何资源。
detector = cv2.ORB_create(1000)
image_1_kp, image_1_desc = detector.detectAndCompute(image1gray, None)
我会给你一个更一般的例子,使用OpenCV 示例进行特征匹配,然后使用匹配的特征作为关键点来估计对齐图像的变换。
例如,给定两个图像
您可以在 OpenCV 中进行特征匹配,如下所示
import cv2
import numpy as np
img1 = cv2.imread("box.png",0) # queryImage
img2 = cv2.imread("box_in_scene.png",0) # trainImage
H, W = img1.shape
# Initiate SIFT detector
orb = cv2.ORB_create(1000)
# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
# create BFMatcher object
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
# Match descriptors.
matches = bf.match(des1,des2)
# Sort them in the order of their distance.
matches = sorted(matches, key = lambda x:x.distance)
从那里您可以获得 10 个最佳匹配关键点并使用它们来估计变换。
# Get 10 best matching keypoints
query_pts = np.array([np.array(kp1[match.queryIdx].pt) for match in matches[:10]])
train_pts = np.array([np.array(kp2[match.trainIdx].pt) for match in matches[:10]])
# Estimate transform
M = cv2.estimateAffine2D(train_pts, query_pts)[0]
# Warp image
img3 = cv2.warpAffine(img2, M, (W, H))
对齐的图像应该看起来像
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.