|
5 | 5 | from skimage.filters import laplace, sobel_h, sobel_v |
6 | 6 |
|
7 | 7 |
|
8 | | -def _ensure_f32_2d(x: np.ndarray) -> np.ndarray: |
| 8 | +def _to_f32_2d(x: np.ndarray) -> np.ndarray: |
9 | 9 | if x.ndim != 2: |
10 | 10 | raise ValueError("block must be 2D") |
11 | 11 | return np.ascontiguousarray(x.astype(np.float32, copy=False)) |
12 | 12 |
|
13 | 13 |
|
14 | 14 | def _tenengrad_mean(block: np.ndarray) -> np.ndarray: |
15 | 15 | """Mean Tenengrad energy (sum of squared Sobel gradients).""" |
16 | | - b = _ensure_f32_2d(block) |
| 16 | + b = _to_f32_2d(block) |
17 | 17 | energy = sobel_h(b) ** 2 + sobel_v(b) ** 2 |
18 | 18 | return np.array([[float(energy.mean())]], dtype=np.float32) |
19 | 19 |
|
20 | 20 |
|
21 | 21 | def _laplacian_variance(block: np.ndarray) -> np.ndarray: |
22 | 22 | """Population variance of Laplacian response.""" |
23 | | - b = _ensure_f32_2d(block) |
| 23 | + b = _to_f32_2d(block) |
24 | 24 | lap = laplace(b) |
25 | 25 | var_val = float(np.var(lap)) |
26 | 26 | return np.array([[max(var_val, 0.0)]], dtype=np.float32) |
27 | 27 |
|
28 | 28 |
|
29 | 29 | def _pop_variance(block: np.ndarray) -> np.ndarray: |
30 | 30 | """Population variance of pixel intensities.""" |
31 | | - b = _ensure_f32_2d(block) |
| 31 | + b = _to_f32_2d(block) |
32 | 32 | return np.array([[float(np.var(b))]], dtype=np.float32) |
33 | 33 |
|
34 | 34 |
|
35 | 35 | def _fft_high_freq_energy(block: np.ndarray) -> np.ndarray: |
36 | | - x = _ensure_f32_2d(block).astype(np.float64, copy=False) |
| 36 | + x = _to_f32_2d(block).astype(np.float64, copy=False) |
37 | 37 | m = float(x.mean()) |
38 | 38 | s = float(x.std()) |
39 | 39 | x = (x - m) / s if s > 0.0 else (x - m) |
@@ -63,7 +63,7 @@ def _fft_high_freq_energy(block: np.ndarray) -> np.ndarray: |
63 | 63 |
|
64 | 64 | def _haar_wavelet_energy(block: np.ndarray) -> np.ndarray: |
65 | 65 | """Detail-band (LH+HL+HH) energy ratio of a single-level Haar transform.""" |
66 | | - x = _ensure_f32_2d(block).astype(np.float64, copy=False) |
| 66 | + x = _to_f32_2d(block).astype(np.float64, copy=False) |
67 | 67 | m = float(x.mean()) |
68 | 68 | s = float(x.std()) |
69 | 69 | x = (x - m) / s if s > 0.0 else (x - m) |
|
0 commit comments