상위 목록: 하위 목록: 작성 날짜: 읽는 데 7 분 소요

이미지 분할(Image Segmentation)

이미지 인식에서 다룬 객체 검출은 대상을 사각형 상자로 감쌉니다. 그러나 상자 안에는 대상이 아닌 배경도 함께 들어가며, 사람의 팔이나 도로의 경계처럼 형태가 복잡한 대상은 상자만으로 정확한 모양을 표현할 수 없습니다.

이미지 분할(Image Segmentation)은 이미지의 모든 픽셀을 의미 있는 영역으로 나누는 작업입니다. 분류가 이미지 한 장에 하나의 답을 내고, 검출이 상자마다 하나의 답을 낸다면, 분할은 픽셀마다 답을 냅니다. 그러므로 결과는 입력 이미지와 같은 크기의 레이블 맵(Label Map) 또는 마스크(Mask)로 표현됩니다.

관심 영역 & 관심 채널에서 다룬 마스크가 사람이 직접 지정한 영역이었다면, 이미지 분할은 그 마스크를 알고리즘이 스스로 만들어 내는 과정이라 볼 수 있습니다. 의료 영상에서 종양의 면적을 재거나, 자율 주행에서 주행 가능한 도로 영역을 가려내거나, 사진에서 배경만 흐리게 처리하는 작업은 모두 픽셀 단위의 결과를 필요로 합니다.

분할은 전통적으로 같은 영역에 속한 픽셀은 서로 닮았고, 다른 영역의 픽셀과는 다르다는 가정 위에서 출발합니다. 어떤 성질이 닮았는지를 밝기, 색상, 질감, 위치 중 무엇으로 정하느냐에 따라 알고리즘이 달라집니다.



임계값 기반 분할(Threshold-based Segmentation)

가장 단순한 분할은 전처리 알고리즘에서 다룬 이진화(Binarization)입니다. 밝기가 기준값보다 큰 픽셀과 작은 픽셀로 나누면, 이미지는 전경과 배경 두 영역으로 분할됩니다. 배경이 균일하고 대상과의 밝기 차이가 뚜렷하다면 이것만으로도 충분합니다.

