이미지 분할(Image Segmentation) 기술

1. 이미지 분할(Image segmentation) 기술이란?

여러분은 혹시 ‘누끼 작업’ 혹은 ‘누끼 따기’라는 단어를 들어보신 적 있으신가요? 포토샵을 자주 사용하시는 분들은 한번쯤 들어보셨을 단어일 텐데요. 이 ‘누끼 작업’이라는 것은 일본어 ‘切抜き(키리누끼)’에서 파생된 단어로 ‘오려 내다’라는 의미를 지닌 말입니다. 즉, ‘누끼 작업’이라는 것은 ‘어떤 이미지에서 사용자가 원하는 물체를 세밀하게 오려 내는 작업’을 지칭하는 속어입니다.

그림 1. 이미지 분할 기술의 사례

이러한 누끼 작업은 이미지를 합성하거나 편집할 때, 자주 필요로 하는 기능이자 가장 손이 많이 가는 작업 중의 하나입니다. 때문에 포탈사이트에서 ‘누끼 작업’으로 검색을 해 보시면 이를 대행해주는 전문 업체들의 광고가 산재해 있는 것을 보실 수 있습니다. 전문가들의 경우에는 직접 혹은 이러한 대행업체들을 활용하여 원하는 물체를 따내서 사용하겠지만, 일반적인 사용자들에게 이러한 작업은 지루하고 고된 동시에 쉽게 접근하기 어려운 작업일 수 밖에 없습니다. 현재 사용자들이 손쉽게 접할 수 있는 누끼 기술로는 포토샵의 ‘올가미(magic wand) 툴’이나 ‘퀵 셀렉션(quick selection) 툴’, ‘레벨(levels) 툴’ 등이 있습니다. 하지만 대부분 데스크탑 환경에서 사용할 수 있도록 최적화되어 있기에, 모바일 환경에서 이러한 기능을 사용하기에는 시간복잡도와 UX를 고려할 때 적합하지 않은 단점을 가지고 있습니다.

2. 이미지 분할 기술의 종류와 특징

그럼 이러한 이미지 분할 기술에는 모바일 환경에 부적합한 방법들만 있을까요? 이미지 분할 기술은 영상처리에서 꽤나 오랜 시간 연구되어 온 분야인 만큼, 무수히 많은 논문들과 방법론들이 나와 있습니다. 이러한 기술들을 구체적인 방법(algorithm)들과 분할되는 결과물의 형태에 따른 분류에 맞춰 살펴보도록 하겠습니다.

결과물의 형태에 따른 분류

그림 2. hard segmentation의 부작용

먼저 이미지 분할 결과물의 형태에 따라 부드러운 분할(soft segmentation)과 딱딱한 분할(hard segmentation)로 나눌 수 있습니다. 이미지를 분할한다고 하면 먼저 떠올릴 수 있는 결과물의 형태로는 ‘배경’과 ‘오브젝트(따고자 하는 대상 물체)’, 2가지로 표현되는 흑백이미지가 될 텐데요. 이러한 형태의 결과물을 내주는 분할 기술들을 hard segmentation이라고 합니다. 하지만 이러한 방법들은 위의 그림과 같이 외곽선에서 배경과의 완전한 분할이 이루어지지 않기 때문에 다른 이미지와의 합성이 부자연스러워지는 단점을 가지고 있습니다. 따라서 분할의 결과물을 배경과 오브젝트의 이분법적인 구분이 아니라 배경과 오브젝트의 비율로 표현하는 방법이 필요로 하는 경우도 있습니다. 이러한 분할 기술들을 soft segmentation이라고 합니다. 다만 이러한 기술은 보통 hard segmentation에 비해 연산량이 많기 때문에 상대적으로 느릴 수 밖에 없다는 단점을 가지고 있습니다. 따라서 실무에서는 필요에 따라 적합한 방식의 분할 기술을 골라서 사용해야 하죠.

분할하는 방법에 따른 분류

현재 image processing 분야에서 분할에 사용되는 방법들은 적용 가능한 범위와 연산량, 결과물의 형태에 따라 그 종류가 굉장히 다양합니다. 구현이 용이하고 사용자에게 직관적인 UX를 제공할 수 있지만 좋은 결과를 얻기에는 제약조건들이 다소 있는 방법에서부터 구현이 복잡하지만 많은 경우에 있어 좋은 결과를 얻을 수 있는 방법에 이르기까지 많은 방법들이 있습니다. 대표적으로 많이 사용하는 방법들에 대해서 살펴보도록 하겠습니다. 가장 기본적으로 방법들로 thresholding methods과 histogram-based methods이 있습니다.  이 방법들은 포토샵의 레벨툴(levels tool)을 떠올리시면 이해하기 쉽습니다. 원본 이미지를 오브젝트와 배경이 잘 구별되는 색차원(color space)로 바꾼 뒤, 적절한 수치를 설정하여 오브젝트와 배경을 나누는 방법입니다. 간단하게 구현할 수 있고 경우에 따라 좋은 결과를 얻을 수 있는 장점이 있는 반면, 적절한 색차원을 찾는 것이 사용자의 경험과 직관에 의존하게 된다는 단점을 가지고 있습니다. 또한 경우에 따라서는 여러 가지 전처리 과정을 거쳐야 하는 번거로움을 가지고 있기도 합니다.

