我正在做一个问题,它需要我计算两个正方形的重叠面积。这是程序的一部分,该程序将由几个正方形检测器单元/像素(阵列)组成的旋转检测器置于由几个(较小)正方形像素组成的输入图的顶部,并确定由检测器像素检测到的来自每个输入像素的光的百分比。我尝试过几何方法,但有太多可能的变化需要考虑。
一个正方形可以相对于另一个正方形旋转任意角度,并且两个正方形的大小可以不同。给定的参数是输入地图上检测器像素的中心坐标、检测器像素的大小(默认情况下,输入像素的大小等于1)和旋转角度。
编辑:添加草图以澄清
Sketch
所以我要做的是计算每个输入像素(黑色方块)在给定的检测器像素(红色方块)内的部分,它可以是0到1之间的任何地方。然后可以乘以输入像素的值,并对所有输入像素求和,以计算检测器像素收集的总光线。
我尝试使用的几何方法是计算检测器像素边缘的斜率,并使用与输入像素边缘的交集来计算总重叠。
发布于 2012-02-21 00:27:40
如果我没理解错的话,你所做的等同于试图在灰度位图上找到重叠的方块?如果是这样的话,你可以做角点检测,并尝试从检测到的角点制作正方形,然后计算检测到的方块上的重叠?这个opencv示例可能是一个很好的起点:https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/python/squares.py?rev=907
如果我误解了问题(例如,我对旋转角度感到困惑),请提前道歉。
发布于 2012-02-21 00:42:50
下面是我用来做这件事的步骤。
要旋转点,您将使用如下所示的函数:
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_primehttps://stackoverflow.com/questions/9364332
复制相似问题