【问题标题】:Finding image subsets between two images查找两个图像之间的图像子集
【发布时间】:2026-02-24 08:10:02
【问题描述】:
我正在研究一种处理基于硬件的位图动画的方法。作为输入,我有一个简单位图的图像序列(它不是视频,它更像是简单的形状,即使它们可能包含位图填充)。我正在制作这个动画的纹理图集(所以它可以用 GPU 快速渲染),因为这个序列有时大部分是静止的,而一小部分是动画的,我需要一个算法来找到两个图像之间的“公共部分”,所以我可以节省内存。
图像可能具有不同的大小(例如,如果对象正在增长或缩小),因此我需要一种方法来检测两者之间的最大公共区域。我见过this answer,它部分解决了我的问题。不过,我想知道,如果我的情况已经有更好的算法,特别是因为尺寸可以变化,一个图像不一定包含在另一个图像中,但我需要找到两者之间的共同部分两个。
【问题讨论】:
标签:
algorithm
image-processing
opencv
textures
【解决方案1】:
我看到的一个问题是,一张图片可以以多种方式包含在另一张图片中,您如何确定正确答案?
它必须是实时的吗?如果没有,那么您可以使用适应度函数进行简单的 O(n^4) 搜索。
适应度函数可能是图像之间的误差(给出 n^8 算法)。
更新:
分析错误我见谅。搜索是 n^2,适应度函数是 n^2,得到 n^4。
整个算法应该是这样的:
w1 = width of image 1
w2 = width of image 2
h1 = height of image 1
h2 = height of image 2
for x = -w1 to w1+w2
for y = -h1 to h1+h2
find max fitness(x,y)
fitness(xc,yc){
m=0
for each x where image 1 overlaps image 2 displaced by xc
for each y where image 1 overlaps image 2 displaced by yc
if (image1[x][y] == image2[x+xc][y+yc])
m += 1
return m
}
UPDATE:修改适应度函数,查找重叠数,然后尝试找到最多的重叠。