Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 查找两个图像之间的图像子集_Algorithm_Image Processing_Opencv_Textures - Fatal编程技术网

Algorithm 查找两个图像之间的图像子集

Algorithm 查找两个图像之间的图像子集,algorithm,image-processing,opencv,textures,Algorithm,Image Processing,Opencv,Textures,我正在研究一种处理基于硬件的位图动画的方法。作为输入,我得到了一个简单位图的图像序列(它不是视频,更像是简单的形状,尽管它们可能包含位图填充)。我正在制作这个动画的纹理图集(这样它可以用GPU快速渲染),由于这个序列有时大部分都静止不动,而一小部分正在制作动画,我需要一个算法,可以找到两个图像之间的“公共部分”,这样我就可以节省内存 图像的大小可能不一样(例如,如果对象正在增长或收缩),因此我需要一种方法来检测两者之间最大的公共区域。我看到了,这部分解决了我的问题。不过,我想知道,是否有更好的算

我正在研究一种处理基于硬件的位图动画的方法。作为输入,我得到了一个简单位图的图像序列(它不是视频,更像是简单的形状,尽管它们可能包含位图填充)。我正在制作这个动画的纹理图集(这样它可以用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
}

更新:修改适应度函数以查找重叠的数量,然后尝试查找最多的重叠。

不需要是实时的。健身功能是如何工作的?