그림 3. thresholding method의 진행과정

다음으로는 region growing methods와 split-and-merge methods가 있습니다. 이 방법들은 이미지를 작은 영역으로 쪼개고 인접한 영역 간의 색감이나 밝기 차이를 계산해 비슷한 영역 합쳐나가고, 최종적으로 남는 영역들로 이미지를 분할하는 방법들입니다. 다만 2가지 방법의 차이는 전자는 작은 영역에서 시작해서 합쳐나가는 방식(bottom-up)이고, 다른 하나는 큰 영역에서 작은 영역으로 쪼개가면서 영역을 찾는 방식(top-down)이라는 점에 있습니다. 이 방법들은 n·log(n)에 비례하는 상대적으로 빠른 시간에 분할 결과를 얻을 수 있다는 장점이 있지만, 아래와 같이 정확하게 원하는 오브젝트만을 분할하기 어렵기 때문에 추가적인 작업이 필요할 수도 있다는 단점이 있습니다.

그림 4. region growing method의 결과

또 다른 방법으로 Graph partitioning methods라는 방법이 있습니다. 이미지의 각 픽셀(하나 하나의 점)을 node로 삼아 인접하는 픽셀들과는 픽셀 차이 값을 weight로 가지는 edge로 연결된 촘촘한 그래프를 상상해 봅시다. 이러한 하나의 그래프를 미리 정의한 에너지 함수가 최소가 되도록 쪼개는 것이 이 방법의 핵심이 됩니다. 또한 이 때 사용하는 에너지 함수의 종류에 따라 다시 여러 가지 방법으로 나뉘게 되죠. 이 방법은 반드시 오브젝트에 포함되어야 하는 영역 혹은 포함돼서는 안되는 영역을 지정해줘야 하고, 에너지 함수의 종류와 이미지의 크기에 따라 연산량이 다소 많다는 단점을 가지고 있습니다. 반면에 분할의 결과가 좋은 편이고, 다양한 형태의 사용자 입력에 대응하기 용이한 방법이라는 측면도 가지고 있습니다.

그림 5. Graph partitioning method의 전체 흐름도

이 외에도 다양한 방법들이 연구되고 있지만 모든 종류의 이미지에서 좋은 분할을 해내는 방법은 아직 없기 때문에, 이미지와 오브젝트의 특성과 분할에 사용할 수 있는 시간 등을 고려하여 적합한 방법을 선택할 필요가 있습니다.

3. 단말 상용화를 위한 제약조건들

저희 팀에서 개발한 분할 기술은 현재 포토펀치(Photo Punch)라는 안드로이드용 앱에 적용되어 있습니다. 포토펀치는 사용자가 이미지에서 원하는 물체를 간단한 터치 입력을 통해 손쉽게 오려내서 합성과 편집을 할 수 있도록 도와주는 모바일 앱입니다. 이렇게 단말에 이미지 분할 기술을 적용하기 위해서는 다음과 같은 2가지 제약조건을 고려해야 할 필요가 있습니다.

첫째, 단말에서 사용할 수 있을 정도의 시간 복잡도를 지닌 방법이어야 합니다. 일반적으로 앱이 구동되는 단말 환경은 매우 다양합니다. 최신 단말의 경우 하드웨어 성능이 뛰어나겠지만, 약 2년 전의 단말만 떠올려 보시더라도 앱이 구동되어야 하는 하드웨어의 성능에 얼마만큼의 다양성이 존재하는 지를 가늠해 볼 수 있습니다. 동일한 분할 방법을 적용하더라고 어떤 단말에서는 1초 안에 가능한 일이 다른 단말에서는 5초 이상 걸릴 수도 있다는 말이죠. 이렇게 다양한 단말에서 이미지 분할을 구동시키기 위해서 어떤 방법을 선택하는 것이 좋을까요? 물론 빠르고 품질 좋은 방법이 좋겠지만, 속도가 빠르면 빠를수록 분할의 품질은 떨어질 수 밖에 없다는 건 자명한 사실입니다.

그림 6. 최신 단말들의 benchmark test 결과

