수학적 형태학(Morphological Operations)은 집합론, 격자론, 위상수학에 기반하여 이미지 내 객체의 기하학적 구조(모양, 크기, 연결성 등)를 분석·처리하는 이론이자 기법이다. 주로 이진(binary) 또는 회색조(grayscale) 이미지에 적용되며, 객체의 노이즈 제거, 외곽선 추출, 구멍 채우기 등 다양한 전처리·후처리 작업에 활용된다[1].
1. 구조적 요소(Structuring Element)
구조적 요소(이하 SE, Structuring Element)는 고정된 형태(사각형, 원, 십자 등)를 가진 커널로, 이미지 상에서 SE를 이동시키며 픽셀 값이 SE와 얼마나 대응되는지를 판단한다.
– SE는 이진 형태학에서는 집합 $$B\subseteq\mathbb{Z}^2$$로, 회색조에서는 매핑 함수로 확장된다[1].
– OpenCV에서의 생성 예시:
# 5×5 크기 사각형 SE 생성
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
또는
kernel = np.ones((5,5), np.uint8)
2. 기본 형태학적 연산
2.1 침식(Erosion)
– 정의(이진 이미지 $$A$$, SE $$B$$에 대해):
$$
A\ominus B = {\,z\in E \mid B_z\subseteq A\,}
$$
여기서 $$B_z={b+z\mid b\in B}$$는 SE를 $$z$$만큼 평행 이동한 것이다.
– 효과: 객체의 경계 축소, 작은 돌출부 제거, 내·외곽 ‘얇게’ 만들기[1].
– OpenCV:
eroded = cv2.erode(src, kernel, iterations=1)
2.2 팽창(Dilation)
– 정의:
$$
A\oplus B = \bigcup_{b\in B} A_b
$$
여기서 $$A_b = {a+b\mid a\in A}$$.
– 효과: 객체의 경계 확장, 작은 구멍 메우기, 두 객체 연결[1].
– OpenCV:
dilated = cv2.dilate(src, kernel, iterations=1)
2.3 열기(Opening)
– 순서: 침식 → 팽창, 식으로는
$$
A\circ B = (A\ominus B)\oplus B
$$
– 효과: 작은 객체 제거, 원래 객체의 크기·형태 대체로 유지[1].
– OpenCV:
opened = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
2.4 닫기(Closing)
– 순서: 팽창 → 침식, 식으로는
$$
A\bullet B = (A\oplus B)\ominus B
$$
– 효과: 작은 구멍 채우기, 객체 간 간격 축소[1].
– OpenCV:
closed = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
3. 파생·고급 연산
3.1 형태학적 그라디언트(Morphological Gradient)
– 정의: 팽창 결과와 침식 결과의 차이
$$
\text{Gradient}(A) = (A\oplus B) – (A\ominus B)
$$
– 효과: 객체의 테두리(외곽선) 강조[2].
3.2 탑햇(Top-Hat)
– 정의: 원본에서 열기 결과를 뺀 연산
$$
\text{TopHat}(A) = A – (A\circ B)
$$
– 효과: 밝은 객체 강조, 배경 보정 시 사용[2].
3.3 블랙햇(Black-Hat)
– 정의: 닫기 결과에서 원본을 뺀 연산
$$
\text{BlackHat}(A) = (A\bullet B) – A
$$
– 효과: 어두운 객체(또는 배경과의 대비) 강조[2].
3.4 히트-미스(Hit-or-Miss)
– 정의: 이미지 내 특정 패턴(모양) 검출용 연산. SE의 전경(1)·배경(0)을 동시에 고려하여 완전히 일치하는 위치 검출[3].
– OpenCV:
// C++ 예시
cv::Mat hitmiss;
cv::morphologyEx(src, hitmiss, cv::MORPH_HITMISS, kernel);
4. 회색조·컬러 이미지 적용
수학적 형태학은 이진 이미지에 최적화되었으나, 회색조 함수 $$f:E\to\mathbb{R}$$에도 확장되어 파트별 침식·팽창 연산으로 적용할 수 있다. OpenCV는 각 채널별로 연산을 처리하거나, 히스토그램 보정 후 이진화한 뒤 형태학적 처리를 수행하는 방식을 주로 활용한다[4].
위 기법들은 노이즈 제거, 엣지 검출, 구멍 채우기, 객체 연결 등에서 강력한 성능을 발휘하며, 컴퓨터 비전·영상 분석의 필수 전처리 과정으로 널리 사용된다.
출처
[1] 수학적 형태학 – 위키백과, 우리 모두의 백과사전 https://ko.wikipedia.org/wiki/%EC%88%98%ED%95%99%EC%A0%81_%ED%98%95%ED%83%9C%ED%95%99
[2] ② 이미지전처리 – 모폴로지 연산(cv2.morphologyEx) https://uiydlop.tistory.com/17
[3] [OpenCV][C++] 모폴로지(morphology) 연산 총정리(2) – 열림, 닫힘 … https://blog.naver.com/dorergiverny/223063911425
[4] [Image Processing] 구조적 요소(Structuring Element) 및 팽창, 침식 … https://eehoeskrap.tistory.com/495
[5] [OpenCV] Morphological Operations 모폴로지 연산 | 객체 연결하기 https://mvje.tistory.com/130
[6] [OpenCV/C++] 영상의 이진화 2 – 모폴로지 연산, 침식과 팽창, 열기와 … https://dream-and-develop.tistory.com/328
[7] [디지털영상처리] Morphological Image Processing (1) – 개발일지 https://maloveforme.tistory.com/270
[8] [이미지처리] 모폴로지연산 – velog https://velog.io/@samuelitis/%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%B2%98%EB%A6%AC-%EB%AA%A8%ED%8F%B4%EB%A1%9C%EC%A7%80%EC%97%B0%EC%82%B0
[9] OpenCV – 19. 모폴로지(Morphology) 연산 (침식, 팽창, 열림, 닫힘 … https://bkshin.tistory.com/entry/OpenCV-19-%EB%AA%A8%ED%8F%B4%EB%A1%9C%EC%A7%80Morphology-%EC%97%B0%EC%82%B0-%EC%B9%A8%EC%8B%9D-%ED%8C%BD%EC%B0%BD-%EC%97%B4%EB%A6%BC-%EB%8B%AB%ED%9E%98-%EA%B7%B8%EB%A0%88%EB%94%94%EC%96%B8%ED%8A%B8-%ED%83%91%ED%96%87-%EB%B8%94%EB%9E%99%ED%96%87
[10] OpenCV 활용한 Computer Vision – Morphology – velog https://velog.io/@crossorbit/OpenCV-Computer-Vision-Morphology-ik3fkji5
답글 남기기