在大型稀疏矩阵中查找子凹陷矩阵的所有矩形

时间:2013-01-19 06:46:25

标签: algorithm math matrix

这是图像处理算法的一部分,其中需要更多优化。 我们有一个由0和1组成的大型稀疏矩阵。在这个稀疏矩阵中,存在一个或多个1的密集区域。假设整个矩阵表示图像,0表示非视频区域,1表示视频区域。基本上所有附近的1应该组合在一起,以找出更近似的视频区域。因此,在所有1周围绘制边界将在图像中给出精确的视频区域。

enter image description here

如上面的0和1的矩阵所示。有4个密集区域的1。我们尝试了一种天真的方法,它具有更多的时间复杂性和预期的进一步改进。

我们尝试的方法是,如果块中的1的数量高于某个阈值,则将块大小为3 * 3或2 * 2的所有0进行转换。但即使这种方法也没有给我们视频块的确切边界。

因此,寻找一种在时间和空间复杂性方面都很好的更好的算法。实际上,这种计算需要实时完成,因此算法必须具有非常少的时间复杂度。如果我们能够在O(n)线性时间内实现,那将是很好的。

1 个答案:

答案 0 :(得分:1)

这里通常的方法是应用扫描线算法。

基本上,它的工作原理如下:查看每一列。如果它由全零组成,请转到下一列。如果它包含1,则保存最小和最大的垂直位置(它们可能是矩形坐标的候选者)。当您进一步移动扫描线时,相应地调整候选者。如果您找到候选者并且到达由全零组成的行,则您的坐标候选者是矩形的实际坐标。

您也可以(或另外)垂直扫描并检查行而不是列。

根据矩阵(或任务)的属性,有许多不同的可能解决方案。考虑以下矩阵:

1 1 1
1 1 1
1 1 1

它包含多少个矩形? 1? 9? 4?

在您的示例中,两个触摸矩形也可以视为一个较大矩形的一部分。

一些建议:更清楚地陈述你的问题。