81 lines
2.2 KiB
Python
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
|