目录
处理文本检测数据时,遇到icdar2015数据集标注的顶点排序混乱问题,需要重新排序。确保排序后的顶点是:左上角开始,顺序存储。
1. 排序后从左下角开始顺时针存储
思路:安装x值顺序排序,分为两组,前两个是left,后两个是right. 然后left按y值逆序排序,right顺序排序。
1.1 python
def order_points_ld(pts):
"""
左下角开始
sort rectangle points by clockwise
"""
sort_x = pts[np.argsort(pts[:, 0]), :] # 按x方向进行一次排序后分为两组顶点,.后两个为一组Right。
Left = sort_x[:2, :]
Right = sort_x[2:, :]
# Left sort
Left = Left[np.argsort(Left[:, 1])[::-1], :] # 左边y值是逆序排序([::-1]), 因为是左下角开始存储。
# Right sort
Right = Right[np.argsort(Right[:, 1]), :]
return np.concatenate((Left, Right), axis=0)
if __name__ == '__main__':
pts = np.array([[332, 374], [313, 370], [313, 270], [332, 174]])
order_points_lu(pts)
2. 排序后从左上角开始顺时针存储
思路:安装y值顺序排序,分为两组,前两个是up,后两个是down. 然后up按x值顺序排序,down逆序排序。
2.1 python
def order_points_lu(pts):
"""
左上角开始
sort rectangle points by clockwise
"""
sort_y = pts[np.argsort(pts[:, 1]), :] # 按y方向进行一次排序后分为两组顶点,前两个为一组Up,后两个为一组Down。
up = sort_y[:2, :]
down = sort_y[2:, :]
# up sort
up = up[np.argsort(up[:, 0]), :] # 上边x值是顺序排序([::-1]), 因为是从左上角开始存储。
# down sort
down = down[np.argsort(down[:, 0])[::-1], :]
if __name__ == '__main__':
pts = np.array([[332, 374], [313, 370], [313, 270], [332, 174]])
order_points_lu(pts)
效果: