워터마크 제거는 손실적이지 않습니다 — 당신은 잘못된 도구를 사용해 왔을 뿐입니다
요약
이미지 워터마크 제거가 손실적이라는 통념과 달리, 알파 합성(alpha compositing) 원리를 이용하면 원본 픽셀을 수학적으로 완벽하게 복구할 수 있습니다. AI를 통한 재구성이 아닌 산술 연산을 통해 데이터 손실 없이 원본을 되찾는 방법을 설명합니다.
핵심 포인트
- 워터마크는 픽셀을 파괴하는 것이 아니라 알파 합성을 통해 섞이는 것임
- 알파 합성 공식을 역연산하면 추측 없이 원본 픽셀 복구 가능
- AI 모델을 통한 재구성이 아닌 결정론적 산술 연산이 핵심
이미지에서 워터마크를 제거하려고 시도해 본 사람에게 물어본다면 모두가 똑같은 말을 할 것입니다. 원본을 되찾을 수 없다는 것이죠. 원본과 비슷한 무언가를 얻게 될 뿐입니다. 마크가 있던 자리에는 부드럽게 뭉개진 패치가 남게 되며, 정면으로 바라보면 언제나 그 흔적을 알아챌 수 있습니다.
그러한 믿음은 거의 매번 옳습니다. 또한 이는 워터마크 제거라는 카테고리 전체가 잘못된 방식으로 수행되는 이유이기도 합니다.
Gemini가 이미지 구석에 찍는 가시적인 로고와 같은 특정한 종류의 워터마크의 경우, 원본을 되찾을 수 있습니다. 근사치가 아니라, 마크가 적용되기 전에 가지고 있던 실제 픽셀 값(pixel values)을 모델 없이, 업로드 없이, 그리고 그 어떤 추측도 없이 복구할 수 있습니다.
비결은 "워터마크 제거"가 사실 같은 이름을 가진 완전히 다른 두 가지 문제라는 점에 있습니다.
"손실적 (lossy)"이라는 단어에 숨겨진 가정
사람들이 워터마크 제거가 손실적(lossy)이라고 말할 때, 그 밑바탕에는 다음과 같은 명시되지 않은 논리가 깔려 있습니다:
워터마크가 사진의 일부를 가리고 있다. 그 아래에 있던 것은 사라졌다. 따라서 워터마크를 제거한다는 것은 누락된 부분을 재구성 (reconstructing) 하는 것, 즉 최선의 추측으로 구멍을 채우는 것을 의미한다.
그 논리는 빈틈이 없으며, 대부분의 워터마크에 대해서는 정확합니다. 만약 마크가 그 아래의 픽셀을 실제로 파괴했다면, 그렇습니다. 당신의 유일한 선택지는 그럴듯해 보이는 대체물을 만들어내는 것뿐입니다. 그것은 추측이며, 추측은 정의상 손실적(lossy)입니다.
하지만 이 논증 전체가 무엇에 근거하고 있는지 주목하십시오. 바로 그 아래의 픽셀이 _사라졌다_는 생각입니다.
Gemini 워터마크의 경우, 픽셀은 사라지지 않았습니다. 단지 섞여 있을 뿐입니다.
그 누구의 AI도 그 로고를 그리지 않았습니다
이 부분이 사람들을 혼란스럽게 만드는 지점입니다. 이미지가 AI 모델에서 나왔기 때문에, 워터마크를 포함한 이미지의 모든 것이 해석 불가능한 AI의 산물이며, 이를 되돌리기 위해서도 똑같이 해석 불가능한 AI가 필요할 것이라는 본능적인 생각이 들기 때문입니다.
워터마크는 AI가 아닙니다. 모델이 이미지 생성을 마친 후, 단순하고 결정론적인 (deterministic) 단계에서 로고를 그 위에 붙여넣는 것입니다. 이는 1980년대부터 모든 그래픽 스택에 존재해 온 것과 동일한 알파 합성 (alpha compositing) 방식입니다:
watermarked = α · logo + (1 − α) · original
로고가 닿는 각 픽셀에 대해, 최종 값은 로고의 색상과 원본 사진 색상의 가중치 혼합 (weighted blend)입니다. α (알파)는 해당 픽셀에서 로고가 얼마나 불투명한지를 나타냅니다. 0은 완전히 투명함을, 1은 완전히 불투명함을 의미합니다.
"손실적 (lossy)"이라는 가정을 염두에 두고 그 공식을 다시 읽어보십시오. 원본 픽셀은 여전히 그 안에 있습니다. 덮어씌워져 버려진 것이 아닙니다. 알려진 가중치와 함께 로고에 "더해진" 것입니다. 덧셈에는 역연산이 존재합니다.
더해졌다면, 빼면 됩니다
당신이 실제로 원하는 것을 위해 동일한 방정식을 풀어보십시오:
original = (watermarked − α · logo) / (1 − α)
그게 전부입니다. 이것이 핵심 아이디어입니다. 세 가지 정보 — 최종 워터마크가 찍힌 픽셀 (이미 가지고 있음), 로고의 색상 (고정되어 있고 알 수 있음), 그리고 해당 픽셀의 알파 값 — 을 알고 있다면, 원본을 정확하게 복구할 수 있습니다. 재구성 (reconstruction)도, 그럴듯한 추측 (plausible guess)도 아닌, 그저 산술 연산일 뿐입니다.
이것이 "비슷하지만 뭉개진 (close but smeared)" 결과가 여기에는 적용되지 않는 이유입니다. 뭉개짐은 도구가 데이터를 잃어버렸다고 판단하여 해당 영역을 덧칠할 때 발생합니다. 이 도구는 덧칠하지 않습니다. 방금 전 순방향 (forward direction)으로 실행되었던 계산을 역으로 수행할 뿐입니다.
함정은 알파 맵 (alpha map)입니다
하지만 함정이 있습니다. 두 가지나 있으며, 이를 건너뛴다면 이것은 단순한 판매 문구가 될 것입니다.
공식에는 모든 픽셀에 대한 α가 필요하지만, 로고에는 알파 값이 포함되어 있지 않습니다. 따라서 먼저 그것들을 복구해야 합니다.
그 방법은 당혹스러울 정도로 직접적입니다. 당신이 완전히 제어할 수 있는 단색(flat color)과 같은, 이미 알고 있는(known) 단색 배경 위에 나타난 워터마크를 가져와서, 혼합(blend) 상태로부터 역산하여 각 지점에서 로고가 얼마나 불투명한지(opaque)를 파악하는 것입니다. 일단 한 번 알파 맵(alpha map)을 구축하고 나면, Gemini가 동일한 로고를 동일한 방식으로 적용하기 때문에 매번 같은 맵을 사용할 수 있습니다. 한 번 측정하면 영원히 재사용할 수 있는 것입니다.
두 번째 걸림돌은 "무손실(lossless)"이라고 주장하는 이들이 흔히 간과하는 부분입니다.
분모를 보십시오: (1 − α). 로고가 거의 불투명할 때 — 즉, α가 1에 가까울 때 — 당신은 0에 가까운 숫자로 나누게 됩니다. 그런 픽셀들은 애초에 원본이 혼합에 거의 기여하지 않았기 때문에 복구할 수 있는 것이 거의 남아 있지 않으며, 나눗셈은 존재하는 아주 작은 오류들까지 증폭시킵니다. 로고가 완전히 불투명한 곳에서는 원본이 정말로 사라진 상태이며, 어떤 공식도 그것을 되살릴 수 없습니다. 정직하게 말하자면 그렇습니다.
여기에 이러한 이미지들이 채널당 8비트(8 bits per channel)로 저장된다는 사실을 더해야 합니다. 순방향 혼합(forward blend) 과정에서 이미 정수로 반올림이 한 번 이루어졌으며, 이는 당신이 파일을 받기도 전에 서브픽셀(sub-pixel) 단위의 정밀도가 버려졌음을 의미합니다. 수학을 역산한다고 해서 반올림된 것을 되돌릴 수는 없습니다.
따라서 정확한 주장은 "언제나 결점 없는" 것이 아닙니다. 바로 이것입니다: 로고가 반투명한, 워터마크가 찍힌 영역의 압도적인 대다수에서 당신은 의미 있는 손실 없이 원본 픽셀을 되찾을 수 있습니다. 오직 작고 완전히 불투명한 핵심 부분에서만 실제로 복구 불가능한 부분이 존재합니다. 이는 패치 전체에 얼룩이 생기는 것과는 범주적으로 다른 결과이며, 이것이 "제거는 손실적이다"라는 경험칙이 여기서는 조용히 깨지는 이유입니다.
픽셀을 건드리기 전에 워터마크를 먼저 찾아야 합니다
수식을 실행하기 전에 한 가지 더 필요한 것이 있습니다. 로고가 어디에 위치하는지 알아야 하며, 단순히 구석에 있을 것이라고 믿어서는 안 됩니다. 위치를 잘못 파악하면 로고가 전혀 없었던 하늘 영역에서 로고를 빼버리는 상황이 기쁘게(?) 발생할 것입니다.
합리적인 파이프라인(pipeline)은 비용이 적게 드는 확인 작업을 먼저 수행하며 다음과 같이 단계별로 진행합니다:
// 1. 카탈로그 조회 (Catalog lookup) — Gemini는 알려진 크기 세트를 소량 출력하며,
// 각 크기는 고정된 워터마크 크기와 마진(margin)을 가집니다.
const candidate = sizeCatalog.match(image.width, image.height);
...
검증(validation) 단계는 사용자에게 거짓말을 하지 않기 위해 가장 중요한 단계입니다. 이는 "워터마크를 제거했습니다"와 "차원(dimensions)이 우연히 일치해서 사진의 모서리를 망가뜨렸습니다" 사이의 차이를 만듭니다. 만약 역 블렌딩(reverse blend)이 일관된 결과물을 생성하지 못한다면, 아무 작업도 수행되지 않았다고 보고하는 것이 정직한 방법입니다.
브라우저에서 실행되며, 외부로 나가는 데이터는 없습니다
이 작업은 모델 추론 (model inference)이 아니라 픽셀 배열에 대한 산술 연산이기 때문에, 이미지를 어디로 보낼 이유가 없습니다. Canvas API를 통해 ImageData 버퍼로 디코딩되고, 수학적 연산은 페이지 상의 타입 배열 (typed array)에서 바로 실행되며, PNG 파일이 결과로 나옵니다. 서버도, 업로드도, 대기열(queue)도 없습니다. 전체 과정은 수백 킬로바이트(KB) 정도의 JavaScript로 이루어집니다.
이것은 적절한 도구를 선택했을 때 얻는 멋진 부수 효과입니다. "AI는 AI를 되돌려야 한다"라는 프레임은 수식 하나로 로컬에서 더 잘 처리할 수 있는 작업임에도 불구하고, 당신이 호스팅된 모델 (hosted model)과 업로드 방식을 선택하도록 유도했을 것입니다.
모델이 진정으로 필요한 경우
이것이 경계선이며, 이에 대해 정확히 짚고 넘어갈 가치가 있습니다. 이 글의 요점은 "모든 것에 AI를 사용하는 것은 과하다"가 아니라, "표식(mark)에 맞는 방법(method)을 매칭하라"는 것이기 때문입니다.
역 알파 블렌딩 (Reverse alpha blending)은 워터마크가 상단에 블렌딩되었을 때, 즉 알려진 로고, 알려진 합성(compositing) 단계, 파괴된 것이 아니라 혼합된 픽셀인 경우에 작동합니다. 그 범위를 벗어나면 적용이 중단됩니다:
- 콘텐츠 위에 완전히 불투명한(fully opaque) 표식 — 아무것도 혼합되지 않았으므로, 다시 분리(unmix)할 것도 없습니다.
- SynthID와 같이 이미지 통계 속에 짜여 들어간(woven) 보이지 않는/스테가노그래피(steganographic) 워터마크 — 상단에 붙여진 것이 아니므로 뺄셈(subtraction)이 붙잡을 대상이 없습니다.
- 실제 사진 위의 임의의 객체, 텍스트 또는 로고 — 알려진 블렌딩 공식이 없으며 그 아래의 데이터가 실제로 유실된 경우입니다.
마지막 사례가 바로 사람들이 "워터마크 제거"라는 말을 들었을 때 떠올리는 상황이며, 이는 진정으로 손실적 (lossy)입니다. 왜냐하면 그 경우에는 실제로 유실된 콘텐츠를 재구성해야 하며, 재구성 (reconstruction)은 곧 추측 (educated guess)을 의미하기 때문입니다. 그것이 바로 확산 기반 인페인팅 (diffusion-based inpainting)이 만들어진 목적입니다. 만약 이 글의 대조적인 내용 — 즉, 픽셀이 실제로 사라졌을 때 모델이 어떻게 구멍을 채우는지 — 에 대해 알고 싶다면, 제가 작성한 AI 인페인팅이 실제로 작동하는 방식 (how AI inpainting actually works) 시각적 가이드를 읽어보시기 바랍니다.
이 두 가지 접근 방식은 경쟁 관계가 아닙니다. 서로 다른 질문에 답하고 있을 뿐입니다. 하나는 알려진 연산을 역전시키는 것이고, 다른 하나는 그럴듯한 연산을 만들어내는 것입니다. 정확한 정답이 있는 문제에 추측 도구를 사용하는 것이 바로 모든 제거 작업이 손실적이라고 믿게 만드는 원인입니다.
직접 시도해보고, 소스 코드를 읽어보세요
Gemini를 위한 역-알파 (reverse-alpha) 접근 방식은 오픈 소스입니다. 알고리즘, 크기 카탈로그, 탐지 단계 등 모든 것이 공개되어 있습니다: GitHub의 gemini-watermark-remover (Allen Kuo의 원본 도구를 JavaScript로 포팅한 것입니다).
코드를 건드리지 않고 이미지에 바로 적용하고 싶다면, 위에서 설명한 파이프라인을 그대로 수행하는 브라우저 기반 Gemini 워터마크 제거기 (a browser-based Gemini watermark remover)가 있습니다. 이 도구는 로컬에서 작동하며 업로드가 필요 없고, 워터마크가 역전 가능한 형태가 아닐 경우 이를 조용히 뭉개버리는 대신 사용자에게 알려줍니다.
다음에 누군가 워터마크 제거는 항상 손실적이라고 말한다면, 그들은 일반적인 경우에는 맞지만 이 경우에는 틀린 것입니다. 수학으로 만들어진 표식은 수학으로 제거됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기