"그냥 손 사진 찍어서 검은 선만 따면 되는 거 아니야?" 프로젝트 시작 전에는 이렇게 쉽게 생각했습니다. 하지만 현실 세계의 이미지는 그리 호락호락하지 않았습니다. 조명, 그림자, 손의 굴곡, 그리고 카메라 화질까지. 수많은 변수가 컴퓨터 비전(Computer Vision) 알고리즘을 방해했습니다.
특히 가장 큰 문제는 '손금보다 진한 그림자'와 '손금으로 오해받는 잔주름'이었습니다. OpenCV 라이브러리를 활용해 손금 인식률을 90% 이상으로 끌어올리기 위해 밤새 파라미터를 깎았던(Tuning) 과정을 공유합니다.
1. 단순 이진화(Threshold) vs 적응형 이진화
처음엔 cv2.threshold를 사용해 특정 밝기(예: 127) 이하는 검은색, 이상은 흰색으로 만들었습니다. 결과는 엉망이었습니다. 조명이 밝은 곳에서는 손금이 다 날아가고, 어두운 곳에서는 손 전체가 검게 나왔습니다.
해결책은 적응형 이진화(Adaptive Threshold)였습니다. 이미지 전체가 아닌, 픽셀 주변의 작은 영역(Block)을 기준으로 임계값을 계산하는 방식입니다. 이를 통해 손바닥의 밝기가 균일하지 않아도, 주변보다 상대적으로 어두운 '선' 성분만을 효과적으로 추출할 수 있었습니다.
2. 노이즈와의 전쟁: Bilateral Filter의 마법
선을 따내는 데는 성공했지만, 이번엔 피부의 미세한 모공과 잔주름까지 전부 인식되는 문제가 생겼습니다. 가우시안 블러(Blur)를 쓰면 노이즈는 사라지지만 중요한 손금까지 흐릿해졌습니다.
이 딜레마를 해결해 준 것이 바로 Bilateral Filter(양방향 필터)입니다. 이 필터는 엣지(Edge, 경계선) 성분은 보존하면서 평탄한 영역(피부)만 뭉개주는 특성이 있습니다. 마치 포토샵의 '피부 보정' 기능과 같습니다. 이를 전처리 단계에 적용하자 굵은 손금은 선명하게 남고 자잘한 잡티는 깨끗하게 사라지는 결과를 얻었습니다.
3. Morphological 연산으로 끊어진 선 잇기
추출된 손금 이미지는 종종 선이 뚝뚝 끊어져 보이거나, 점처럼 보이는 노이즈가 섞여 있었습니다. 이를 다듬기 위해 모폴로지(Morphology) 연산을 적용했습니다.
Closing 연산으로 끊어진 손금을 이어주고, Opening 연산으로 미세한 점들을 제거했습니다. 또한, 컨투어(Contour) 분석을 통해 일정 면적 이하의 덩어리는 과감히 삭제하는 후처리 로직을 추가하여, 최종적으로 '진짜 손금'만 남은 깔끔한 결과물을 사용자에게 보여줄 수 있었습니다.
🧪 파라미터는 거짓말을 하지 않는다
영상 처리의 핵심은 '적절한 값'을 찾는 것입니다. Block Size를 1만 바꿔도 결과가 천지 차이로 달라집니다. 수백 번의 테스트 샷을 찍어가며 최적의 값을 찾아가는 과정, 그것이 바로 엔지니어링의 정수가 아닐까요?
컴퓨터 비전 기술로 내 손금을 분석해보세요!
✋ AI 손금 테스트 실행하기