그럼 단말에는 어떤 방법이 적합할까요? 바로 단말의 성능에 맞춰서 품질과 소요 시간을 실시간으로 조절할 수 있는 방법입니다. 분할을 진행하는 동안, 사용자는 단말을 쥔 채로 무작정 기다려야만 합니다. 밀러가 제시한 response-time test에 따르면, 사용자가 큰 부담 없이 기다릴 수 있는 시간은 1초라고 합니다. 이미지 분할을 1초 안에 한다는 것은 쉽지 않은 이야기이지만, 적어도 3초 안에는 결과를 내주어야 사용할 만한 앱이 된다는 것이겠죠. 즉, 이미지 분할을 진행하다가도 너무 오래 걸린다 싶으면 중간에 적당히 결과를 끊어 낼 수 있다거나, 반대로 단말의 성능이 너무 좋을 때는 최대한 품질을 높여서 결과를 내는 방법이 적합합니다.

둘째, 간단한 터치 입력을 통해 오려내길 원하는 물체에 대한 힌트 정보를 입력 받을 수 있어야 합니다. 일반적으로 이미지 분할을 위해서는 배경과 오브젝트에 대한 ‘사용자의 힌트’가 필요합니다. 사용자의 힌트 없이 이미지 내에서 사용자가 원하는 오브젝트를 자동으로 구별해 내는 기술은 현재까지의 기술 수준으로는 요원한 일이기 때문이죠. 때문에 사용자로부터 어느 정도 오브젝트를 구별할 수 있게 해 주는 최소한의 힌트를 아래와 같은 방식으로 입력 받게 됩니다. 오브젝트 영역을 나타내는 하얀 선들과 배경을 의미하는 검은 선으로 말이죠.

그림 7. 분할을 위한 힌트 이미지 사례

모바일 단말에서의 입력방식은 사용자의 터치 입력에 기반하고 있습니다. 이런 터치 입력과 데스크탑의 마우스 혹은 태블릿을 비교했을 때의 가장 큰 차이점 중 하나는 그 정확도에 있습니다. 모바일 단말에서 터치로 원하는 작은 영역을 지정하기는 쉽지 않기 때문이죠. 따라서 단말 환경 하에서 힌트를 입력 받을 때는 사용자의 섬세하지 못한 힌트 영역 지정도 고려해야 할 사항 중의 하나가 됩니다.

SK planet에서는 이와 같은 제약조건들을 극복하기 위해 현재 연구가 진행되고 있는 이미지 분할 기술들 중에서 가장 적합한 방법을 찾았습니다. 먼저 방법론적으로는 graph partitioning method를 사용하되, 최적의 해(분할 결과)를 바로 구하는 방법 대신 단계적으로 근사해를 구하는 방법을 택하였습니다. 단계적으로 근사해를 구해 나가는 것이 단말 성능으로 인해 분할 과정을 중도에서 멈추더라도 사용자에게 어느 정도 만족스러운 중간 결과를 전해줄 수 있기 때문이죠. 또한 분할 기법의 개선만으로 부족한 속도를 높이기 위해 방법론을 적용하는 범위를 축소하거나 down-sampling된 이미지를 사용하는 방법 등이 함께 사용되었습니다.

하지만 이러한 속도 개선 방법들은 품질 저하라는 부작용을 초래하였고, 저희는 추가로 품질을 개선할 수 있는 방법들을 고민할 수 밖에 없었습니다. 이를 위해 힌트 이미지를 보다 정교화하여 사용하거나 분할 결과물의 외곽선을 보정하는 방법들이 추가로 도입되었습니다. 이러한 노력의 결과로 속도와 품질 측면에서 모바일에서도 사용할 수 있는 이미지 분할 기술을 선보일 수 있었습니다. 아래는 실제로 개발한 기술이 적용되어 있는 앱의 시연 영상입니다.

동영상 1. 모바일 분할 기술 적용사례, “PhotoPunch”

4. 맺으며…

지금까지 이미지 분할 기술에 대해 몇 가지 방법들에 대한 개략적인 설명과 함께 포토펀치에 적용하기 위해서 고려했던 사항들에 대해 소개해 드렸습니다. 이미지 분할 기술은 image processing에서 비교적 오래된 분야임에도 불구하고 아직까지도 지속적으로 연구되고 있는 분야 중의 하나입니다. 이는 모든 이미지에 범용적으로 적용할 수 있는 완벽한 분할 기술이 아직 개발되지 않은 까닭입니다. 하지만 많은 사람들이 노력하고 있는 만큼, 조만간 ‘누끼 작업’을 대체할 수 있는 보다 완벽한 분할 기술의 등장을 기대해 봅니다.

김한샘 Image Processing팀

2008~2012년까지는 Android 및 자체 linux플랫폼의 graphics system 설계 및 구현 작업을 하였습니다. 2012년에 SK Planet에 합류한 이래로, image processing 및 computer graphics 관련 분야의 기반 기술들에 대한 연구를 진행 중입니다.

공유하기