如何找到两个图像之间的所有共享区域

2024-03-31

我一直在尝试找到一些可以自动找到两个图像之间所有共享区域的东西not基于像素匹配或差异,经过相当多的搜索后我基本上什么也没得到。

假设我有以下两张图片,在本例中是网站屏幕截图。第一个“基线”:

第二个非常相似,但修改了一些 CSS,所以整个块都被移动了。没有文本内容更改,没有框尺寸更改,只是重新定位了一些元素:

在这种情况下(而且实际上在所有其他情况下,要比较两个图像,其中一个图像是另一个图像的衍生图像),它们的像素差异对于查看发生了什么变化实际上是无用的:

事实上,即使我们应用一些简单的 diff 夸大,结果也是这样still相当无用,因为我们仍在查看像素差异,而不是基于什么的差异changed,所以我们不会(以任何方式)查看视觉信息的实际修改:

所以这就像比较两本书,然后根据有多少个值来确定这两本书是不同的n我们可以找到哪个book1.letters[n] != book2.letters[n]...

因此,我正在寻找一种计算相似区域的方法,显示两个图像的哪些部分编码相同的信息,但不一定在相同的边界框中。

例如,在上面的两张图中,几乎所有数据都是相同的,只是一些部分重新定位。唯一真正的区别是存在神秘的空白。

相似区域用颜色编码:

以及对应的信件:

我找不到一个工具可以做到这一点,我什至找不到允许使用 opencv 或类似技术实现这一点的教程。也许我正在寻找错误的术语,也许没有人真正为此编写过图像比较工具(这似乎难以置信?),所以冒着偏离主题的风险:我搜索和研究 /help/how-to-ask尽我所能,在这里。如果我需要将此作为可以作为正常(开源)工具链的一部分运行以进行质量检查/测试的工具,我有哪些选择? (所以:不是同样昂贵的商业软件的昂贵插件)。


这是初始区域聚类的建议。

首先,我们将两张图像相减,找出不同的区域。然后我们将其调整为更小的规模,以获得更快的速度和更容易的聚类。

然后我们运行形态闭合运算将所有附近的对象聚集在一起。

对结果进行阈值以获得强信号

运行连通分量分析以获取所有边界框。

然后检查所有框交叉点并将它们联合起来。就我而言,我只是在实体模式下重新绘制所有边界框并重新分析组件以获得区域

一旦我们有了这个,我们就可以在第二个图像上运行相同的过程,并使用简单的互相关匹配方法或任何其他奇特的匹配方法对提取的每个区域进行交叉匹配。在这种情况下,区域之间的简单宽度和高度匹配也可以。

这是我制作的代码。我希望它有帮助。

import cv2
import numpy as np


# Function to fill all the bounding box
def fill_rects(image, stats):

    for i,stat in enumerate(stats):
        if i > 0:
            p1 = (stat[0],stat[1])
            p2 = (stat[0] + stat[2],stat[1] + stat[3])
            cv2.rectangle(image,p1,p2,255,-1)


# Load image file
img1 = cv2.imread('img1.jpg',0)
img2 = cv2.imread('img2.jpg',0)

# Subtract the 2 image to get the difference region
img3 = cv2.subtract(img1,img2)

# Make it smaller to speed up everything and easier to cluster
small_img = cv2.resize(img3,(0,0),fx = 0.25, fy = 0.25)


# Morphological close process to cluster nearby objects
fat_img = cv2.dilate(small_img, None,iterations = 3)
fat_img = cv2.erode(fat_img, None,iterations = 3)

fat_img = cv2.dilate(fat_img, None,iterations = 3)
fat_img = cv2.erode(fat_img, None,iterations = 3)

# Threshold strong signals
_, bin_img = cv2.threshold(fat_img,20,255,cv2.THRESH_BINARY)

# Analyse connected components
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(bin_img)

# Cluster all the intersected bounding box together
rsmall, csmall = np.shape(small_img)
new_img1 = np.zeros((rsmall, csmall), dtype=np.uint8)

fill_rects(new_img1,stats)


