Looping autofocus on failed smart stack
This commit is contained in:
parent
3e164102f6
commit
712f524414
1 changed files with 10 additions and 19 deletions
|
|
@ -12,8 +12,6 @@ import logging
|
||||||
import time
|
import time
|
||||||
from typing import Annotated, Mapping, Optional, Sequence
|
from typing import Annotated, Mapping, Optional, Sequence
|
||||||
import os
|
import os
|
||||||
import shutil
|
|
||||||
import glob
|
|
||||||
|
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
@ -297,6 +295,7 @@ class AutofocusThing(Thing):
|
||||||
metadata_getter: GetThingStates,
|
metadata_getter: GetThingStates,
|
||||||
capture: CaptureDep,
|
capture: CaptureDep,
|
||||||
images_dir: str,
|
images_dir: str,
|
||||||
|
sharpness_monitor: SharpnessMonitorDep,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Run a z stack, saving all images to stack_dir and copying the
|
"""Run a z stack, saving all images to stack_dir and copying the
|
||||||
central image to stack_dir"""
|
central image to stack_dir"""
|
||||||
|
|
@ -355,9 +354,16 @@ class AutofocusThing(Thing):
|
||||||
sharpnesses = []
|
sharpnesses = []
|
||||||
heights = []
|
heights = []
|
||||||
capture_count = 0
|
capture_count = 0
|
||||||
stage.move_absolute(
|
stage.move_absolute(z=starting_height - stack_z_range)
|
||||||
z=starting_height - stack_dz * (images_to_test - 1)
|
self.looping_autofocus(
|
||||||
|
stage=stage,
|
||||||
|
sharpness_monitor=sharpness_monitor,
|
||||||
|
dz=2000,
|
||||||
)
|
)
|
||||||
|
stage.move_relative(
|
||||||
|
z=-(overshoot + backlash_correction + stack_z_range / 2)
|
||||||
|
)
|
||||||
|
stage.move_relative(z=backlash_correction)
|
||||||
stage.move_relative(z=stack_dz)
|
stage.move_relative(z=stack_dz)
|
||||||
|
|
||||||
sharpest_index = np.argmax(sharpnesses[-images_to_test:])
|
sharpest_index = np.argmax(sharpnesses[-images_to_test:])
|
||||||
|
|
@ -370,21 +376,6 @@ class AutofocusThing(Thing):
|
||||||
|
|
||||||
return heights[-images_to_test:][sharpest_index]
|
return heights[-images_to_test:][sharpest_index]
|
||||||
|
|
||||||
def copy_central_image_from_stack(
|
|
||||||
self,
|
|
||||||
images_dir: str,
|
|
||||||
stack_dir: str,
|
|
||||||
):
|
|
||||||
"""Gets a list of images in a folder (stack_dir), sorts them, and copies the central image
|
|
||||||
to images dir."""
|
|
||||||
image_list = glob.glob(os.path.join(stack_dir, "*"))
|
|
||||||
image_list.sort()
|
|
||||||
central_index = (len(image_list) - 1) // 2
|
|
||||||
central_image = image_list[central_index]
|
|
||||||
xy_location = os.path.basename(stack_dir)
|
|
||||||
|
|
||||||
shutil.copy(central_image, os.path.join(images_dir, f"{xy_location}.jpeg"))
|
|
||||||
|
|
||||||
def test_stack(self, sharpnesses: list):
|
def test_stack(self, sharpnesses: list):
|
||||||
"""Test a list of sharpnesses, to decide whether the focal plane is within them"""
|
"""Test a list of sharpnesses, to decide whether the focal plane is within them"""
|
||||||
sharpest_index = np.argmax(sharpnesses)
|
sharpest_index = np.argmax(sharpnesses)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue