Files
AareDAQ/tests/unit/common/test_autofocus_tools.py
appleb_m 6f44da0078
Build and Publish / test (push) Failing after 1m4s
Build and Publish / build (push) Has been skipped
Build and Publish / Build and Deploy Docs (push) Has been skipped
tests: added tests for aerotech, models, autofocus, automation, beamline, diffraction_geometry, enum_pv, face_detection_find_xtal, jfjoch_client, mlbox, my_motor, spreadsheet_updater and worfkflows
2026-04-28 14:35:54 +02:00

75 lines
2.3 KiB
Python

import numpy as np
import pytest
from aare.common.autofocus_tools import focus_measure_edges, focus_measure_blob_size
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