# Analyse New connected components to get final regions
num_labels_new, labels_new, stats_new, centroids_new = cv2.connectedComponentsWithStats(new_img1)


labels_disp = np.uint8(200*labels/np.max(labels)) + 50
labels_disp2 = np.uint8(200*labels_new/np.max(labels_new)) + 50



cv2.imshow('diff',img3)
cv2.imshow('small_img',small_img)
cv2.imshow('fat_img',fat_img)
cv2.imshow('bin_img',bin_img)
cv2.imshow("labels",labels_disp)
cv2.imshow("labels_disp2",labels_disp2)
cv2.waitKey(0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找到两个图像之间的所有共享区域 的相关文章

  • Android:实时图像处理

    我有一个应用程序 它进行相机预览 对每一帧执行一些基本的图像处理功能 例如边缘检测 颜色变化 图像扭曲等 并 实时 将修改后的帧显示到屏幕上 类似于Android Market中的 Paper Camera 应用程序 我的方法总结 我也做过
  • 这段代码可以优化吗?

    我有一些图像处理代码 循环遍历 2 个多维字节数组 大小相同 它从源数组中获取一个值 对其执行计算 然后将结果存储在另一个数组中 int xSize ResultImageData GetLength 0 int ySize ResultI
  • 防止 ffmpeg 在降低视频分辨率的同时改变颜色强度

    我有一个用例 我需要缩小规模716x1280mp4 视频到358x640 原件的一半 我使用的命令是 ffmpeg i input mp4 vf scale 640 640 force original aspect ratio decre
  • 正方形检测找不到正方形

    我正在使用该程序方块 c在 OpenCV 库的示例中可用 它适用于每个图像 但我真的不明白为什么它不能识别该图像中绘制的正方形 After CANNY After DILATE The RESULT图像 红色 http img267 ima
  • 从彩色背景中提取黑色对象

    人眼很容易辨别black来自其他颜色 但是计算机呢 我在普通的A4纸上打印了一些色块 由于组成彩色图像有青色 品红色和黄色三种墨水 所以我设置每个块的颜色C 20 C 30 C 40 C 50 以及其余两种颜色是 0 这是我的源图像的第一列
  • 增加图像亮度而不溢出

    我在尝试增加图像亮度时遇到问题 这是原始图像 我想要得到的图像是这样的 现在使用以下代码增加亮度 image cv2 imread home wni vbshare tmp a4 index2 png 0 if sum image 0 le
  • 将二进制文件转换为图像

    我需要找到一种将二进制文件转换为图像的快速方法 二进制文件由 N 个NN 矩阵 我想将 0 与一种颜色关联 将 1 与另一种颜色关联 我需要对超过 1000 个二进制文件执行此操作 如果可能的话 我想避免使用 MatLab 有没有任何工具
  • 使用 OpenCV 裁剪黑色边缘

    我认为这应该是一个很简单的问题 但我找不到解决方案或有效的关键字进行搜索 我只有这个图像 黑边没有用 所以我想把它们剪掉 只留下 Windows 图标 和蓝色背景 我不想计算Windows图标的坐标和大小 GIMP 和 Photoshop
  • 在opencv中发现凸性缺陷? [根据给定的输入图像崩溃..]

    我有一个计算图像凸包的程序 我正在尝试使用此信息来计算fingers存在于输入图像中 从一些冲浪中我发现做到这一点的方法 数手指 是 寻找轮廓 凸包 凸性缺陷 但我在使用凸性缺陷函数时遇到了麻烦 它编译得很好 但在运行时程序会因某些输入图像
  • bash 调整图像尺寸以适合特定大小

    我到处搜索但找不到这个问题的答案 我想精确输出一个文件夹中的所有图像 大小为 50Kb 并保持原始的宽高比 I tried ImageMagick并将大小调整为 250x250 例如 但它对我不起作用 它所做的是更改第一个尺寸并适应另一个尺
  • 图像增强 - 从书写中清除给定图像

    我需要清理这张照片 删除 清理我 的字样并使其变亮 作为图像处理课程作业的一部分 我可能会使用 matlab 函数 ginput 来查找图像中的特定点 当然 在脚本中您应该对所需的坐标进行硬编码 您可以使用 conv2 fft2 ifft2
  • 收据褪色部分可以恢复吗?

    我有一些包含一些扫描收据的文件 我需要使用 OCR 从中提取文本 由于收据上打印的文字在一段时间后会褪色 导致收据上的某些文字不清晰 影响OCR结果 褪色单词的一些示例 有什么方法可以恢复褪色的部分 以便提高 OCR 结果吗 我在OpenC
  • 在 C、C++ 中实现腐蚀、膨胀

    我对二值图像的膨胀是如何完成的有理论上的了解 AFAIK 如果我的 SE 结构元素 是这样的 0 1 1 1 在哪里 代表中心 我的图像 二进制是这样的 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0
  • opencv createsamples没有错误,但是没有找到样本

    我在用着this http coding robin de 2013 07 22 train your own opencv haar classifier html教程 我正在根据我的正面图像创建大量样本 我正在使用 Windows 这是
  • 在 RGB 图像上绘制多类语义分割透明叠加

    我有语义分割掩码的结果 值在 0 1 之间 需要大津阈值来确定什么是积极的 我想直接在 RGB 图像上绘制 在 RGB 图像上每个预测类具有不同的随机颜色 我使用以下内容绘制了具有单一颜色的单个蒙版 是否有一个包或简单的策略可以为多类别做到
  • CUDA、NPP 滤波器

    CUDA NPP 库支持使用 nppiFilter 8u C1R 命令过滤图像 但不断出现错误 我可以毫无问题地启动并运行 boxFilterNPP 示例代码 eStatusNPP nppiFilterBox 8u C1R oDeviceS
  • 输入维度/分辨率会影响卷积神经网络的性能吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在构建一个图像分类器 其中有 66 个类和大约 50000 个图像 我的电脑内存为 12 GB 我的内存不足以训练图像 我的问题是
  • 归一化互相关的基础知识

    我正在尝试使用范数校正2 归一化互相关 http en wikipedia org wiki Cross correlation Normalized cross correlation 来自 MATLAB 用于计算发育中胚胎中移动形状的速
  • 从包含带边框的表格的图像中提取表格结构

    我正在尝试提取下表中的单元格位置 应用自适应阈值处理后 我能够获得细胞位置周围的轮廓 并且 HoughLines 获得垂直和水平结构元素 这是我的代码 img cv2 imread os path join img path file im
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo

随机推荐

  • Spring @Autowire 两个未在 ApplicationContext 中定义的同一类的 bean

    我正在开发 Spring MVC 应用程序并遇到问题 我是Spring的新手 所以如果我的工作有点笨拙 请原谅我 基本上我有一个java类ContractList 在我的应用程序中 我需要此类的两个不同对象 它们都必须是单例 public
  • 主干+rails TypeError:List.Header不是构造函数

    我正在尝试按照从该网站购买的教程进行操作 http www backbonerails com http www backbonerails com 我正在关注该系列的第五集 起床运行 第 1 部分 在视频的 46 52 左右 他有 lis
  • go run:无法运行非主包

    这是简单的 go 应用程序 如果我运行以下代码 我会收到 go run 无法运行非主包 错误 package zsdfsdf import fmt func Main fmt Println sddddddd 要修复它 我只需要将包命名为m
  • 如何在 Terraform 中定义一个根据变量可能为空的列表?

    我需要在 Terraform v0 10 8 中定义一个资源 该资源具有一个列表属性 该属性可能为空也可能不为空 具体取决于变量 请参阅volume ids在下面的定义中 resource digitalocean droplet work
  • Apache Hive - 复杂数据类型映射 不起作用

    蜂巢版本2 1 1 问题描述 集合项终止值作为映射键插入 蜂巢表 CREATE TABLE profiles id int name struct
  • Azure 文本转语音:如何更改输出的语言和语音?

    我需要以下 JavaScript 的帮助 希望有人能帮助我 文本以英语语音朗读 如何在以下工作代码中更改语言和语音 由于我的java技术较差 我在网上进行了大量搜索 但找不到合适的解决方案 所以 不幸的是我的编程技能不够好 所以我需要一些具
  • 使用WiX安装后是否可以提示重启机器?

    使用WiX安装后是否可以提示重启机器
  • 检查 Kusto 语言的表是否存在?

    有没有办法使用 kusto 语言以编程方式检查日志分析中是否存在表 例如 假设我想检查工作区是否包含 VMConnection 表 如下所示 IF OBJECT ID objectName U IS NOT NULL OR IF EXIST
  • 如何访问 Import-Csv 数组中的特定行?

    我需要将大文件上传拆分为多个并行进程 并希望使用单个 CSV 文件作为输入 是否可以从一个访问行块Import Csv对象 像这样 SODAData Import Csv CSVPath Delimiter Where Rownum 20
  • 如何在 MVC 的 C# 中创建自己的值为“00”和“”的 SelectList?

    我的操作中有以下代码 ViewBag AccountId new SelectList reference Get 01 AsEnumerable OrderBy o gt o Order RowKey Value 00 在我看来 Html
  • 使用 XCB 检测窗口焦点变化

    我正在使用 XCB 编写一个程序 需要检测窗口何时获得或失去焦点 到目前为止我已经有了这个 但它只是挂在xcb wait for event调用 永远不会进入循环 我在这里缺少什么来获取根事件 或者我的做法完全错误 有比听根音更好的方法吗
  • 我应该避免使用“async void”事件处理程序吗?

    我知道使用 即发即弃 通常被认为是一个坏主意async void方法来启动任务 因为没有对挂起任务的跟踪 并且处理可能在此类方法中抛出的异常很棘手 我通常应该避免async void事件处理程序也是如此 例如 private async v
  • 如何使用Python的GAE开发服务器测试床模拟文件上传到blobstore

    我想编写一些单元测试 其中包括读取 blobstore 文件 https developers google com appengine docs python blobstore blobreaderclass hl pl 如何编写单元测
  • 动态 Javascript 树结构

    我想动态构建层次结构 每个节点创建为层次结构中的层 级别 具有自己的节点数组 这应该形成一个树结构 应该有一个根节点 以及未定义数量的节点和级别来构成层次结构的大小 除了根节点之外 不应修复任何内容 我不需要阅读或搜索层次结构 我需要构建它
  • 如何将录制的视频数据从 javascript 传递到 python

    我正在尝试将录制的视频数据块从某些 javascript 代码传递到我的路线 以便我可以保存它 我是新手 JavaScript 使用用户网络摄像头录制视频并将其保存为 RecordedBlob 我正在尝试将记录的 Blob 数据传递到我的
  • AngularJS + html5Mode + 自定义后备

    我有一个申请html5模式 真 但在 IE 上我不需要回退到 url 我需要的是保留 URL 并重新加载完整的页面 如果我找不到任何方法 我将需要编辑 AngularJS 文件 而这正是我不想要的 建议 Thanks 编辑 作为临时解决方案
  • 管理多个用户的 Firebase Cloud Messaging 令牌

    查看 Firebase 文档 它建议为每个客户端实例生成一个 FCM 令牌 然后必须手动存储该令牌 如果我将每个令牌链接到 Firestore 数据库中的用户文档 那么在用户注销时我是否需要手动删除设备特定的令牌 例如 用户 A 启动应用程
  • pelican:如何在 Markdown 中嵌入 html 和 javascript

    我想在博客文章中嵌入一些 html 元素和 javascript 这是我的 Markdown 文件 Title Foo Tags Bar Some Content here div div 但是 pelican 将 html 标签包装在pr
  • 展平列表

    尝试解决练习 07http www ic unicamp br meidanis courses mc336 2009s2 prolog problemas http www ic unicamp br meidanis courses m
  • 如何找到两个图像之间的所有共享区域

    我一直在尝试找到一些可以自动找到两个图像之间所有共享区域的东西not基于像素匹配或差异 经过相当多的搜索后我基本上什么也没得到 假设我有以下两张图片 在本例中是网站屏幕截图 第一个 基线 第二个非常相似 但修改了一些 CSS 所以整个块都被