我有2个位图图像,其中1是另一个的略微变化。 现在我想尽可能快地计算变化区域的边界框。 有没有一个聪明的算法可以做到这一点,还是只是一个暴力处理的情况?
编辑: 图像将是screencaptures。我想找到更改区域的最小边界框,如“在此框之外没有任何变化”。
答案 0 :(得分:1)
如果你只想要一个边界框,你绝对可以比“强力”(总是检查所有像素,2 * w * h操作)做得更好,至少如果图像之间有任何差异。只需从4个不同的边框开始查找4个不同的行/列像素。伪代码:
bounding_box_y1 = -1;
loop y = 1..h {
loop x = 1..w {
if image1(x,y) != image2(x,y) {
bounding_box_y1 = y
exit loops
}
}
}
上面的伪代码遍历图像行,从顶行开始直到找到不同的像素,返回bounding_box_y1
。只需再添加3个循环(从底部开始的行=> bounding_box_y2
,从左开始的列=> bounding_box_x1
,从右边开始的列=> bounding_box_x2
)并且您将拥有以下坐标:你的边界框。
此算法仍然对相同的图像执行2 * w * h操作(请注意,在这种情况下,bounding_box_y1
将保留-1
并且您可以跳过额外的3个循环),但会更快如果图像有差异(在最佳情况下仅检查4个角像素)。