2012-02-20 50 views
2

我正在研究一个问题,该问题需要我计算两个正方形的重叠区域。 这是一个程序的一部分,它将由几个正方形检测器单元/像素(阵列)组成的旋转检测器放置在由多个(较小)正方形像素组成的输入图上,并确定每个输入像素发出的光的百分比探测器像素。 我试过了一种几何方法,但有很多可能的变化来解释。确定检测器系统中旋转正方形的重叠

一个正方形可以相对于另一个正方形旋转一个随机角度,并且两个正方形可以具有不同的尺寸。给出的参数是输入映射上探测器像素的中心坐标,探测器像素的大小(默认情况下输入像素的大小等于1)和旋转角度。

编辑:增加了一个草图,以澄清

Sketch

那么我现在要做的是计算它位于一个给定的探测器像素中的每一个输入像素的一部分(黑方块)(红色正方形),其可以在0到1之间的任何地方。 然后,这可以与输入像素的值相乘并且在所有输入像素上求和以计算由检测器像素收集的总光。

我尝试使用的几何方法是计算探测器像素边缘的斜率,并使用与输入像素边缘的相交来计算总重叠。

回答

0

如果我正确理解你正在做什么等于试图在灰度位图上查找重叠方块?如果是这样,你可以做角点检测,并尝试从检测到的角落做出正方形,然后计算检测到的正方形的重叠?这个opencv示例可能是一个很好的起点:https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/python/squares.py?rev=907

如果我误解了这个问题(例如,我被旋转角度困惑),提前道歉。

+0

不是真的。我已经添加了一个问题的草图来阐明旋转角度等。 – fungku 2012-02-20 17:02:11

0

下面是我将用来做到这一点的步骤。

  1. 确保您有两个方块角的坐标。
  2. 平方
  3. 旋转的两个正方形的角以便平行在步骤拾取平方一个已侧面与x轴和y轴
  4. 检查是否cordinates其他的角正方形在第一个里面。由于旋转了,这与检查x坐标是否位于左侧和右侧之间以及y坐标位于顶部和底部之间一样简单。

要旋转点,你会使用一个函数是这样的:

from math import sin, cos, radians 

def rotate_points(x, y, angle): 
    """Rotate a set of points `angle` degrees counterclockwise about 
    the origin. 
    """ 
    theta = radians(angle) 
    x_prime = x * cos(theta) - y * sin(theta) 
    y_prime = x * sin(theta) + y * cos(theta) 
    return x_prime, y_prime 
+0

这确实会检查是否有可能重叠,但是我需要能够计算总重叠。 – fungku 2012-02-20 17:00:33