Source code for optika.targets._airforce._airforce

import pathlib
import matplotlib.pyplot as plt
import pymupdf
import named_arrays as na

__all__ = [
    "airforce",
]


[docs] def airforce( axis_x: str, axis_y: str, num_x: int = 1000, num_y: int = 1000, ) -> na.ScalarArray: """ A `1951 USAF resolution test target <https://en.wikipedia.org/wiki/1951_USAF_resolution_test_chart>`_ used for testing the performance of optical systems. Parameters ---------- axis_x: The name of the horizontal axis. axis_y: The name of the vertical axis. num_x: The number of pixels along the horizontal axis. num_y: The number of pixels along the vertical axis. Examples -------- Load and display the test target .. jupyter-execute:: import matplotlib.pyplot as plt import named_arrays as na import optika # Load the test target target = optika.targets.airforce("x", "y") # Display the test target fig, ax = plt.subplots(constrained_layout=True) na.plt.pcolormesh(C=target); """ path = pathlib.Path(__file__).parent / "USAF-1951.svg" doc = pymupdf.open(path) page = doc[0] zoom_x = num_x / page.rect.width zoom_y = num_y / page.rect.height mat = pymupdf.Matrix(zoom_x, zoom_y) pix = page.get_pixmap(matrix=mat) fn = "tmp.png" pix.save(fn) img = plt.imread(fn) img = img.astype(float)[::-1].sum(~0) img = img / img.max() img = -img + 1 return na.ScalarArray( ndarray=img, axes=(axis_y, axis_x), )