문제는 기준값을 어떻게 정하느냐입니다. 오츠 알고리즘(Otsu's Method)은 밝기 히스토그램을 두 집단으로 나눌 때, 두 집단 내부의 분산은 가장 작고 집단 사이의 분산은 가장 크게 만드는 값을 자동으로 찾습니다. 히스토그램이 두 개의 봉우리로 뚜렷하게 갈라지는 이미지에서 특히 잘 동작합니다.

조명이 고르지 않아 한쪽은 밝고 다른 쪽은 어두운 이미지라면 하나의 기준값으로는 어느 한쪽이 무너집니다. 적응형 임계값(Adaptive Threshold)은 픽셀마다 주변 영역의 평균이나 가중 평균을 기준값으로 사용해, 국소적인 밝기 변화에 맞춰 분할합니다. 그림자가 드리운 문서를 이진화할 때 흔히 사용됩니다.

임계값 기반 분할은 빠르고 직관적이지만 밝기 하나만 봅니다. 밝기가 비슷한 서로 다른 물체는 구분하지 못하고, 어느 픽셀이 어느 픽셀과 이웃인지도 고려하지 않으므로 결과에 작은 구멍이나 잡음이 흩어지기 쉽습니다. 그래서 노이즈 제거에서 다룬 모폴로지 연산으로 결과를 다듬는 과정이 뒤따르는 것이 보통입니다.

  • Tip : 오츠 알고리즘은 봉우리가 두 개라는 가정 위에 서 있습니다. 전경이 이미지의 아주 작은 부분만 차지하거나 밝기 분포가 셋 이상으로 갈라지면 엉뚱한 값을 고를 수 있으므로, 히스토그램을 먼저 확인하는 것이 좋습니다.



영역 기반 분할(Region-based Segmentation)

임계값 분할이 픽셀을 하나씩 따로 판단한다면, 영역 기반 분할은 이웃 픽셀과의 관계를 함께 봅니다. 서로 붙어 있고 성질이 비슷한 픽셀을 하나의 영역으로 묶어 나가는 방식입니다.

영역 확장(Region Growing)은 씨앗(Seed)이 되는 픽셀에서 시작해, 이웃 픽셀의 밝기나 색상이 기준 안에 들면 같은 영역으로 편입시키고 다시 그 이웃을 검사하는 과정을 반복합니다. 영역이 연결되어 있음이 보장된다는 장점이 있지만, 씨앗의 위치와 허용 기준에 결과가 크게 좌우됩니다. OpenCV의 floodFill이 이 원리로 동작합니다.

워터셰드(Watershed)는 이미지의 밝기를 지형의 높낮이로 해석합니다. 가장자리처럼 밝기 변화가 큰 곳은 산등성이, 변화가 작은 곳은 분지가 됩니다. 각 분지에 물을 채워 올리다 서로 다른 분지의 물이 만나는 지점에 댐(경계선) 을 세우면, 댐으로 둘러싸인 각 분지가 하나의 영역이 됩니다.

워터셰드는 서로 맞닿은 물체를 떼어 내는 데 특히 효과적입니다. 겹쳐 쌓인 동전이나 붙어 있는 세포는 이진화만으로는 하나의 덩어리로 나오지만, 워터셰드는 그 사이의 좁은 골짜기를 경계로 인식해 분리합니다. 다만 작은 밝기 변화마다 분지가 생겨 영역이 지나치게 잘게 쪼개지는 과분할(Over-segmentation)이 발생하기 쉽습니다.

이를 막기 위해 OpenCV의 watershed는 어느 지점이 어느 영역에 속하는지를 미리 알려 주는 마커(Marker)를 입력받습니다. 마커가 지정된 분지에서만 물이 차오르므로, 마커의 수만큼만 영역이 만들어집니다. 마커는 거리 변환(Distance Transform)으로 각 물체의 중심부를 찾아 자동으로 생성하거나, 사용자가 직접 표시할 수 있습니다.

  • Tip : 워터셰드의 품질은 마커의 품질이 결정합니다. 알고리즘 자체를 조정하기보다 거리 변환의 임계값이나 모폴로지 연산으로 마커가 물체마다 정확히 하나씩 놓이도록 만드는 데 노력을 들이는 편이 효과적입니다.



군집화 기반 분할(Clustering-based Segmentation)

픽셀을 색상 공간 위의 점으로 보면, 분할은 비슷한 점끼리 묶는 군집화(Clustering) 문제가 됩니다. 이웃 관계를 보지 않고 값의 분포만으로 영역을 나누므로, 서로 떨어져 있어도 색이 같으면 같은 영역으로 묶입니다.

K-평균(K-Means)은 전체 픽셀을 미리 정한 \(k\)개의 군집으로 나눕니다. 임의의 중심 \(k\)개에서 출발해 각 픽셀을 가장 가까운 중심에 배정하고, 배정된 픽셀들의 평균으로 중심을 옮기는 과정을 수렴할 때까지 반복합니다. 결과적으로 이미지는 \(k\)가지 대표 색으로 단순화되며, 이 때문에 색상 양자화(Color Quantization)에도 같은 방법이 사용됩니다.

\(k\)를 미리 알아야 한다는 점이 K-평균의 한계입니다. 평균 이동(Mean Shift)은 군집의 수를 정하지 않고, 각 점을 주변 점들의 밀도가 높은 방향으로 반복해서 옮겨 같은 봉우리에 도달한 점들을 하나의 군집으로 묶습니다. 움직임 추적의 MeanShift 추적기와 같은 원리이며, 색상과 위치를 함께 사용하면 이웃 관계도 어느 정도 반영됩니다.

군집화를 의도적으로 과분할에 사용하는 경우도 있습니다. 슈퍼픽셀(Superpixel)은 색과 위치가 비슷한 픽셀을 수백에서 수천 개의 작은 조각으로 묶은 것으로, SLIC(Simple Linear Iterative Clustering)이 대표적입니다. 픽셀 수백만 개 대신 조각 수천 개를 다루게 되므로 이후 처리의 연산량이 크게 줄며, 조각의 경계가 물체의 가장자리를 따라가므로 정보 손실도 적습니다.

  • Tip : K-평균은 초기 중심을 어디에 두느냐에 따라 결과가 달라집니다. OpenCV의 kmeans는 KMEANS_PP_CENTERS 플래그로 초기 중심을 서로 멀리 떨어지도록 고르는 K-Means++ 방식을 지원하며, 여러 번 실행해 가장 좋은 결과를 고르는 attempts 인자도 제공합니다.



그래프 기반 분할(Graph-based Segmentation)

픽셀을 정점(Node)으로, 이웃한 픽셀 사이의 관계를 간선(Edge)으로 두면 이미지는 하나의 그래프(Graph)가 됩니다. 간선에는 두 픽셀이 얼마나 닮았는지를 가중치로 매기며, 분할은 가중치가 작은 간선을 끊어 그래프를 여러 조각으로 나누는 문제가 됩니다.

그래프 컷(Graph Cut)은 전경과 배경이라는 두 개의 특별한 정점을 추가하고, 각 픽셀이 전경일 가능성과 배경일 가능성을 그 정점과의 간선 가중치로 둡니다. 이 그래프를 최소 비용으로 둘로 자르는 절단을 구하면, 끊긴 간선의 비용이 최소가 되는 분할을 얻습니다. 픽셀 하나하나의 색상 정보와 이웃끼리의 일관성을 하나의 수식 안에서 동시에 고려한다는 점이 앞선 방법들과 다릅니다.

GrabCut은 그래프 컷을 실제로 사용하기 쉽게 만든 알고리즘입니다. 사용자가 대상을 감싸는 사각형 하나만 그리면, 사각형 바깥을 확실한 배경으로 두고 안쪽의 색상 분포를 가우시안 혼합 모델(Gaussian Mixture Model)로 학습한 뒤, 그래프 컷과 모델 갱신을 번갈아 반복해 전경을 추출합니다. 사진 편집 도구에서 배경을 지우는 기능의 바탕이 되는 알고리즘입니다.

OpenCV의 grabCut은 마스크에 확실한 전경, 확실한 배경, 아마도 전경, 아마도 배경의 네 가지 상태를 표시할 수 있습니다. 첫 결과에서 잘못 분류된 부분을 사용자가 붓으로 덧칠해 상태를 바로잡고 다시 실행하면 결과가 점차 정교해지며, 이러한 방식을 대화형 분할(Interactive Segmentation)이라 합니다.

  • Tip : GrabCut은 전경과 배경의 색상 분포가 뚜렷이 다를 때 잘 동작합니다. 초록 풀밭 위의 초록 옷처럼 색이 겹치면 가우시안 혼합 모델이 둘을 구분하지 못하므로, 이 경우에는 사용자의 덧칠을 많이 필요로 합니다.



딥러닝 기반 분할(Deep Learning-based Segmentation)

지금까지의 방법은 모두 밝기와 색상이라는 낮은 수준의 단서에 의존합니다. 그러므로 “밝기가 다른 영역”은 나눌 수 있어도 “사람인 영역”은 나눌 수 없습니다. 픽셀마다 그것이 무엇인지를 답하려면 이미지 인식에서 다룬 것처럼 학습된 모델이 필요합니다.

딥러닝 기반 분할은 목표에 따라 세 가지로 구분됩니다.

  • 의미론적 분할(Semantic Segmentation) : 픽셀마다 클래스를 부여합니다. 사람이 세 명 있어도 모두 “사람”이라는 하나의 레이블로 칠해지며, 개체를 서로 구분하지 않습니다.
  • 개체 분할(Instance Segmentation) : 객체 검출과 분할을 결합해 개체마다 별도의 마스크를 만듭니다. 세 명의 사람은 세 개의 마스크로 나뉩니다. 다만 하늘이나 도로처럼 셀 수 없는 배경은 다루지 않습니다.
  • 전경 분할(Panoptic Segmentation) : 위 둘을 합친 것으로, 셀 수 있는 사물(Things)은 개체별로, 셀 수 없는 배경(Stuff)은 클래스별로 나누어 모든 픽셀에 빠짐없이 레이블을 부여합니다.

의미론적 분할의 출발점은 FCN(Fully Convolutional Network)입니다. 분류 모델의 마지막 완전 연결 층을 합성곱 층으로 바꾸어, 이미지 한 장당 하나의 답 대신 위치마다 답을 내는 지도를 출력하도록 만들었습니다. 그러나 합성곱과 풀링을 거치며 해상도가 크게 줄어들기 때문에, 출력을 원래 크기로 되돌리는 업샘플링(Upsampling) 과정에서 경계가 뭉개지는 문제가 있었습니다.

U-Net은 이 문제를 인코더-디코더 구조로 해결합니다. 해상도를 줄이며 특징을 추출하는 인코더와, 다시 해상도를 키우는 디코더를 U자 형태로 배치하고, 같은 해상도의 인코더 출력을 디코더에 직접 이어 붙이는 스킵 연결(Skip Connection)을 두었습니다. 디코더가 인코더의 세밀한 위치 정보를 그대로 넘겨받으므로 경계가 선명해지며, 적은 학습 데이터로도 잘 동작해 의료 영상 분야에서 표준처럼 사용됩니다.

개체 분할의 대표 모델은 Mask R-CNN입니다. 객체 검출 모델이 찾아낸 각 상자 안에서 마스크를 예측하는 분기를 하나 더 두는 구조로, 검출과 분할을 한 번에 수행합니다. 최근에는 클릭이나 상자 같은 간단한 입력만으로 학습하지 않은 물체까지 분할해 내는 범용 모델도 등장해, 대화형 분할의 역할을 딥러닝이 넘겨받고 있습니다.

  • Tip : 분할 모델의 학습에는 픽셀 단위로 칠해진 정답 데이터가 필요합니다. 상자를 그리는 검출 레이블보다 훨씬 많은 시간이 들기 때문에, 분할 데이터셋은 검출 데이터셋보다 규모가 작은 경우가 많으며 이것이 분할 모델 개발의 가장 큰 비용이 됩니다.



분할 결과의 평가(Evaluation)

분할 결과가 얼마나 정확한지는 예측한 마스크 \(P\)와 정답 마스크 \(G\)가 얼마나 겹치는지로 평가합니다. 단순히 맞춘 픽셀의 비율을 쓰면 배경이 대부분인 이미지에서는 전부 배경이라 답해도 높은 점수가 나오므로, 겹침을 직접 재는 지표를 사용합니다.

IoU(Intersection over Union)는 두 마스크의 교집합을 합집합으로 나눈 값입니다. 완전히 일치하면 1, 전혀 겹치지 않으면 0이 되며, 객체 검출의 상자 평가에 쓰이는 IoU를 픽셀 단위로 확장한 것입니다. 클래스마다 IoU를 구해 평균한 mIoU(mean IoU)가 의미론적 분할의 표준 지표로 사용됩니다.

\[IoU = \frac{|P \cap G|}{|P \cup G|}, \qquad Dice = \frac{2|P \cap G|}{|P| + |G|}\]


Dice 계수(Dice Coefficient)는 교집합을 두 배 하여 두 마스크 크기의 합으로 나눈 값으로, IoU와 항상 같은 순서로 움직이지만 작은 영역의 오차에 덜 가혹합니다. 종양처럼 전체 이미지에서 차지하는 면적이 작은 대상을 다루는 의료 영상에서 널리 쓰이며, 미분이 가능해 학습 시 손실 함수로도 사용됩니다.

  • Tip : 전통적인 분할 알고리즘은 정답 데이터 없이도 동작하지만, 그렇다고 평가까지 생략해서는 안 됩니다. 몇 장이라도 정답 마스크를 만들어 IoU를 재어 보면, 임계값이나 마커 설정을 바꿀 때 결과가 실제로 좋아지는지 수치로 확인할 수 있습니다.



분할 방식 정리

방식 주요 단서 장점 한계
임계값 · 오츠 밝기 가장 빠르고 단순함 밝기가 비슷한 물체를 구분하지 못함
영역 확장 · 워터셰드 밝기 + 이웃 관계 맞닿은 물체를 분리할 수 있음 씨앗 · 마커에 결과가 좌우됨
K-평균 · 평균 이동 색상 분포 색이 다른 영역을 자동으로 묶음 위치를 보지 않아 영역이 흩어짐
그래프 컷 · GrabCut 색상 + 이웃 일관성 적은 입력으로 전경을 정교하게 추출 전경과 배경의 색이 겹치면 취약
딥러닝 분할 학습된 의미 픽셀마다 무엇인지 답할 수 있음 픽셀 단위 정답 데이터가 필요

전통적인 방법은 무엇인지는 모르지만 어디서 나뉘는지를 찾고, 딥러닝은 그것이 무엇인지까지 답합니다. 그러나 딥러닝 모델의 결과를 모폴로지 연산으로 다듬거나, 슈퍼픽셀로 경계를 보정하거나, 워터셰드로 붙어 있는 개체를 떼어 내는 식으로 두 접근은 여전히 함께 사용됩니다.

  • Tip : 분할할 대상이 무엇인지 미리 정해져 있고 조명과 배경이 통제된 환경이라면, 공장의 검사 장비처럼 전통적인 방법만으로 충분히 안정적인 결과를 얻을 수 있습니다. 반대로 대상의 종류와 환경이 다양하다면 학습된 모델 없이는 한계가 분명합니다.



  • Writer by : 윤대희

댓글 남기기