영상 내에 존재하는 객체의 모양과 구조를 추출
영상을 분석하고 처리하는데 사용
미리 기하학적 형태를 알고 있는 대상물체의 정보를 반영하여 영상 내에서 원하는 부분만 추출
영상 내에는 다양한 물체들이 혼합되어 있으며 우리가 관심을 가지는 나머지 물체들은 노이즈 성분
마스크 기반 영상처리에서의 마스크 역할을 수행하는 구조요소(structuring element)를 사용하여 수행
중요한 점은 구조 요소의 형태를 미리 알고 있는 기하학적 형태로 구성할 수 있음
(자동차 뒷면 사진으로 번호판 알아내는 것도 모폴로지)
의미 : A를 B로 침식 시킨 후,그 결과에 팽창 연산을 함
길고 좁게 갈라진 틈을 메우며, 빈 구멍을 채움.
수학적 정의
의미 : A를 B로 팽창시킨 후, 그 결과에 침식 연산을 함
import cv2 as cv
import numpy as np
src = cv.imread("coin.bmp", cv.IMREAD_GRAYSCALE)
H,W = src.shape[:]
output_dilation = np.zeros((H, W), src.dtype)
output_closing = np.zeros((H, W), src.dtype)
#1.팽창 - 최댓값 선택
for y in range(H):
for x in range(W):
max = 0
for mi in range(-4, 5):
for mj in range(-4, 5):
if(-1 < y + mi < H and -1 < x + mj < W) :
tmp = src[y+mi][x+mj]
if(max < tmp):
max = tmp
output_dilation[y][x] = max
#2. 침식 - 최솟값을 선택
for y in range(H):
for x in range(W):
min = 256
for mi in range(-4, 5):
for mj in range(-4, 5):
if(-1 < y + mi < H and -1 < x + mj < W) :
tmp = output_dilation[y+mi][x+mj]
if(min > tmp):
min = tmp
output_closing[y][x] = min
cv.imshow("input", src)
cv.imshow("output_dilation", output_dilation)
cv.imshow("output_closing", output_closing)
cv.waitKey(0)
import cv2 as cv
import numpy as np
import lab04_otsu
src = cv.imread("rice.bmp", cv.IMREAD_GRAYSCALE)
H,W = src.shape[:]
output_errosion = np.zeros((H, W), src.dtype)
output_opening = np.zeros((H, W), src.dtype)
output_tophat = np.zeros((H, W), src.dtype)
output = np.zeros((H, W), src.dtype)
#1. 침식 - 최솟값을 선택
for y in range(H):
for x in range(W):
min = 256
for mi in range(-6, 7):
for mj in range(-6, 7):
if(-1 < y + mi < H and -1 < x + mj < W):
tmp = src[y+mi][x+mj]
if(min > tmp) :
min = tmp
output_errosion[y][x] = min
#2. 침식 후 팽창 - 최댓값 선택
for y in range(H):
for x in range(W):
max = 0
for mi in range(-6,7):
for mj in range(-6,7):
if(-1 < y + mi < H and -1 < x + mj < W) :
tmp = output_errosion[y+mi][x+mj]
if(max < tmp):
max = tmp
output_opening[y][x] = max
#3. 영상 빼기
for y in range(H):
for x in range(W):
output_tophat[y][x] = src[y][x] - output_opening[y][x]
#4.이진화 - otsu알고리즘 이용
output = lab04_otsu.otsu(output_tophat)
cv.imshow("input", src)
cv.imshow("output_opening", output_opening)
cv.imshow("output_tophat", output_tophat)
cv.imshow("output", output)
cv.waitKey(0)