Merge branch 'master' into auto-exposure-gain-awb
This commit is contained in:
commit
1f1a75c02a
13 changed files with 1848 additions and 167 deletions
|
|
@ -127,20 +127,20 @@ def monitor_sharpness(microscope: Microscope):
|
|||
m.stop()
|
||||
|
||||
|
||||
def sharpness_sum_lap2(rgb_image: np.ndarray) -> np.float:
|
||||
def sharpness_sum_lap2(rgb_image: np.ndarray) -> float:
|
||||
"""Return an image sharpness metric: sum(laplacian(image)**")"""
|
||||
image_bw: np.float = np.mean(rgb_image, 2)
|
||||
image_lap: np.float = ndimage.filters.laplace(image_bw)
|
||||
return np.mean(image_lap.astype(np.float) ** 4)
|
||||
image_bw = np.mean(rgb_image, 2)
|
||||
image_lap = ndimage.filters.laplace(image_bw)
|
||||
return float(np.mean(image_lap.astype(float) ** 4))
|
||||
|
||||
|
||||
def sharpness_edge(image: np.ndarray) -> np.float:
|
||||
def sharpness_edge(image: np.ndarray) -> float:
|
||||
"""Return a sharpness metric optimised for vertical lines"""
|
||||
gray: np.float = np.mean(image.astype(float), 2)
|
||||
gray = np.mean(image.astype(float), 2)
|
||||
n: int = 20
|
||||
edge: np.ndarray = np.array([[-1] * n + [1] * n])
|
||||
return np.sum(
|
||||
[np.sum(ndimage.filters.convolve(gray, W) ** 2) for W in [edge, edge.T]]
|
||||
return float(
|
||||
np.sum([np.sum(ndimage.filters.convolve(gray, W) ** 2) for W in [edge, edge.T]])
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -169,7 +169,7 @@ class AutofocusExtension(BaseExtension):
|
|||
|
||||
def measure_sharpness(
|
||||
self, microscope: Microscope, metric_fn: Callable = sharpness_sum_lap2
|
||||
) -> np.float:
|
||||
) -> float:
|
||||
"""Measure the sharpness of the camera's current view."""
|
||||
|
||||
if hasattr(microscope.camera, "array") and callable(
|
||||
|
|
@ -185,7 +185,7 @@ class AutofocusExtension(BaseExtension):
|
|||
dz: List[int],
|
||||
settle: float = 0.5,
|
||||
metric_fn: Callable = sharpness_sum_lap2,
|
||||
) -> Tuple[List[int], List[np.float]]:
|
||||
) -> Tuple[List[int], List[float]]:
|
||||
"""Perform a simple autofocus routine.
|
||||
The stage is moved to z positions (relative to current position) in dz,
|
||||
and at each position an image is captured and the sharpness function
|
||||
|
|
@ -197,7 +197,7 @@ class AutofocusExtension(BaseExtension):
|
|||
stage: BaseStage = microscope.stage
|
||||
|
||||
with set_properties(stage, backlash=256), stage.lock, camera.lock:
|
||||
sharpnesses: List[np.float] = []
|
||||
sharpnesses: List[float] = []
|
||||
positions: List[int] = []
|
||||
|
||||
# Some cameras may not have annotate_text. Reset if it does
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ def lst_from_channels(channels: np.ndarray) -> np.ndarray:
|
|||
|
||||
logging.info("Generating a lens shading table at %sx%s", *lst_resolution)
|
||||
lens_shading: np.ndarray = np.zeros(
|
||||
[channels.shape[0]] + lst_resolution, dtype=np.float
|
||||
[channels.shape[0]] + lst_resolution, dtype=float
|
||||
)
|
||||
for i in range(lens_shading.shape[0]):
|
||||
image_channel: np.ndarray = channels[i, :, :]
|
||||
|
|
@ -297,7 +297,7 @@ def recalibrate_camera(camera: PiCamera):
|
|||
_ = rgb_image(camera)
|
||||
|
||||
# Fix the AWB gains so the image is neutral
|
||||
channel_means = np.mean(np.mean(rgb_image(camera), axis=0, dtype=np.float), axis=0)
|
||||
channel_means = np.mean(np.mean(rgb_image(camera), axis=0, dtype=float), axis=0)
|
||||
old_gains = camera.awb_gains
|
||||
camera.awb_gains = (
|
||||
channel_means[1] / channel_means[0] * old_gains[0],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue