2026/04/13 8

[LensCal] 아직 끝나지 않은 회고 — 렌즈 캘리브레이션 작업 중간 정리

시리즈 7/7.시리즈 마지막 편입니다. 보통 마지막 편은 "이렇게 해서 성공적으로 마무리했습니다" 라고 쓰는 게 자연스러운데, 이번 시리즈는 그 모양으로 끝낼 수가 없네요. 솔직하게 말해서 작업은 여전히 진행 중이고, 제일 큰 결정 (검출기 선택) 은 아직 내려지지 않았습니다.그래서 이번 편은 "완료 회고" 가 아니라 "중간 회고" 입니다. 지금까지 한 일을 정리하고, 아직 정해지지 않은 것들을 정해지지 않은 상태 그대로 적어두려 해요. 반년쯤 뒤에 이 글을 다시 읽었을 때 "아 그때 이런 고민을 했었지" 하고 스스로 피드백할 자료가 될 거라 생각합니다.지금까지 한 일 — 완료된 것들시리즈를 시작할 때만 해도 "OpenCV 단독 체커보드 검출기가 실장비에서 불안정하다" 는 고민에서 출발했었습니다. 지금은..

[LensCal] 숫자보다 히트맵 — 현장에서 실제로 쓰이는 대시보드 만들기

시리즈 6/7. 12 개 지표를 뽑아놨는데 운용자가 안 본다면 소용이 없습니다. "1 초 안에 판정 가능한" UI 를 만들기 위해 어떤 고민을 했는지에 대한 기록입니다.1. PropertyGrid 만으로는 왜 부족한가지표 12 개를 전부 PropertyGrid 에 쏟아부으면 이렇게 됩니다.▸ 검출 결과 검출 코너 수 96 회전 각도 1.23°▸ 품질 지표 재투영 오차 RMS 0.15 px 재투영 오차 Max 0.42 px 직교성 평균 0.08° 직교성 최대 0.22° 중심-주변 편차 (최대) 0.12% 콘트라스트 최소 ..

[LensCal] 텔레센트릭 렌즈에도 왜곡 측정이 필요한 이유 — 광학 품질 3종 세트

