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