我正在研究一个问题,需要我计算两个方格的重叠区域。 这是一个程序的一部分,该程序将由几个方形检测器单元/像素(阵列)组成的旋转检测器放置在由几个(较小)方形像素组成的输入图上,并确定检测器检测到的每个输入像素的光百分比像素。 我尝试过几何方法,但是有很多可能的变化需要考虑。
一个正方形可以相对于另一个正方形旋转,并且两个正方形可以具有不同的尺寸。给出的参数是输入图上的检测器像素的中心坐标,检测器像素的大小(输入像素的大小默认等于1)和旋转角度。
编辑:添加草图以澄清
所以我要做的是计算每个输入像素(黑色方块)的一部分,它位于给定的探测器像素(红色方块)内,可以是介于0和1之间的任何位置。 然后可以将其与输入像素的值相乘,并在所有输入像素上求和,以计算探测器像素收集的总光。
我尝试使用的几何方法是计算探测器像素边缘的斜率,并使用与输入像素边缘的交点来计算总重叠。
答案 0 :(得分:0)
如果我正确理解你正在做什么相当于试图在灰度位图上找到重叠的方块?如果是这样,你可以进行角点检测,并尝试从检测到的角点制作方块,然后计算检测到的方块上的重叠吗?这个opencv示例可能是一个很好的起点:https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/python/squares.py?rev=907
如果我误解了这个问题(例如我对旋转角度感到困惑),请提前道歉。
答案 1 :(得分:0)
以下是我将要执行此操作的步骤。
要旋转点,您将使用如下函数:
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