Image Matting
이미지 매팅은 픽셀 단위의 전경 투명도를 추정하여 머리카락 같은 세밀한 디테일을 보존하고 자연스러운 누끼와 사실적인 배경 합성을 지원합니다.
이미지 매팅은 이미지의 각 픽셀에서 전경이 차지하는 비율을 추정하는 과정입니다. 출력 결과인 알파 매트는 개별 머리카락, 털, 부드러운 경계처럼 부분적으로 투명한 디테일을 보존하여 피사체를 다른 배경 위에 자연스럽게 배치할 수 있도록 합니다. 알파 매팅이라고도 하는 이 컴퓨터 비전 작업은 정밀한 누끼 작업과 이미지 합성을 지원합니다. 실제 사진 액자용 매트와 의료 시설의 바닥 매트 시공에서 쓰이는 "matting"은 별개의 의미입니다.
알파 매트의 작동 원리#
알파 매트는 값이 0과 1 사이인 단일 채널 이미지입니다. 0은 배경, 1은 완전히 불투명한 전경을 나타내며, 중간값은 전경의 부분적인 픽셀 점유율이나 투명도를 나타냅니다. 알파 값은 픽셀의 혼합 비율을 나타내고, 모델의 신뢰도는 예측에 대한 확신을 나타냅니다. 가는 머리카락은 픽셀의 일부만 차지할 수 있으므로, 머리카락 자체는 불투명하더라도 중간 알파 값이 나올 수 있습니다.
표준 합성 관계는 image = alpha * foreground + (1 - alpha) * background입니다. 매팅은 기존 이미지에서 이러한 구성 요소를 추정하고, 합성은 추출한 전경을 대체 배경과 결합합니다. 전경 색상을 추정하는 것도 중요합니다. 머리카락 주변에 원래 배경의 색상이 남으면 새 합성 이미지에 색 번짐이 생깁니다.
이미지 분할은 픽셀을 영역별로 분류합니다. 시맨틱 분할은 클래스 레이블을 지정하고, 인스턴스 분할은 개별 객체를 구분합니다. 매팅은 연속적인 전경 불투명도를 추정합니다. Ultralytics YOLO26 분할은 인스턴스 마스크를 투명한 누끼로 변환하여 객체 분리를 지원합니다. 이러한 마스크는 별도의 매팅 정제 단계에서 초기 전경 윤곽선으로 사용할 수 있습니다.
트라이맵과 매팅 방법#
트라이맵은 확정된 전경, 확정된 배경, 그리고 경계나 투명한 요소를 포함하는 미확정 영역의 세 영역을 제공합니다. 이러한 형태의 데이터 어노테이션은 추정 문제에 제약 조건을 부여합니다. 인터랙티브 분할과 마찬가지로, 적은 양의 입력으로 사용자가 추출 과정을 안내할 수 있습니다. 머리카락을 확정된 배경으로 잘못 표시하면 해당 영역의 알파 값이 0으로 고정되어 누끼에서 제거됩니다.
Anat Levin, Dani Lischinski, Yair Weiss가 2006년에 자연 이미지 매팅의 폐형식 해법을 통해 소개한 폐형식 매팅은 전경과 배경의 국소 색상 가정을 사용하여 희소 선형 시스템을 구성합니다. 이 시스템을 풀면 미확정 영역 전체의 알파 값이 추정됩니다.
딥러닝 방법은 레이블이 지정된 예제에서 외관과 경계 패턴을 학습합니다. Ning Xu, Brian Price, Scott Cohen, Thomas Huang은 2017년에 딥 이미지 매팅을 소개했으며, 이 방법은 합성곱 신경망 인코더-디코더와 정제 단계를 결합합니다. 이 연구의 Adobe 매팅 데이터와 Composition-1k 테스트 세트는 널리 사용되는 평가 리소스가 되었습니다. 전경을 다양한 배경에 합성하면 데이터 증강을 통해 학습 데이터를 확장할 수 있습니다.
Python에서 매트 추정하기#
PyMatting 알파 추정 API는 폐형식 매팅을 구현합니다. pip install pymatting pillow을 설치한 다음, 샘플 이미지에서 전경과 배경의 시드 영역을 사용합니다. 여기서 회색 트라이맵 값은 솔버가 추정할 픽셀을 나타냅니다.
from urllib.request import urlopen
import numpy as np
from PIL import Image
from pymatting import estimate_alpha_cf
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
photo = Image.open(response).convert("RGB")
photo.thumbnail((256, 256))
image = np.asarray(photo, dtype=np.float64) / 255.0
# 하늘을 배경으로 표시하고 버스의 일부를 전경으로 표시합니다.
trimap = np.full(image.shape[:2], 0.5)
trimap[:20, :] = 0.0
trimap[120:145, 115:145] = 1.0
alpha = estimate_alpha_cf(image, trimap)
matte = Image.fromarray(np.uint8(np.clip(alpha, 0, 1) * 255))
matte.save("alpha_matte.png")저장된 그레이스케일 이미지는 추정된 전경 기여도를 보여 줍니다. 전경 시드 영역은 흰색, 배경 시드 영역은 검은색으로 표시되며, 그 외 영역에는 추정된 전이 값이 표시됩니다.
응용 분야 및 품질 평가#
인물 사진 편집, 제품 사진 촬영, 영화 합성에서는 배경을 교체하는 동안 세밀한 경계를 보존하기 위해 매트를 사용합니다. 인물 영상 매팅은 이 작업을 프레임 전반에 걸쳐 수행하며, 경계가 불안정하면 눈에 띄는 깜박임이 발생합니다. MODNet은 RGB 입력에서 트라이맵 없이 인물을 추출하는 실시간 추론의 검증 가능한 사례입니다. 이미지 인페인팅은 대신 선택한 영역 내부의 콘텐츠를 합성합니다.
매팅 평가는 예측된 알파 값과 기준 매트를 비교합니다. Christoph Rhemann과 동료들이 2009년에 소개한 지각 기반 매팅 벤치마크는 절대 차이의 합, 평균 제곱 오차, 그래디언트 오차, 연결성 오차를 사용합니다. 이러한 지표는 교집합 대 합집합과 같은 영역 중첩 지표를 보완합니다. 그래디언트 오차는 알파 전이의 불일치를 측정하고, 연결성 오차는 연결된 전경 구조의 단절을 측정합니다.










