형태학적 연산(Morphology)이란? AI에서 픽셀을 줄이고 늘려 이미지의 모양을 다듬는 방법
TL;DR
형태학적 연산(Morphological Operations)은 구조 요소라는 작은 모양을 이미지에 대어 픽셀 영역을 줄이거나 늘리는 영상 처리 방법입니다. 침식과 팽창을 조합한 열림·닫힘은 이진 마스크의 작은 점이나 틈을 다룰 때 쓰입니다. 연산은 물체의 의미를 학습하지 않으며 설정에 따라 실제 결함이나 가는 선까지 지울 수 있습니다.
핵심 3줄 요약
- 핵심 1
주변 픽셀과 모양을 함께 봅니다. 구조 요소가 덮는 위치를 기준으로 전경 영역을 줄이거나 늘립니다. - 핵심 2
연산 순서가 결과를 바꿉니다. 열림은 침식 뒤 팽창, 닫힘은 팽창 뒤 침식을 적용합니다. - 핵심 3
깔끔한 화면이 정답은 아닙니다. 작은 잡음과 실제 작은 물체를 구별하려면 원본·정답과 비교해야 합니다.
이 글에서 다룰 내용
- 형태학적 연산의 한 문장 정의
- 작은 점과 틈으로 이해하는 침식·팽창
- AI 영상 처리에서 쓰는 이유와 구조 요소
- 열림·닫힘과 주변 용어의 차이
- 실전 사용처와 설정 체크리스트
- 얇은 선·경계·반복 횟수의 주의점
- AI 초보자가 자주 묻는 질문
형태학적 연산을 한 문장으로 정의하면 무엇인가요?
형태학적 연산은 구조 요소가 지정한 이웃을 살펴 이미지의 영역이나 밝기를 바꾸는 비선형 영상 처리 방법입니다.
모폴로지 연산이라고도 부릅니다. 이 글에서는 물체에 해당하는 전경을 1, 배경을 0으로 표시한 이진 마스크부터 설명합니다. 전경을 흰색으로 그렸다면 침식은 흰 영역을 깎고 팽창은 흰 영역을 넓히는 쪽으로 작동합니다.
구조 요소는 연산에 참여할 이웃 위치를 표시한 작은 틀입니다. 라이브러리 문서에서는 커널이나 footprint라고도 부릅니다. 틀의 크기와 모양을 바꾸면 보존되는 선과 사라지는 점도 달라집니다.
한 줄 정리: 형태학적 연산은 픽셀에 번호만 붙이는 작업이 아니라 입력 이미지의 모양 자체를 바꾸는 작업입니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 흰 부품과 검은 배경으로 된 검사 마스크를 다듬는다고 가정해 보겠습니다. 부품 바깥에는 흰 점이 하나 떨어져 있고 부품 안쪽에는 검은 틈이 작게 생겼습니다. 두 문제를 같은 방향으로 밀어 처리하면 한쪽을 고치면서 다른 쪽을 키울 수 있습니다.
원리를 보려고 한 줄짜리 마스크를 쓰겠습니다. 구조 요소는 가운데 칸과 좌우 한 칸을 보는 대칭 틀이며 줄 바깥은 0으로 둡니다. 아래 숫자는 실제 제품이나 모델의 측정값이 아니라 연산 순서를 설명하는 계산 예시입니다.
- 열림 예시 입력: 00100111000. 떨어진 1 하나와 이어진 1 세 개가 있습니다.
- 침식 결과: 00000010000. 세 칸이 모두 1인 위치만 남습니다.
- 그 결과를 팽창하면 00000111000입니다. 긴 덩어리는 돌아오고 떨어진 점은 사라집니다.
- 닫힘 예시 입력: 00110110000. 두 덩어리 사이에 0 한 칸이 있습니다.
- 팽창 뒤 침식한 결과는 00111110000입니다. 이 조건에서는 가운데 틈이 메워집니다.
첫 예시의 전경 칸은 4개에서 3개로 줄고 둘째 예시는 4개에서 5개로 늘었습니다. 보기 좋게 정돈했더라도 면적은 이미 달라졌습니다. 실제 작은 흠집을 제거했다면 검사 성능이 나빠질 수도 있습니다.
쉬운 예시: 작은 틀을 통과할 만큼 두꺼운 부분만 남겼다가 넓히면 열림입니다. 먼저 넓혀 좁은 틈을 잇고 다시 줄이면 닫힘입니다. 두 연산 모두 모든 원형을 복원하지는 않습니다.
왜 AI를 사용할 때 형태학적 연산이 중요한가요?
영상 처리 단계 사이에서 마스크를 조절합니다
밝기 임계값으로 만든 마스크에는 조명이나 센서 잡음 때문에 점이 남을 수 있습니다. 형태학적 연산은 이런 출력에 정해진 규칙을 적용합니다. 학습 데이터를 더 모으지 않고도 처리하지만 잘못된 설정 역시 모든 이미지에 일괄 적용됩니다.
영역을 세거나 재기 전에 결과를 바꿉니다
연결 성분 레이블링(CCL)은 이어진 전경 덩어리에 번호를 붙입니다. 그 전에 열림으로 작은 덩어리를 없애면 영역 수가 줄고 닫힘으로 이웃 덩어리를 이으면 서로 다른 물체가 한 영역이 될 수 있습니다. 뒤 단계의 개수와 면적을 함께 봐야 하는 이유입니다.
모델의 출력도 검증 없이 고치지 않습니다
세그멘테이션 모델이 만든 이진 마스크에도 후처리 후보로 적용할 수 있습니다. 다만 모델 출력이 더 매끈해졌다는 이유만으로 정확도가 높아지지는 않습니다. 작은 대상의 누락, 서로 다른 대상의 합쳐짐, 경계 이동을 실제 정답과 비교하는 과정이 필요합니다.
핵심 인사이트: 형태학적 연산은 주어진 모양 규칙으로 출력을 바꿉니다. 잡음인지 실제 대상인지 판단하는 기준은 작업자가 별도로 정합니다.
침식·팽창과 열림·닫힘은 어떻게 작동하나요?
침식과 팽창은 같은 이웃을 다르게 읽습니다
기본 이진 침식은 구조 요소의 유효한 위치가 모두 전경인 곳만 남깁니다. 팽창은 그 위치 중 전경이 하나라도 있으면 결과를 전경으로 만듭니다. 여기서는 중심이 있는 대칭 구조 요소를 가정하며 구현의 기준점과 경계 규칙도 결과에 영향을 줍니다.
열림과 닫힘은 순서가 반대입니다
열림(opening)은 침식한 결과에 같은 구조 요소로 팽창을 적용합니다. 작은 전경 돌출부나 점을 제거하고 좁은 연결부를 끊을 수 있습니다. 닫힘(closing)은 팽창 뒤 침식을 적용해 좁은 틈이나 작은 배경 구멍을 메우는 데 쓰입니다. 어떤 크기까지 바뀌는지는 구조 요소와 대상의 모양에 달려 있습니다.
구조 요소의 방향과 크기를 맞춥니다
작은 정사각형, 원반에 가까운 모양, 가로로 긴 모양은 서로 다른 이웃을 선택합니다. 가로로 긴 구조 요소를 쓸 때의 결과를 원형 구조 요소에 그대로 기대하면 안 됩니다. 같은 픽셀 크기라도 이미지 해상도가 달라지면 실제 물체에 닿는 범위도 달라집니다.
OpenCV는 침식·팽창 함수와 morphologyEx로 이런 연산을 지원합니다. SciPy의 이진 열림·닫힘은 structure로 이웃 모양을 받습니다. 라이브러리마다 기본 구조 요소와 경계 처리 옵션이 같다고 가정하지 말고 명시적으로 맞추는 편이 안전합니다.
실전 팁: 작은 구조 요소로 시작해 중간 마스크를 저장하세요. 최종 결과만 보면 어느 단계에서 선이 끊기거나 물체가 합쳐졌는지 찾기 어렵습니다.
형태학적 연산과 헷갈리는 용어는 무엇이 다른가요?
이진화와 형태학적 연산의 차이
오츠 이진화는 밝기 분포에서 임계값을 골라 픽셀을 나누는 방법입니다. 형태학적 연산은 선택한 이웃 규칙으로 영역을 바꿉니다. 이진화 뒤에 함께 사용할 수 있지만 임계값을 자동으로 고르는 문제와 형상을 다듬는 문제는 구분합니다.
연결 성분 레이블링과의 차이
연결 성분 레이블링은 입력의 연결 관계를 따라 각 덩어리에 식별 번호를 줍니다. 형태학적 연산은 그 전에 픽셀을 바꿔 연결 관계 자체를 달라지게 할 수 있습니다. 번호가 달라진 것과 물체가 실제로 붙거나 사라진 것은 별도로 확인합니다.
평균 필터나 합성곱과의 차이
평균 필터는 주변 값을 더하고 나누어 밝기를 부드럽게 합니다. 여기서 설명한 평평한 구조 요소의 회색조 침식·팽창은 이웃의 최솟값·최댓값을 고릅니다. 작은 틀을 움직인다는 겉모습이 비슷해도 가중합을 계산하는 합성곱과 같은 연산은 아닙니다.
구멍 채우기와 닫힘의 차이
닫힘은 구조 요소의 규모와 모양에 맞는 틈을 메웁니다. 크기에 관계없이 모든 내부 구멍을 채우는 명령으로 이해하면 틀립니다. 큰 구멍이 남는 이유를 보지 않고 구조 요소만 키우면 인접한 물체까지 이어 붙일 수 있습니다.
비교 정리: 이진화는 전경을 고르고 형태학적 연산은 그 모양을 바꾸며 연결 성분 레이블링은 바뀐 마스크의 덩어리에 번호를 붙입니다.
실전에서는 어디에 쓰이나요?
문서 이미지의 점과 획을 다룹니다
스캔한 문서의 이진 마스크에서 작은 점을 제거하거나 끊긴 획을 다듬는 후보로 씁니다. 점이 실제 문장 부호인지, 가는 선이 글자의 일부인지에 따라 적용 여부가 달라집니다. OCR 인식 결과와 원본을 함께 비교해야 합니다.
검사 영상에서 마스크를 정리합니다
부품 후보 주변의 작은 점을 줄인 뒤 영역 수나 크기를 계산하는 흐름에 넣을 수 있습니다. 반대로 작은 점 자체가 찾으려는 결함이라면 제거하면 안 됩니다. 검사 목적을 먼저 정하고 결함 없는 이미지뿐 아니라 작은 결함이 있는 이미지도 남겨 시험합니다.
영역 경계나 작은 밝기 변화를 살핍니다
형태학적 그래디언트는 팽창 결과와 침식 결과의 차이로 영역의 가장자리 주변을 강조합니다. 톱햇은 입력에서 열림 결과를 뺀 값, 블랙햇은 닫힘 결과에서 입력을 뺀 값입니다. 선택한 구조 요소보다 작은 밝거나 어두운 무늬를 살피는 데 쓰지만 물체 종류를 알아내는 모델은 아닙니다.
실전 팁: 후처리를 넣기 전 결과도 반드시 보관하세요. 처리 없는 기준과 비교해야 어떤 작은 대상이 사라졌는지 확인할 수 있습니다.
형태학적 연산을 적용할 때 어떤 순서로 확인하나요?
1. 전경의 의미를 먼저 정합니다
0이 배경인지, 흰색이 실제 대상인지 확인합니다. 검은 글씨 문서를 그대로 넣고 흰색 대상의 예시를 따라 하면 기대와 반대로 보일 수 있습니다. 이진 입력인지 회색조 입력인지도 이 단계에서 구분합니다.
2. 없앨 것과 보존할 것을 나눕니다
지울 점의 크기뿐 아니라 남겨야 할 가장 가는 선과 가장 작은 물체를 함께 살핍니다. 좁은 틈을 잇는 목적이라면 서로 다른 물체 사이 간격도 확인합니다. 모든 이미지에 맞는 구조 요소 크기를 이름만 보고 정하지 않습니다.
3. 작은 설정부터 결과를 저장합니다
구조 요소, 연산 순서, 반복 횟수, 경계 처리와 라이브러리 버전을 기록합니다. 침식 직후와 팽창 직후를 따로 저장하면 원인을 추적하기 쉽습니다. 설정을 고를 때 쓰지 않은 이미지에서도 같은 방식으로 확인합니다.
4. 다음 작업의 기준으로 비교합니다
영역 검출이면 누락과 합쳐짐, 문서 처리면 인식 오류, 면적 측정이면 원본 대비 변화를 봅니다. 매끈한 윤곽만 평가하지 않습니다. 작은 대상이나 이미지 가장자리처럼 손실이 생기기 쉬운 사례를 따로 점검합니다.
체크리스트: 전경 정의, 구조 요소, 경계 조건, 반복 횟수, 처리 전후 이미지, 실제 작업 결과가 함께 남아 있는지 확인하세요.
사용할 때 무엇을 주의해야 하나요?
첫째, 작은 물체를 잡음으로 단정하지 않습니다. 열림은 작은 전경을 지우는 데 쓰이지만 그 점이 실제 대상인지 알지 못합니다. 가는 획과 좁은 연결부도 끊길 수 있으므로 보존할 모양을 먼저 정합니다.
둘째, 닫힘으로 붙은 물체를 확인합니다. 좁은 틈이 사라지면 서로 다른 대상이 하나가 될 수 있습니다. 구멍을 메우려던 목적과 달리 개수나 면적 판단까지 바뀌지 않았는지 살핍니다.
셋째, 반복 횟수의 의미를 구분합니다. 이상적인 조건에서 동일한 열림을 완성한 뒤 다시 적용하면 결과가 유지되는 성질이 있습니다. 그러나 API의 iterations는 침식과 팽창 각 단계를 여러 번 수행하는 뜻일 수 있습니다. 앞의 세 칸 덩어리도 침식을 두 번 먼저 하면 사라지므로 두 설정을 같은 것으로 보지 않습니다.
넷째, 경계와 기준점을 명시합니다. 이미지 밖 값을 무엇으로 볼지에 따라 가장자리 물체가 달라집니다. 대칭이 아닌 구조 요소나 기준점 변경을 쓸 때도 함수 정의를 확인합니다. 서로 다른 도구를 비교할 때는 입력뿐 아니라 이 옵션까지 맞춥니다.
다섯째, 보정한 마스크를 원본으로 덮어쓰지 않습니다. 픽셀을 지우거나 합친 뒤 원래 정보를 항상 되살릴 수는 없습니다. 후처리 없는 결과와 단계별 결과를 분리해 보관해야 설정을 되돌리고 실패 원인을 확인하기 쉽습니다.
주의: 형태학적 연산은 이미지를 더 정확하게 만든다는 보증이 아닙니다. 작은 대상의 보존과 다음 작업의 오류를 확인한 뒤 적용 범위를 정하세요.
자주 묻는 질문
Q1. 형태학적 연산은 AI 모델을 학습하는 방법인가요?
아닙니다. 여기서 설명한 연산은 구조 요소와 입력 이미지가 정해지면 규칙대로 계산합니다. AI 영상 처리의 전처리나 후처리에 넣을 수 있지만 침식·팽창 자체가 학습 모델은 아닙니다.
Q2. 이진 마스크에서만 쓸 수 있나요?
아닙니다. 회색조 영상에도 씁니다. 평평한 구조 요소가 보는 이웃 값이 10, 80, 30이라면 가운데 위치의 침식 결과는 최솟값 10, 팽창 결과는 최댓값 80입니다. 이진 영상에서의 줄고 늘어남을 밝기 값 선택으로 넓혀 이해할 수 있습니다.
Q3. 열림을 하면 작은 점만 정확히 지워지나요?
항상 그렇지는 않습니다. 같은 구조 요소에 맞지 않는 가는 선이나 좁은 연결부도 바뀔 수 있습니다. 작은 점이 실제 관심 대상이라면 열림을 쓰지 않는 편이 나을 수도 있습니다.
Q4. 닫힘은 떨어진 물체를 분리해 주나요?
기본 역할은 그 반대 방향입니다. 팽창을 먼저 적용하므로 좁은 간격을 잇거나 작은 틈을 메울 수 있습니다. 붙은 물체를 원하는 단위로 나누려면 별도 방법과 작업 기준을 검토합니다.
Q5. 커널 크기와 반복 횟수는 크게 잡을수록 좋나요?
아닙니다. 범위를 넓히면 보존해야 할 작은 모양까지 바뀔 수 있습니다. 같은 크기라도 구조 요소 모양에 따라 결과가 다릅니다. 작은 설정과 처리 없는 기준을 함께 비교하며 목적에 맞는 값을 고릅니다.
출처
마무리
형태학적 연산은 구조 요소로 이미지의 이웃을 읽어 픽셀 영역이나 밝기를 바꾸는 방법입니다. 침식과 팽창을 조합하는 순서에 따라 열림과 닫힘이 되며 작은 점을 줄이거나 좁은 틈을 메우는 작업에 쓰입니다.
초보자라면 전경이 무엇인지, 남겨야 할 가장 작은 모양은 무엇인지부터 확인하세요. 그다음 구조 요소와 반복·경계 설정을 기록하고 원본 및 실제 작업 결과와 비교하면 됩니다. 잘 정리된 화면보다 대상이 제대로 남아 있는지가 먼저입니다.
