레이지버드에서는 다양한 이미지 처리에 대한 기술에 대해 개발하고 있습니다. 그 중에 압흔에 대한 이미지 처리를 진행하고 있는데요. 압흔은 간단히 표현하여 눌린 흔적을 말합니다.
위와 같은 경우를 압흔이라고 합니다. 이와 같이 눌린 자국을 기준으로 공장 등에서는 불량 여부를 판단합니다. 하지만 이미지에서도 보이듯이 압흔의 갯수를 센다는 것은 사실상 불가능합니다. 그래서 이미지 처리를 한 프로그램을 통해 정확하게 파악할 수 있습니다. 실시간 이미지 프로세싱에 중점을 둔 open API를 이용하여 처리하기로 하였습니다.
압흔의 영역을 구별
일단 정확도를 높이기 위해 압흔이 찍혀있는 특정 영역을 지정합니다. 눈으로 보기에도 검은색 라인을 제외한 지역에 압흔이 있죠. 전체 영역이 아닌 압흔이 있는 이미지를 우선 규정합니다. 첫번째는 경계가 선으로 이루어져있기 때문에 선을 추출하기 위한 몇 가지 알고리즘을 사용해야 합니다. 이때 Canny Edge 알고리즘을 이용하게 되는데 내부적으로 5가지 단계로 경계를 추출하게 됩니다.
위의 사진 상으로 경계선이 직선으로 되어있기 때문에 Hough Line Transform을 사용하게 됩니다. Hough Line Transform은 피쳐 추출 기술로 직선을 추출하는 것은 가장 기본적인 단계입니다. 따라서 Canny Edge 알고리즘으로 추출한 경계선 중 직선을 고르게 됩니다. 그럼 총 10개의 직선을 찾을 수 있고, 11개의 사각형을 인지하게 됩니다.
그 중 압흔이 있는 위치는 검정색을 제외한 남은 사각형입니다. 각 사각형의 밝기의 평균값을 계산하여 압흔이 있는 위치를 지정합니다. 이제 압흔을 추출하는 순서가 되겠네요.
압흔 추출
압흔을 추출할 때 가장 중요한 점은 오차 범위를 줄이는 일입니다. 사실 우리가 센다고 가정하더라도 눌린 정도가 명확하지 않으면 사람마다 갯수를 다르게 셀 수 있겠죠.
그래서 압흔을 찾기 전에 정확도를 높이기 위한 작업을 진행합니다. 처음 Canny Edge를 알 때 5가지 단계가 있다고 말했는데요. 첫 단계가 바로 노이즈를 감소시키는 것입니다. 노이즈가 경계선을 구하는데 영향을 주기 때문입니다. 따라서 압흔을 추출할 때도 노이즈를 우선 감소시킵니다. 이때 사용하는 것이 Gaussian Blur인데, 이름이 어렵지만 포토샵이나 일러스터에서도 많은 사람이 주로 사용하는 기법입니다. 일반적으로는 이미지 노이즈를 줄이는데, 사람에 따라 흐릿해진다고 느낄 수 있죠. 이와 같은 작업을 통해 동그란 부분의 경계가 좀 더 확실해집니다.
이제 경계를 기반으로 압흔에 해당하는 동그란 부분을 검정색으로 바꿔줍니다. 이 때 필요한 기술이 thresholding 입니다. 이미지 세분화의 기본적인 기술 중 하나 입니다. 이를테면 thresholding (임계값)의 대상을 우선 지정합니다. 우리의 임계값은 바탕색이 됩니다. 바탕색 보다 크면 흰색(1), 작으면 검정색(0)이 되는 것이죠.
이제 검정색으로 표시된 압흔의 갯수를 세기만 하면 오늘의 목표가 완료되었습니다.
앞으로
이미지를 처리하는 기술은 이미 Open API로 제공되고 있는 것들이 많습니다. 목적에 맞게 얼마나 이미 제공되는 알고리즘들을 잘 사용하느냐도 중요한 개발 방식 중 하나가 되었죠. 이런 기술들을 통해 우리는 앞으로 환부의 경계를 확인하고, 크기, 요철의 깊이등을 파악하는 것이 가능할 것 같습니다.