def METHOD_NAME(self, previous_bboxs, now_bboxs):
    def iou(rec1, rec2):
        # computing area of each rectangles
        S_rec1 = (rec1[2] - rec1[0]) * (rec1[3] - rec1[1])
        S_rec2 = (rec2[2] - rec2[0]) * (rec2[3] - rec2[1])
        # computing the sum_area
        sum_area = S_rec1 + S_rec2
        # find the each edge of intersect rectangle
        x1 = max(rec1[0], rec2[0])
        y1 = max(rec1[1], rec2[1])
        x2 = min(rec1[2], rec2[2])
        y2 = min(rec1[3], rec2[3])
        # judge if there is an intersect
        intersect = max(0, x2 - x1) * max(0, y2 - y1)
        return intersect / (sum_area - intersect)
    if previous_bboxs is None:
        return now_bboxs
    result = []
    for i in range(now_bboxs.shape[0]):
        contain = False
        for j in range(previous_bboxs.shape[0]):
            if iou(now_bboxs[i], previous_bboxs[j]) > self.iou_thres:
                result.append(self.smooth(now_bboxs[i], previous_bboxs[j]))
                contain = True
                break
        if not contain:
            result.append(now_bboxs[i])
    return np.array(result)