File size: 859 Bytes
0e39d80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
31
import cv2
import numpy as np

from ml_utils.confidence import EDGE_MAX


def edge_inconsistency_score(image_bgr: np.ndarray) -> tuple[float, list[str]]:
    flags = []
    gray = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2GRAY)
    h, w = gray.shape
    block = 48
    densities = []

    for y in range(0, h - block, block):
        for x in range(0, w - block, block):
            patch = gray[y : y + block, x : x + block]
            edges = cv2.Canny(patch, 50, 150)
            densities.append(float(np.mean(edges > 0)))

    if len(densities) < 2:
        return EDGE_MAX * 0.5, flags

    std_d = float(np.std(densities))
    if std_d > 0.12:
        flags.append("EDGE_INCONSISTENCY")
        score = max(5.0, EDGE_MAX - std_d * 100)
    else:
        score = (EDGE_MAX - 5.0) + (0.12 - std_d) * 33

    return float(np.clip(score, 0, EDGE_MAX)), flags