【问题标题】:Find all rectangles of sub densed matrix in a large sparse matrix在大型稀疏矩阵中查找子密集矩阵的所有矩形
【发布时间】:2013-01-19 06:46:25
【问题描述】:

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

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

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

所以寻找一种在时间和空间复杂度上都很好的更好的算法。实际上这个计算需要实时完成,所以算法的时间复杂度必须非常低。如果我们能在 O(n) 线性时间内实现,那就太好了。

【问题讨论】:

  • 很高兴你发布你的家庭作业,但是你做了什么?
  • 这不是家庭作业。我正在寻找的只是一种方法。我能做到的实现。我尝试了飞利浦建议的扫描线算法,经过一些编辑后它可以正常工作。谢谢@philips

标签: algorithm math matrix


【解决方案1】:

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

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

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

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

1 1 1
1 1 1
1 1 1

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

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

一些建议:更清楚地说明您的问题。

【讨论】:

  • 在上述场景中,整个矩阵代表我们的桌面屏幕区域。其中 1 代表正在渲染某些动画或视频的区域,而 0 代表所有其他区域。 1 之间的所有 0 实际上只是动画或视频,但不是暂时的,因为运动较少。因此,通过检测 1 中的所有 0,我们可以确保这些临时区域为动画或视频。这就是我们需要检测边界矩形的原因。
  • 是的,菲利普在您展示的矩阵中将其视为 1。
猜你喜欢
  • 2014-03-06
  • 2016-06-25
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
相关资源
最近更新 更多