시리즈 5/7. 같은 체커보드 이미지에서 렌즈의 광학적 품질까지 뽑아냅니다. 그런데 첫 번째 질문은 이겁니다. "텔레센트릭 렌즈는 왜곡이 0 이라고 하는데, 굳이 측정해야 할까요?"1. 기하 지표와 광학 지표의 차이앞 편에서 다룬 기하학적 지표 (재투영 오차, 직교성) 는 "격자가 반듯한가" 를 봅니다. 그런데 이 지표들로는 답하지 못하는 질문이 여전히 있습니다.이 렌즈의 왜곡 특성이 스펙 범위 안에 들어오는가?이미지 전체에 조명이 균일하게 들어왔는가?포커스가 영역별로 균일하게 맞았는가?이건 격자의 기하학적 반듯함이 아니라, 렌즈 자체의 물리적/광학적 특성입니다. 이번 편에서 다룰 세 지표가 정확히 이 영역을 담당합니다.방사 왜곡 계수 (Radial Distortion k1, k2)영역별 콘트라스트 (M..

[LensCal] 재투영 오차와 직교성 — 격자는 얼마나 반듯한가

시리즈 4/7.3편까지 해서 기본 지표 5개가 쌓였습니다. 해상도, 코너 간 거리 분포, 등방성, 9영역 균일도, 중심-주변 편차. 운용 현장에서 대부분의 판정은 이 기본 지표들로 해결됩니다.그런데 한 가지 질문이 계속 남아요. "평균 스케일은 괜찮아 보이는데, 격자 자체가 미묘하게 휘어 있지는 않은가?" 평균이 가려버리는 케이스가 있거든요. 코너 100개 중 5개만 조금씩 엇나가 있으면, 평균은 여전히 멀쩡해 보입니다. 이 5개를 잡으려면 개별 코너의 잔차를 봐야 하고, 그게 재투영 오차 입니다.이번 편의 진짜 핵심은 마지막의 교차 진단표입니다. 재투영 오차 혼자서도 유용하지만, 직교성을 같이 봤을 때 진단이 결정적으로 달라지는 순간이 있어요. 그 이야기가 이번 편 전체의 결론이 될 것 같네요.재투영 ..

[LensCal] 체커보드에서 뽑아내는 기본 지표 5가지

시리즈 3/7.2편까지 해서 정렬된 그리드 (m_vGridMap) 가 준비됐습니다. 이제 여기 위에 분석 함수들을 얹기 시작할 텐데, 가장 먼저 올리는 건 화려한 지표가 아니라 기본 중의 기본입니다. 해상도, 등방성, 9영역 균일도, 중심-주변 편차. 이름만 들으면 심심해 보이지만, 뒤에 올라갈 모든 고급 지표는 결국 이 바닥 위에 서 있습니다.기본이 흔들리면 고급 지표가 아무리 정교해도 숫자에 의미가 없어져요. 재투영 오차 0.1 px 라는 값도, 애초에 스케일 계산이 편향되어 있으면 그 0.1 px 는 그냥 위장된 거짓말입니다. 그래서 이번 편은 "당연해 보이지만 당연하지 않은" 것들에 대한 얘기입니다.해상도 — 정의는 단순한데가장 핵심이 되는 값이고, 수식은 한 줄이면 끝납니다.해상도 = 타일 실제..

[LensCal] 검출기를 갈아끼울 수 있게 만든 설계

시리즈 2/7.1편에서 "Cognex 정식 검출기와 자체 OpenCV 검출기를 같이 두고 비교 중" 이라는 얘기를 했습니다. 이게 가능한 건 두 검출기가 완전히 똑같은 결과 구조체를 채워서 돌려주도록 맞춰놨기 때문이에요. 이번 편은 그 한 조각에 대한 이야기입니다.얼핏 "인터페이스 통일" 이라는 말로 한 줄 정리될 것 같은데, 실제로 해보면 몇 가지 미묘한 선택이 끼어 있어요. 특히 그리드 인덱스 부여를 누가 책임질 것인가 라는 부분이 이번 구조의 핵심이었습니다.출발점 — 엔진이 알아야 하는 것과 몰라도 되는 것캘리브레이션 엔진 (CLensCalibEngine) 이 하는 일은 대략 이렇습니다.검출된 코너 좌표들을 m_vGridMap[r][c] 라는 그리드 인덱스 맵으로 정리그 위에 CalcScaleFac..

[LensCal] Cognex 정식 검출기 vs 자체 OpenCV 검출기, 아직 고민 중입니다

시리즈 1/7.솔직하게 먼저 말씀드리면, 이 글을 쓰는 지금도 저는 결정을 못 했습니다. Cognex VisionPro 의 정식 체커보드 검출기를 계속 쓸지, 아니면 최근에 직접 짠 OpenCV 기반 검출기로 갈아탈지. 양쪽을 같은 엔진에 번갈아 꽂아보며 며칠째 고민 중이에요.원래는 "리팩토링 결정 완료" 같은 깔끔한 결론으로 글을 쓰려고 했는데, 쓰다 보니 진짜 상태랑 안 맞아서 접었습니다. 대신 "지금 이런 상황에서 이런 것들을 저울질하고 있습니다" 라는 중간보고 형태로 남기려 합니다. 결정이 나면 후속 포스트로 돌아올 테니, 이번 편은 결정을 내리기 직전까지의 생각 정리라고 봐주시면 좋겠습니다.배경 — 원래 상황장비에 들어가는 렌즈 캘리브레이션 모듈은 원래 HWTester 에서 이식한 CCalibr..

[LensCal] 렌즈 캘리브레이션 엔진을 다시 짜면서 — 시리즈 소개

머신비전 장비에서 "이 렌즈가 정상이냐" 에 답하는 도구, 바로 렌즈 캘리브레이션 모듈입니다. 저희 장비에서 이걸 한 번 크게 손봤는데, 과정 자체가 좀 길어져서 한 편으로는 안 되겠더라구요. 7편짜리 시리즈로 나눠서 기록해 둡니다.처음엔 "기존 모듈을 Cognex 로 통합하는 리팩토링" 으로 시작했는데, 진행하면서 상황이 바뀌었습니다. Cognex 의 검출 엔진과 구조적으로 호환되는 자체 OpenCV 검출기를 하나 만들었고, 지금은 두 검출기를 같은 엔진에 꽂아보며 어느 쪽이 장기적으로 더 나은지 고민하는 중입니다. 결정이 난 이야기가 아니라 "아직 결정 안 난" 이야기예요.그래서 이 시리즈는 "이렇게 했습니다" 라는 완성형 튜토리얼이 아니고, "이런 고민을 하면서 이 구조를 만들었습니다" 에 가깝습니..