전체 글 10

[Vision/C++] 반복 패턴 이미지에서의 Grid Center 검출 알고리즘 구현

웨이퍼나 PCB 검사 프로젝트를 진행하다 보면 동일한 패턴이 반복되는 이미지를 자주 다루게 된다. 이러한 이미지에서 미세 결함(Defect)을 검출하기 위해서는, 강한 에지 성분을 가진 반복 패턴을 먼저 제거(Pattern Removal)해야 한다. 패턴 제거를 위해 FFT 필터링이나 마스터 이미지와의 Subtraction 방식을 고려하고 있는데, 이를 위해서는 선행적으로 각 디펙트의 인덱싱정보를 위해 각 패턴의 정확한 중심 좌표(Center Position)를 확보해야 한다. 본 포스팅에서는 2D 이미지 프로세싱 부하를 줄이기 위해 투영(Projection) 기법을 활용하여 Grid Pattern의 중심을 검출하는 로직(GridPatternMatching) 구현 과정을 정리한다.1. 검증 환경 구성실제..

Vision & Inspection 2025.12.21

[C++/CUDA] 90GB 대용량 버퍼풀에서 4,000개 ROI만 쏙 뽑아 초고속 어파인 변환하기 (Zero-Copy & Batch Assembly)

최근 uled 검사 장비 개발 프로젝트를 진행하면서 극한의 성능 요구사항에 부딪혔습니다. 시스템에는 90GB에 달하는 초대형 Raw 이미지가 메모리에 로드되어 있습니다. 제 미션은 이 거대한 이미지 전체를 건드리는 것이 아니라, 검사가 필요한 4,000개 이상의 특정 영역(ROI)만 빠르게 잘라내어 어파인 변환(Affine Transform)을 수행하는 것이었습니다. 처음에는 "GPU가 빠르니까 금방 하겠지"라고 생각했지만, 현실은 달랐습니다. 90GB라는 거대한 바다에서 작은 조각 4,000개를 건져 올리는 과정에서 PCIe 통신 병목(Latency)이 발목을 잡았기 때문입니다. 오늘은 이 문제를 해결하기 위해 적용한 대용량 메모리 핀(Pin) 등록과 필요한 부분만 처리하는 GPU 배치 조립(Batch..

Vision & Inspection 2025.12.07

[Insight] 이미지를 돌릴까, 마스크를 돌릴까? (Image vs Mask Rotation)

웨이퍼 패턴 검사 알고리즘을 최적화하다 보면 필연적으로 마주치는 고민이 있습니다.Cognex PatMax, CopenCV Templet Matching 등을 이용해 패턴의 틀어진 각도를 알아냈을 때,이미지 회전: 들어온 영상을 '기본 이미지'와 똑같이 0도로 펴서 검사할 것인가?마스크 회전: 영상은 그대로 두고, 검사 영역(ROI/Mask)을 theta 만큼 돌려서 검사할 것인가?현재 저희는 전자인 '이미지 회전' 방식을 사용 중입니다. 하지만 "굳이 무거운 영상 변환을 해야 하나? 좌표만 돌리면 더 빠르지 않을까?"라는 의문은 개발자라면 누구나 가질 수 있는 합리적인 의심입니다.이 글에서는 두 방식의 메커니즘을 비교하고, 왜 웨이퍼 검사(비교 검사)에서는 '이미지 회전'이 정답에 가까운지 기술적으로 분..

Vision & Inspection 2025.12.07

[Insight] 개발의 절반은 '디버깅'이다

개발자로서 연차가 쌓이면서 바뀌는 습관이 하나 있습니다. 예전에는 "어떻게 하면 이 기능을 빨리 구현할까?"를 고민했다면, 이제는 "이 기능이 멈췄을 때, 어떻게 하면 빨리 원인을 찾을 수 있을까?"를 먼저 고민한다는 점입니다.특히 하드웨어를 제어하는 장비 개발 분야에서, 코드가 '도는 것'은 시작에 불과합니다. 진짜 싸움은 현장에서 예기치 않은 이유로 '멈췄을 때' 시작됩니다. 오늘은 제가 프로젝트를 진행하며 뼈저리게 느낀 '디버깅을 위한 개발 철학'과, 새로 합류하는 팀원들에게 꼭 해주는 이야기를 나누려 합니다. 1. 미래의 나를 구하는 '방어적 코딩' 우리는 종종 'Happy Path(모든 조건이 완벽한 상황)'만을 가정하고 코드를 짭니다. "센서는 당연히 켜져 있겠지", "통신 케이블은 연결되어 ..

[Motion Control] 1. 모션 라이브러리의 이해와 제어 보드별(Adlink, ACS, Ajin) 특징

오랜만에 블로그에 글을 씁니다. 그동안 바쁜 일들도 있었지만, 무엇보다 게으름이 가장 큰 적이었네요. 게으름에서 벗어나고자 다시 키보드를 잡았습니다.오늘은 장비 제어의 핵심인 '모션 제어(Motion Control)'의 기본 개념과, 개발자에게 가장 중요한 '모션 라이브러리'에 대해 이야기해 보겠습니다. 특히 제가 현업에서 직접 다뤄본 Adlink, ACS, Ajin 보드들의 특징도 가감 없이 비교해 보겠습니다.1. 모션 제어(Motion Control)란?반도체, 디스플레이 등 정밀 부품을 조립하거나 검사하는 장비를 보면, 가장 눈에 띄는 것이 바로 실제 움직임이 일어나는 '이송 시스템' 입니다.모션(Motion): 물체가 한 점에서 다른 점으로 이동하는 '운동'제어(Control): 원하는 방향과 위..

Motion & Control 2025.11.23

[Trouble & Debug Note] 잉크 도팅 튐 현상, '코일부 개조'로 잡았습니다 (feat. 완제품의 배신)

검사장비에서 불량(NG) 제품에 잉크 마킹을 할 때, 잉크가 튀는(Splatter) 현상은 매우 고질적인 문제입니다. 이 글은 잉크 튐 현상을 잡기 위해 소프트웨어(펄스 시간)와 전기적 제어(속도)를 모두 테스트했으나, 결국 액추에이터 자체인 코일부의 물리적 개조에 도달하기까지의 트러블슈팅 기록입니다. 1. 문제 현상 및 목표목표: 아래 사진처럼 깔끔하고 일정한 원형의 잉크 도트를 찍는 것.문제: 실제 도팅 시, 잉크가 제자리에 맺히지 않고 주변으로 심하게 튀었습니다.2. 문제의 핵심: "분사(Jet)"가 아닌 "스탬프(Stamp)" 방식트러블슈팅에 앞서, 이 잉크젯(DieMark)의 동작 원리를 파악해야 했습니다.이 제품은 잉크를 '분사(Jetting)'하는 방식이 아니었습니다.**솔레노이드 코일(Co..

SkaldLogger: MFC GUI를 위한 투명 오버레이 로거 개발 기록

Vision & Inspection, Motion & Control 장비의 HMI(제어 GUI)를 개발하다 보면, 수많은 컴포넌트의 상태를 실시간으로 확인해야 할 때가 많습니다.1. 프로젝트의 목표: GUI와 로그의 공존디버깅 시 로그를 확인하는 기존 방식은 번거롭습니다.AfxMessageBox: 프로그램을 일시 정지시키고 GUI를 가립니다.별도의 로그 다이얼로그: 메인 GUI의 중요 부분을 가려서, 로그를 볼 때마다 창을 옮겨야 합니다.Visual Studio 출력 창: (OutputDebugString) GUI와 시선이 분리되어 실시간성이 떨어집니다.이 문제를 해결하기 위해, "기존 제어 GUI를 가리지 않고, GUI를 조작하는 동시에 실시간 로그를 확인할 수 있는 투명 오버레이" 로거를 개발하는 것..

왜 나는 고성능 검사장비에 구형 X299 플랫폼을 고집하는가?

1. "아니, 지금 X299라고요?"최신 고성능 검사 장비 PC를 맞춘다고 할 때, 대부분은 최신 인텔 코어 i9(14세대)이나 AMD 라이젠 9, 혹은 쓰레드 리퍼를 떠올릴 것입니다. 하지만 저는 오늘도 "구형"으로 취급받는 인텔 X299 플랫폼을 장바구니에 담습니다."고리타분하다"고 할 수도 있지만, 여기에는 수많은 장비를 조립하고 디버깅하며 얻은 명확한 이유가 있습니다. 이 글은 최신 PC가 오히려 검사장비에서 성능 저하를 일으키는 이유와, HEDT(High-End Desktop) 플랫폼, 특히 X299가 여전히 강력한 현역인 이유에 대한 기술 리포트입니다. 2. 검사장비 PC의 첫 번째 관문, PCIe Lane일반적인 게이밍 PC와 검사장비 PC의 가장 큰 차이는 '확장성'입니다. 검사장비에는 ..

ETC./Tech Journal 2025.11.02

[Insight] 장비 제어 소프트웨어 개발자란?

장비 제어 소프트웨어 개발자, 기계의 언어를 설계하는 사람저는 자동화 장비를 만드는 일을 합니다.그중에서도 장비 제어 소프트웨어(Equipment Control Software) 개발이 제 역할입니다.쉽게 말하면,"기계가 언제 움직이고, 어디로 가며, 어떤 순서로 동작해야 하는가"를소프트웨어로 설계하고 구현하는 일입니다.1. 기계가 움직이기까지장비 제어 소프트웨어는 단순히 모터를 돌리고 IO를 제어하는 수준이 아닙니다.하나의 장비가 움직이기 위해서는 수십, 때로는 수백 개의 센서와 액추에이터가순서와 조건에 맞춰 정확히 연동되어야 합니다.이걸 가능하게 하는 게 바로 제어 로직(Sequence Logic)입니다.예를 들어,실린더가 먼저 내려와야 하고,그 신호가 감지되면 모터가 이동하고,위치가 안정되면 카메라..

“좋은 엔지니어는 빠른 사람이 아니라, 일관된 사람이다”

좋은 엔지니어는 빠른 사람이 아니라, 일관된 사람이다현장에서 일하다 보면 늘 빠른 사람이 눈에 들어옵니다.코드를 금방 짜고, 시운전도 남들보다 먼저 끝내는 사람.처음엔 그런 사람이 부럽습니다.하지만 시간이 지나면, 결국 믿음이 가는 사람은 따로 있습니다.일관된 사람입니다. 일관성이란 게 뭘까비전이나 모션 쪽 일을 하다 보면,하루에도 같은 세팅을 수십 번 반복합니다.그런데 이상하게도,어제 잘 되던 게 오늘은 미세하게 다를 때가 있습니다.그때 진짜 실력은 속도보다 기준을 지키는 힘에서 나옵니다.환경이 조금 달라도 결과가 크게 흔들리지 않게 만드는 사람,그게 결국 신뢰를 받습니다.빠른 것보다 중요한 것빠른 사람은 늘 주목받습니다.그런데 그 속도가 계속 유지되지는 않습니다.조금만 상황이 바뀌면,오히려 다른 사람..

Career & Growth 2025.10.15