-
[Project_AF] 자동초점 현미경 개발기 (8) - 함수제작-3 [자동초점]Ort Lab 2020. 4. 13. 23:55
지난 3월 9일이후 거의 1달만이네요. 코로나 조심들 하시고.. 학교 못가시는 학생분들 파이팅...
쨋든...
자동초점을 위해서 1~7편까지 왔네요. 8에서는 자동초점 기능을 구현합니다.
현미경의 조동나사를 회전시킬 모터는 42각 스텝모터를 사용하는데 그 이유는 1 fullstep에 1.8도를 회전하기 때문에 제어에 용이해서입니다.
근데 지금생각해보니 자동초점 함수 제작 보다는 하드웨어를 먼저 쓰는게 나았던거 같긴한데 고치기 귀찮음으로 그냥 지나갑시다.자동 초점은 다음과 같은 방식으로 작동합니다.
왼쪽은 현재 재물대의 높이(맨위가 렌즈쪽)이고, 오른쪽은 카메라에서 실시간으로 계산한 Definition(선명도)입니다.
1차적으로 붉은색으로 표시된 화살표대로 쭉 내려가며 스캔을 진행합니다. 이 스캔에서는 현재 높이에 대한 Definition값을 리스트에 저장합니다. 그 이후 계산을 통해 Definition값이 최대로 나오는 높이를 계산하고, 그 높이까지 제물대를 움집입니다(초록색 화살표).
그래프를 잘 보면 세로축이 step이라고 되어있는데, 이 step은 스텝모터의 step을 의미합니다.
스텝모터는 1 fullstep에 1.8도를 회전하는데, step이 0~99라는 것은 총 180도를 회전한다는 것입니다. 뭐.. 조동나사 180도 회전시키는 정도면 충분히 범위는 될것 같습니다. 그리고 필요한경우, 범위를 더 늘릴수도 있으니까요.
그리고 First Scanning을 통해 높이에 따른 Definition 그래프를 바탕으로, 최대점을 찾습니다.
for i in range(0,len(Definition_data)-1): if max_Definition < Definition_data[i] : max_Definition = Definition_data[i] max_index = i
Definition_data는 1차원 리스트로서 각 index값이 step을 의미하고 index의 값이 Definition 값입니다.
각 index에 해당하는 Definition값을 현재까지 기록된 최대의 max_Definition과 비교하여 만약 현재 index의 Definition값이 max_Definition보다 크면 max_Definition을 현재 Definition으로 갱신하고 현재 index를 max_index로 갱신해줍니다. 이러면 데이터에서 최대 index가 나오게 됩니다.
최대 index가 검출되었으면, 스텝모터를 ( 99 - max_index ) 만큼 움직이면 현미경의 초점을 자동을 맞출 수 있게 됩니다.
'Ort Lab' 카테고리의 다른 글
[Project_AF] 자동초점 현미경 개발기 (9) - 실행파일 변환 (0) 2020.04.14 [Project_AF] 자동초점 현미경 개발기 (7) - 함수제작-2 [제물대 이동] (0) 2020.03.09 [Project_AF] 자동초점 현미경 개발기 (6) - 함수제작-1 [사진저장] (2) 2020.03.08 [Project_AF] 자동초점 현미경 개발기 (5) - GUI (0) 2020.03.06 [Project_AF] 자동초점 현미경 개발기 (4) - 초점 확인 알고리즘 (0) 2020.03.05