Python已知平行四边形三个点求第四个点及四边形IOU计算详解

林见深
林见深
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍如何利用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 已知平行四边形三个点,求第四个点的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表