Python已知平行四边形三个点求第四个点及四边形IOU计算详解
本文介绍如何利用Python计算已知平行四边形三个顶点求第四个点的方法,并详细解析计算任意四点构成四边形的面积、交集与并集,进而求解IOU(交并比)的完整流程。包含向量法、Shapely库对比及具体测试代码,适用于图像处理与几何算法场景。
已知三点求平行四边形第四点实现
直接查看代码实现部分。
import numpy as np
#已知平行四边形三个点,求第四个点
#计算两点之间的距离
def CalcEuclideanDistance(point1,point2):
vec1 = np.array(point1)
vec2 = np.array(point2)
distance = np.linalg.norm(vec1 - vec2)
return distance
#计算第四个点
def CalcFourthPoint(point1,point2,point3): #pint3为A点
D = (point1[0]+point2[0]-point3[0],point1[1]+point2[1]-point3[1])
return D
#三点构成一个三角形,利用两点之间的距离,判断邻边AB和AC,利用向量法以及平行四边形法则,可以求得第四个点D
def JudgeBeveling(point1,point2,point3):
dist1 = CalcEuclideanDistance(point1,point2)
dist2 = CalcEuclideanDistance(point1,point3)
dist3 = CalcEuclideanDistance(point2,point3)
dist = [dist1, dist2, dist3]
max_dist = dist.index(max(dist))
if max_dist == 0:
D = CalcFourthPoint(point1,point2,point3)
elif max_dist == 1:
D = CalcFourthPoint(point1,point3,point2)
else:
D = CalcFourthPoint(point2,point3,point1)
return D
print(JudgeBeveling((0,1),(1,0),(1,1)))
print(JudgeBeveling((5,39),(500,35),(496,17)))
四边形面积与IOU计算详解
补充知识:计算图像中任意四个点连成的四边形面积与Ground truth的IOU(Python)
四边形面积计算方法
1.先求任意四个点连成四边形的面积
该问题可通过示意图直观理解。

图像坐标布局如上图所示,核心思路是确定四个点构成的四条边界线,并判断像素点是否位于红色区域内。若像素点在红色区域内部,则计入面积,否则不计。首先需计算四条边的斜率。
def line_slope(x1,y1,x2,y2,x3,y3,x4,y4):
k1=(y2-y1)/(x2-x1)
k2=(y3-y2)/(x3-x2)
k3=(y4-y3)/(x4-x3)
k4=(y1-y4)/(x1-x4)
return k1,k2,k3,k4
随后计算每个位置上的各个函数值。
l1=int(tk1*(i-tx1)+ty1)
l2=int(tk2*(i-tx2)+ty2)
l3=int(tk3*(i-tx3)+ty3)
l4=int(tk4*(i-tx4)+ty4)
判断条件至关重要,由于左侧点的排列方式特定,因此判断条件设定为。
(l1<=j)&(l2>=j)&(l3>=j)&(l4<=j)
即红色区域内任意一点均需满足上述条件。定义一个全局变量,每当满足条件时加1,从而得出总面积。
实际上,计算面积并非最终目的。
交集与并面积求解
2.求相交的面积

在分别计算出两个四边形的面积后,求它们交集面积的最简便方法是对比两个区域的坐标数据。
具体做法是在分别计算两个面积时,记录符合条件的坐标(x,y)并存入数组,最后统计两个数组中相同元素的个数即可得到交集面积。
3.并面积
交集面积计算完成后,可使用以下公式(S1表示四边形1的面积、S2表示四边形2的面积、iu表示交面积)。
并面积=S1-iu+S2
4.IOU
交面积/并面积
测试验证与算法对比
5.测试
(1)

(2)

(3)

观察最后一种情况,红框已完全包含Ground truth,因此可以直接通过S2/S1来验证算法的准确性。
计算结果13882/19307=0.719013829181126,这证明了算法的准确性。
测试代码:链接
和别的算法进行比较
结果仍存在一定区别。
v2是向量方法计算
v3是shapely包计算
以上这篇python 已知平行四边形三个点,求第四个点的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













