File size: 1,084 Bytes
d667566
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
"""Classical difference baseline — the floor every learned model must beat.

Measured on the first 40 training pairs: recall 0.57, precision 0.015, F1 0.03.
"""
from __future__ import annotations

import cv2
import numpy as np

from .preprocess import load_prepared


def baseline_pair(split: str, idx: int, diff_thr: float = 25.0, min_area: int = 12,
                  prep_root=None):
    _, _, tn, pn = load_prepared(split, idx, prep_root)
    diff = np.abs(pn.astype(np.float32) - tn.astype(np.float32))
    mask = (diff > diff_thr).astype(np.uint8)
    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, np.ones((3, 3), np.uint8))
    n, _, stats, _ = cv2.connectedComponentsWithStats(mask, 8)
    boxes, scores = [], []
    for i in range(1, n):
        x, y, w, h, area = stats[i]
        if area < min_area:
            continue
        boxes.append([x, y, x + w, y + h])
        scores.append(min(1.0, area / 200.0))
    if not boxes:
        return np.zeros((0, 4), np.float32), np.zeros(0, np.float32)
    return np.asarray(boxes, np.float32), np.asarray(scores, np.float32)