算法效率模式匹配,检查图像内部图像

时间:2014-06-09 20:12:54

标签: java algorithm image-processing graphics pattern-matching

这是我previous question的更具描述性的版本。我试图解决的问题涉及块匹配或图像内图像识别。

我看到一个图像,提取每个黑色像素的[x,y]并为该图像创建一个集合,例如

{[8,0], [9,0], [11,0]} 

然后增大该集合,使得集合中的第一个像素为[0,0],但保留像素的关系。例如,我看到{[8,0],[9,0]}并将设置更改为{[0,0],[1,0]}。提取的重点是,如果我看到{[4,0],[5,0]},我可以将基本关系识别为两个垂直相邻的像素,我的{[0,0],[1,0]因为它是相同的图像,但只在不同的位置。

我有一个这些像素集的列表,名为"看过图像"。每个看过的图像'具有唯一标识符,允许将其用作其他集的嵌套组件。例如:

{[0,0], [1,0]} has the identifier 'Z' 

所以,如果我看到:

{[0,0], [1, 0], [5,6]}

我可以识别并将其存储为:

{[z], [5, 6]}

这个问题是我必须在像素集中生成[x,y]的每个组合来检查模式匹配,并构建最佳表示。使用前面的示例,我必须检查:

{[0,0], [1,0]}, 
{[0,0], [5,6]}, 
{[1,0], [5,6]} which is {[0,0], [4,5]} 
{[0,0], [1,0], [5,6]}

然后,如果匹配发生,该子集将被其ID替换,与原始集的其余部分合并,并且如果它是看到的图像,则需要检查新组合&# 39;:

{[z],[5, 6]}

所有这一切的要点是,使用最少的预先存在的片作为组件来匹配尽可能多的[x,y],以简洁地表示新看到的图像。获得与最大子集匹配的组件的贪婪解决方案并不正确。复杂性产生于我需要检查的所有组合,然后是从找到匹配产生的组合,这意味着如果某些匹配和交换产生{[z],[1,0],[2,0]} ,然后我需要检查(如果匹配,重复该过程):

{[z], [1,0]}
{[z], [2,0]}
{[1,0], [2,0]} which is {[0,0], [1,0]}
{[z], [1,0], [2,0]}

目前我以这种方式生成像素组合(这里我使用数字来表示像素1 == [x,y])Ex。 (1,2,3,4):制作3个列表:

1.)   2.)   3.)
12    23    34
13    24
14    

然后对于每个数字,对于从该数字索引+ 1开始的每个列表,连接数字和每个项目并存储在适当的列表中,例如。 (1 + 23)= 123,(1 + 24)= 124

1.)   2.)   3.)
12    23    34
13    24
14  
----  ----  ----
123   234
124   
134

所以这些是我需要检查的所有组合,如果它们在我看到的图像中#39;。这是完成整个过程的坏方法。我考虑过不同的变化/优化,包括生成列表的后半部分(在----下面),检查列表中的每个项目是否匹配,然后销毁列表以节省空间,然后继续生成组合。另一种选择是生成单个组合,然后检查它是否匹配,并以某种方式索引组合,以便您知道接下来要生成哪个组合。

有没有人认识到这个过程?你能帮我优化我为一组〜百万件物品所做的工作。我还没有提出一种非递归或有效的方法来处理每个匹配产生额外的组合来检查。

0 个答案:

没有答案
相关问题