【问题标题】:Comparison of two images taken in different environments using OpenCV-python使用 OpenCV-python 在不同环境中拍摄的两张图像的比较
【发布时间】:2016-09-23 22:23:39
【问题描述】:

我必须比较在不同环境光下拍摄的同一物体的两张图像(例如一张在明亮的阳光下,另一张在白光下等),并且相机角度旋转以及尺寸可能不同。现在由于图像是同一个对象,它们应该几乎正确匹配。比较是在颜色和形状的基础上进行的。为此,需要重新缩放、旋转测试图像,并补偿光线的差异。请告诉我如何使用 OpenCV-python 来做到这一点。我正在使用 OpenCV 3.0.0 和 python 2.7。
我附上了要比较的同一对象的示例图像。

我真的没有找到任何可以完成这项工作的好方法。请帮助我。
提前致谢!

【问题讨论】:

  • 请展示您已经完成的一些工作(代码..)。您只想解决这种情况吗?您想要针对特定​​案例的自动算法吗?图像是否总是白色背景上的黄色矩形?
  • 我尝试过使用单应性、特征匹配等。但它们都没有按预期工作。该算法应该是通用的,而不是只针对这个测试用例。图像可以是任何形状(或各种形状的组合),例如水果盘的简单绘画。背景可以是任何颜色,不仅是白色,而且绘画可以与背景区分开来。
  • 我认为特征匹配的问题是你没有任何......它是一个空白的黄色矩形。在图像的情况下,进行特征匹配会容易得多。如果您没有任何特征,请尝试查看轮廓,找到它们的方向和比例。当然,圆形、矩形等也有一些歧义。

标签: python-2.7 opencv image-processing


【解决方案1】:

按照 cmets,如果对象没有像本例那样的明显特征,我建议使用几何特征:

  • 移除背景(创建只有对象与背景的二值图像)
  • 寻找外轮廓
  • 找到它的方向、大小、中心
  • 旋转和缩放图像
  • 如果您有一些投影(不是直接从上方拍摄的图像),您可以使用一些形状匹配算法来找到点之间的对应关系,然后从中估计单应性。

然后,当您的图像对齐时,您可以使用任何相关性进行比较。看看这个教程Histogram Comparison

【讨论】:

  • 能否提供旋转和缩放的代码,使两张图片最匹配?
  • @ath - OpenCV 有EstimateRigidTransform,它可以找到最佳转换。找到后可以调用warpAffine对图片进行转换。
【解决方案2】:

尝试使用兴趣点检测器(如 ORB 或 SIFT)匹配图像。以下是使用 ORB 的结果。

代码

import numpy as np
import cv2
from matplotlib import pyplot as plt

img1 = cv2.imread('im1.jpg',0) 
img2 = cv2.imread('im2.jpg',0) 

orb = cv2.ORB_create()

kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)

bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)

good = []
for m,n in matches:
    if m.distance < 0.95*n.distance:
        good.append([m])

img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good, None,flags=2)


plt.imshow(img3),plt.show()

【讨论】:

  • 它没有给我第二个图像要旋转的角度和缩放因子,以便两个形状最匹配。另外,如何检查它们的颜色是否匹配?
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 2020-08-08
相关资源
最近更新 更多