假设我们有一个像上面那样的相框。 从中心开始,你怎么能找到一个可以用来绘制最大面积的矩形(矩形中的所有像素都必须是rgb(255,255,255)?
我需要找到图中所示的A点和B点的x和y坐标。
我的一种方法是这样做: 从中心开始,像上图一样扩展边界。 但我不知道你怎么能写出这样的循环。
答案 0 :(得分:2)
您应该使用填充算法:link。 我建议你使用集合来存储要在一组中改变的像素;这样可以减少要完成的递归次数。
编辑:我显然没有很好地阅读这个问题。如果你在扩展的圆圈上使用它,仍然可以使用洪水填充。
这个算法可能会给你一个可能的解决方案,但可能有多个,取决于你的框架 - 你应该开始使用一些简单的框架开发,可以很容易地判断解决方案的正确性。
编辑:根据评论,问题是在多边形中找到最大面积的轴平行矩形 - 幸运的是,有一篇论文:here。虽然看起来不是一件容易的事。
答案 1 :(得分:0)
我会在这里使用蛮力。选择y_bottom
和y_top
,确定相应的x_left
和x_right
,并在图片的宽度上循环y_bottom
和y_top
。在伪代码中:
for y_bottom in range (0, H):
for y_top in range (y_bottom, H):
# Assume that x = W/2 is part of the rectangle
x_left = maximum X such that all pixels in box (x_left, y_top, W/2, y_bottom) are white
x_right = minimum X such that all pixels in box (W/2, y_top, x_right, y_bottom) are white
determine Area of box (x_left, y_top, x_right, y_bottom)
store this box if Area is larger than max found so far