CV | 矩形度的计算(python)

简介

在做跟踪匹配的时候,由于目标的形状不能保持,有可能会存在上下两帧目标图像形状不能一直保持矩形的情况,因此没有利用形状信息进行目标跟踪。但是又不想浪费形状信息,因此利用矩形度特征进行加权。

从网上查找没有找到类似的程序,只看到了矩形度的概念。在此补充程序(python版)。

1.矩形度概念

矩形度体现物体对其外接矩形的充满程度,反映一个物体与矩形相似程度的一个参数,是矩形拟合因子。其计算公式为:
R = S 0 / S M E R R =S_0 / S_{MER} R=S0/SMER

其中, S 0 S_0 S0 是该物体的面积,而 S M E R S_{MER} SMER 是其最小外接矩形的面积。 R R R 反映了一个物体对其的充满程度。对于矩形物体 R R R取得最大值1,对于圆形物体 R R R 取值为 ,对于纤细、弯曲的物体 R R R取值变小。矩形拟合因子的值为 0 − 1 0-1 01.

源自:
https://blog.csdn.net/mao_hui_fei/article/details/80395294

2. 程序

计算矩形度程序如下:

import cv2
import numpy as np

def Cal_Rectangle_degree(img_ori, hull):

    # 计算该坐标点组成的四边形的面积
    im = np.zeros(img_ori.shape[:2], dtype="uint8")  
    filling_image = np.array([hull[0][0],hull[1][0],hull[2][0],hull[3][0]], np.int32)
    polygon_mask = cv2.fillPoly(im, [filling_image], 255)
    measure_polygon = np.sum(np.greater(polygon_mask, 0))

    # 计算该坐标点组成的四边形的外接矩形面积
    rect = cv2.minAreaRect(hull)  # 得到最小外接矩形的(中心(x,y), (宽,高), 旋转角度)
    box = cv2.boxPoints(rect)  # 获取最小外接矩形的4个顶点坐标(ps: cv2.boxPoints(rect) for OpenCV 3.x)
    box = np.int0(box)
    box = cv2.convexHull(box,clockwise=True)
    filling_image = np.array([box[0][0],box[1][0],box[2][0],box[3][0]], np.int32)
    rectangle_mask = cv2.fillPoly(im, [filling_image], 255)
    measure_rectangle = np.sum(np.greater(rectangle_mask, 0))

    # 计算矩形度
    Rectangle_degree = measure_polygon/measure_rectangle

    return Rectangle_degree
    
img_ori = *** # 源图像
hull = *** # hull为凸包顶点坐标:n*1*2(n为坐标点的个数)

Rectangle_degree = Cal_Rectangle_degree(img_ori, hull)  # 矩形度指标

计算完矩形度后,将矩形度作为特征值,对预估和检测的结果进行加权,得到最终的位置。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值