我有一个覆盖大面积屋顶的图像!我正在使用分段分析它的故障。然而,挑战在于有时屋顶的单个镜头没有涉及的细节,因此很难对其进行分析。因此,我们将其分为多个部分并拍摄较小部分的图像并进行分析。
这是一个例子:
Entire roof shot
Part 1
Part 2
Part 3
因此,现在我要分析零件的故障,并一次性完成更换。这是分析的部分之一的外观:
Post Analysis
到目前为止,我的想法是:如果我可以通过某种方式将未分析的零件映射到屋顶,我也可以使用相同的信息和方法将已分析的零件映射到单个镜头。
我已经能够进行特征检测并识别单张照片上的零件,但是我不确定如何转换它们以适合并替换单张照片上的确切零件。这是功能检测:
Feature detection for image/template matching
我一直在想尝试将较小的图像一个接一个地缝到较大的图像上,但是我担心这可能行不通
PS:我正在使用Linux,Python3和OpenCV 3.4.0
此外,原始单张照片不会手动分为不同部分。由于它具有热凸轮,因此不可能在单次拍摄时获得很高的分辨率,因此凸轮会以不同的镜头近拍。这些部分是单独的图像,不会从单张照片中裁剪出来。
编辑:现在,我正在尝试一种替代方法,即检测零件图像中的缺陷,然后将这些缺陷裁剪出来用作模板,然后尝试使用SIFT进行特征检测以将缺陷作为模板匹配一次。但是,小故障与除自身以外的所有其他事物都匹配:(大多数较大的故障都被检测为精细,中型的故障也不是太好。我认为原因是图像的分辨率较低并且单张照片无法复制模板匹配时,近距离镜头的故障和特征数量也较少。
最佳答案
更新的答案
我很抱歉!我误解了这个问题。因此,使用特征映射方法,您可以在原始图片上获得一组与新图片中的一组点相对应的点。假设要素映射工作正常,则可以将对应关系描述为映射:
$$ P_ {新点} = T_ {原始到新} * P_ {原始} $$
其中T_ {original to new}是transformation matrix。如果您具有此转换矩阵,则可以轻松地对其进行转换,以找到“部分”图片与原始图片之间的关系。
挑战在于您当前拥有一个复杂的转换矩阵!您要寻找的组件具有旋转组件,平移组件,缩放组件,并且很可能也会发生一些倾斜。对于给定的特征点,我不确定找到此矩阵的正确方法。
如果您不介意做一些手动工作,建议您找到在两张图片上都对应的一组线,并使用OpenCV的perspective transformation为您找到此矩阵。
旧的,不相关的答案
我有一个亲吻答案:
当您从“整个屋顶拍摄图像”中手动选择“1-3部分”时,请跟踪其初始大小和位置。
如果您提前知道转换,则无需事后计算。首先,我建议将图像拆分为四分位数,并在具有这种简单几何形状的情况下覆盖检测结果。一旦可行,就可以解决原始图片中任意大小的框的问题。
关于python - 如何使用cv2将图像的一部分覆盖/替换为另一部分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51616160/