문자의 중심선을 따라 등간격 3D trajectory를 추출하는 skeleton 기반 경량 파이프라인
이 프로젝트는 이미지에 포함된 여러 개의 문자 또는 기호에 대해 각 문자마다 중심선을 추출하고, 이를 기반으로 (x, y, z) 형태의 등간격 trajectory를 생성하는 Python 기반 모듈입니다.
- 글자를 쓰는 로봇, 도미노 경로 설계, 필기 재현 로봇, 필압 기반 필기 분석 등에 적용 가능
- ROS2, MoveIt2, GAN 기반 보간기 등 다양한 외부 시스템과 통합 가능
project_root/
├── extractor/ # 주요 처리 로직 모듈
│ ├── multi_character_extractor.py # 전체 파이프라인 클래스
│ ├── image_preprocessor.py # 이진화 및 skeleton 추출
│ ├── contour_extractor.py # contour 기반 문자 분리
│ ├── trajectory_builder.py # skeleton → 경로 + z-profile
│ ├── resampler.py # 경로 보간 및 분할
│ └── utils.py # 후처리 및 보조 함수
│
├── df_vis.py # 시각화 및 디버깅용 스크립트
├── images/ # 테스트 이미지 폴더
└── README.md # 이 파일
pip install numpy opencv-python scikit-image pandas matplotlibpython extractor/multi_character_extractor.py ./images/sample.pngpython df_vis.py # 내부에서 MultiCharacterTrajectoryExtractor 사용| 입력 | "가나다" | "@" | "&" | ||
|---|---|---|---|---|---|
| 파라미터 | 선두께 | 3 | 5 | 3 | 3 |
| 샘플링 | 30 | 40 | 50 | 60 | |
| 결과 | ![]() |
![]() |
![]() |
![]() |
[Grayscale 이미지]
→ [Otsu 이진화]
→ [Contour 기반 문자 분리]
→ [Skeleton 추출]
→ [DFS 기반 path 추출]
→ [Point 필터링 + 방향 정렬]
→ [Z-profile 계산 (두께 기반)]
→ [DataFrame 구성 → resample → 최종 trajectory 반환]
- 각 중심선 점마다 상하좌우로 두께를 측정하여 z 값으로 정규화
- 붓글씨 두께 재현, 필압 기반 동작 구현 등에 유용
| 파일 | 구성요소 | 설명 |
|---|---|---|
multi_character_extractor.py |
MultiCharacterTrajectoryExtractor |
전체 파이프라인 총괄 클래스 |
image_preprocessor.py |
binarize, extract_skeleton_from_mask |
전처리 및 중심선 추출 (stroke/skeletonize 등) |
contour_extractor.py |
CharacterContourExtractor |
문자 단위 이진 마스크 생성 |
trajectory_builder.py |
TrajectoryBuilder, PathAnalyzer |
중심선 → 경로 + 두께 기반 Z 생성 |
resampler.py |
resample_path() |
등간격 보간 및 max_gap 기준 경로 분리 |
utils.py |
filter_nearby_points, get_local_thickness 등 |
경로 필터링 및 보조 기능 |
- ✍️ 필기 재현 로봇
- 🎮 게임 입력 재현
- 🤖 도미노 시뮬레이션 자동 생성
- 🧑🏫 OCR 전처리 및 텍스트 디스플레이 벡터화
- 🧵 패브릭 레이아웃 설계용 벡터 변환
stroke모드를 사용하면 글자 획을 보다 직관적으로 재현 가능min_dist,max_gap,n_points는 유연하게 실험해볼 수 있는 하이퍼파라미터- 추가로 SVG 변환기, Bezier 보간기, ROS2 연동기, JSON exporter 등을 확장 가능
재성 배 (JaeSeong Bae)
Vision & Robotics Engineer
AI Engineer
GitHub: @jsbae-RL
이 프로젝트는 아래의 훌륭한 분들의 협업과 기여로 완성되었습니다:
![]() jsbae-RL 알고리즘 설계 및 기술 구현 |
![]() yujin 이미지 처리 파라미터 실험 및 성능 최적화 |
![]() weedmo 경로 및 샘플링 기법 최적화 |

.png)




