Algorithm 查找两个图像之间的图像子集
我正在研究一种处理基于硬件的位图动画的方法。作为输入,我得到了一个简单位图的图像序列(它不是视频,更像是简单的形状,尽管它们可能包含位图填充)。我正在制作这个动画的纹理图集(这样它可以用GPU快速渲染),由于这个序列有时大部分都静止不动,而一小部分正在制作动画,我需要一个算法,可以找到两个图像之间的“公共部分”,这样我就可以节省内存Algorithm 查找两个图像之间的图像子集,algorithm,image-processing,opencv,textures,Algorithm,Image Processing,Opencv,Textures,我正在研究一种处理基于硬件的位图动画的方法。作为输入,我得到了一个简单位图的图像序列(它不是视频,更像是简单的形状,尽管它们可能包含位图填充)。我正在制作这个动画的纹理图集(这样它可以用GPU快速渲染),由于这个序列有时大部分都静止不动,而一小部分正在制作动画,我需要一个算法,可以找到两个图像之间的“公共部分”,这样我就可以节省内存 图像的大小可能不一样(例如,如果对象正在增长或收缩),因此我需要一种方法来检测两者之间最大的公共区域。我看到了,这部分解决了我的问题。不过,我想知道,是否有更好的算
图像的大小可能不一样(例如,如果对象正在增长或收缩),因此我需要一种方法来检测两者之间最大的公共区域。我看到了,这部分解决了我的问题。不过,我想知道,是否有更好的算法适合我的情况,特别是因为大小可能不同,一个图像不一定包含在另一个图像中,但我需要找到两者之间的共同部分。我看到的一个问题是,一个图像可以以多种方式包含在另一个图像中,如何确定正确答案 它必须是实时的吗?如果没有,则可以使用适应度函数进行简单的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
}
更新:修改适应度函数以查找重叠的数量,然后尝试查找最多的重叠。不需要是实时的。健身功能是如何工作的?