算法 : How to highlight image difference using rectangles?

标签 algorithm image-compression

我需要比较两个图像并创建差异矩形。我可以像这样构建差异矩阵:

0  0  0  0  0  0  0  0 
0  0  0  0  0  1  1  1 
0  0  0  1  0  0  0  0 
0  0  0  0  0  0  0  0 
0  0  0  0  1  0  0  0 
0  0  0  0  0  1  0  0 
0  0  0  0  1  1  1  0 
0  0  0  0  1  1  0  0

其中 1 是差异像素。我需要找到为图像差异区域创建矩形的方法。在我的示例中,我要突出显示三个区域。

# # #
# 1 #
# # #

#  #  #  # 
#  1  1  1 
#  #  #  #

#  #  #  #  #
#  1  0  0  # 
#  0  1  0  # 
#  1  1  1  # 
#  1  1  0  #

所以我正在寻找一种算法来以方便的方式做到这一点。

最佳答案

我假设问题如下。给定一个 0/​​1 矩阵,用不相交的矩形覆盖包含 1 的区域(即矩形不能相交)。特别是,非矩形形状(例如 L 形多米诺骨牌)是不允许的。

这里有一个算法的想法:

  • 从原点开始,在索引 (0,0) 处扩展,直到扩展区域包含单个 1 矩形,您无法通过移动来放大该矩形到任一方向的相邻单元格。
  • 将该矩形添加到集合中,并删除处理过的区域;
  • 递归剩余的单元格。

运行时间应与单元格数量成线性关系;但是,根据输出类型是否有其他规范,您可能需要更改第一步。

我很喜欢这个问题。请注意,一个问题实例可能存在许多不同的解决方案。一个自然的变化是需要一个由尽可能少的矩形组成的覆盖层(即最小覆盖层);在这种情况下,也可能存在许多不同的解决方案。 (从复杂性理论的角度来看,问题的计数版本看起来很有趣。)

关于算法 : How to highlight image difference using rectangles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38870384/

相关文章:

c - 我对 C 中的数组有疑问(Hackerearth - 查找产品)

制作半色调图像的算法?

java - 在将图像上传到 Firebase 存储之前压缩图像

android - 由于高分辨率图像导致应用程序崩溃

angular - angular4中图片上传中的图片压缩

javascript - 在 NodeJS 中压缩视频文件

macos - OSX : Execute same command on all files within a folder

获取基于 (-2) 的二进制位的算法

python - 如何从字典中构建比蛮力更好的 Plinko 单词板?

algorithm - 计算给定总和的子集的有效方法