Files
AareCommon/tests/test_autofocus_tools.py

81 lines
2.2 KiB
Python

import numpy as np
from aarecommon.math.autofocus import focus_measure_blob_size, focus_measure_edges
def test_focus_measure_edges_all_zeros():
gray = np.zeros((100, 100), dtype=np.uint8)
assert focus_measure_edges(gray) == 0.0
def test_focus_measure_edges_sharp_vs_blurry():
# Sharp image (large blocks to survive GaussianBlur)
sharp = np.zeros((100, 100), dtype=np.uint8)
sharp[:, 0:50] = 255
# Blurry image (flat)
blurry = np.full((100, 100), 128, dtype=np.uint8)
fm_sharp = focus_measure_edges(sharp, verbose=True)
fm_blurry = focus_measure_edges(blurry)
assert fm_sharp > fm_blurry
assert fm_blurry == 0.0
def test_focus_measure_edges_with_mask():
gray = np.zeros((100, 100), dtype=np.uint8)
gray[40:60, 40:60] = 255
mask = np.zeros((100, 100), dtype=bool)
mask[40:60, 40:60] = True
fm_with_mask = focus_measure_edges(gray, mask=mask)
assert fm_with_mask > 0
empty_mask = np.zeros((100, 100), dtype=bool)
assert focus_measure_edges(gray, mask=empty_mask) == 0.0
def test_focus_measure_edges_verbose(capsys):
gray = np.zeros((100, 100), dtype=np.uint8)
gray[40:60, 40:60] = 255
mask = np.ones((100, 100), dtype=bool)
focus_measure_edges(gray, mask=mask, verbose=True)
captured = capsys.readouterr()
assert "focus=" in captured.out
def test_focus_measure_blob_size_all_zeros():
gray = np.zeros((100, 100), dtype=np.uint8)
assert focus_measure_blob_size(gray) == 0.0
def test_focus_measure_blob_size_sharp_vs_blurry():
# Small sharp blob
sharp = np.zeros((100, 100), dtype=np.uint8)
sharp[50, 50] = 255
# Larger blurry blob
blurry = np.zeros((100, 100), dtype=np.uint8)
blurry[45:55, 45:55] = 255
fm_sharp = focus_measure_blob_size(sharp)
fm_blurry = focus_measure_blob_size(blurry)
assert fm_sharp > fm_blurry
def test_focus_measure_blob_size_with_mask():
gray = np.zeros((100, 100), dtype=np.uint8)
gray[50, 50] = 255
mask = np.zeros((100, 100), dtype=bool)
mask[50, 50] = True
fm_with_mask = focus_measure_blob_size(gray, mask=mask)
assert fm_with_mask > 0
empty_mask = np.zeros((100, 100), dtype=bool)
assert focus_measure_blob_size(gray, mask=empty_mask) == 0.0