
νννμ μ°μ°μ μ΄λ―Έμ§ μ²λ¦¬μ λΆμ λΆμΌμμ μ΄λ―Έμ§μ ꡬ쑰μ νΉμ§μ κ°μ‘°νκ±°λ λ³ννλ λ° μ¬μ©λλ κΈ°λ²μ λλ€. μ΄λ² κΈμμλ νννμ λ κ°μ₯ κΈ°λ³Έμ μΈ μ°μ°μΈ μΉ¨μ(Erosion)κ³Ό ν½μ°½(Dilation)μ μ€μν κ΄κ³, μ¦ 'μλμ±'μ λν΄ λ€λ£Ήλλ€.
μΉ¨μ : μΌλ‘ νκΈ°νλ©° (ꡬ쑰μμ Bλ₯Ό μ€μ¬ λ‘ μ΄λμν¨ μ§ν©)μ λͺ¨λ μμκ° Aμ ν¬ν¨λλ€λ©΄ ν΄λΉ μμΉμ λ₯Ό ν¬ν¨ν©λλ€.
μ μ :
ν½μ°½ : μΌλ‘ νκΈ°νλ©° (ꡬ쑰μμ Bλ₯Ό μ€μ¬ λ‘ μ΄λμν¨ μ§ν©)μ μμμ€ νλλΌλ Aμ ν¬ν¨λλ€λ©΄ ν΄λΉ μμΉμ λ₯Ό ν¬ν¨ν©λλ€.
μ μ :
μΉ¨μκ³Ό ν½μ°½μ νλνμ μ°μ°μ κΈ°λ³Έμ μΈ μ°μ°μ
λλ€. μ΄λ° κΈ°λ³Έμ μΈ λ μ°μ°μλ μλ‘ μ κ³Ό μ
μ²λΌ Duality κ΄κ³μ μμ΅λλ€.
μ½κ² μ€λͺ
νμλ©΄, Binary Imageμ λν΄ μΉ¨μμ°μ°μ νλ€λ©΄ μ κ²½μ΄ κΉμ¬λκ°λ―μ΄ μμμ§κ² λ©λλ€. μ΄λ₯Ό λ°°κ²½μ λν΄μ μ€λͺ
νμλ§ λ°°κ²½μ΄ μ»€μ‘λ€κ³ ν μ μμ£ , μ κ²½μ μΉ¨μ λμμ§λ§, λ°°κ²½μ ν½μ°½ νκ² λκ²μ
λλ€.
μνμμΌλ‘ νννλ©΄
λ Aμ μ¬μ§ν©(complementation)
λ Bμ λ°μ (reflection)
μ΄ κ΄κ³λ μΉ¨μκ³Ό ν½μ°½μ΄ μλ‘ μλμ μΈ κ΄κ³μ μλ€λ κ²μ 보μ¬μ€λλ€.
λ€μ λ§ν΄, νλμ μ°μ°μ λ€λ₯Έ μ°μ°μ ν΅ν΄ μ¬μ§ν©κ³Ό κ΄λ ¨λ κ΄μ μμ ννμ΄ κ°λ₯νλ€λ κ²μ λ§ν©λλ€.
μΉ¨μκ³Ό ν½μ°½μ μ μ
Duality λͺ μ
1) μ¦λͺ :
2) μ¦λͺ :
μ 리 :
μ λ μ°μ°μ μ¦λͺ μ ν΅ν΄ μΉ¨μ μ°μ° νμ μ¬μ§ν©μ΄, μλ³Έ μ΄λ―Έμ§μ μ¬μ§ν©μ μ¬μ©νμ¬ λ°μ λ ꡬ쑰μμλ‘ ν½μ°½ μ°μ°μ μνν κ²κ³Ό λμΌνλ€λ κ²μ λλ€. μ΄ μμμ νμ©νλ€λ©΄ κ³μ°μ λμ± ν¨μ¨μ μΌλ‘ ν μ μμ΅λλ€.
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import binary_erosion, binary_dilation
# μ΄μ§μμμ΄λ―λ‘ scipyμ μ΄μ§μΉ¨μ, ν½μ°½μ μ΄μ©ν¨
def complement(image): # A^c: μ΄λ―Έμ§μ μ¬μ§ν©
return np.logical_not(image)
def reflect(struct_elem): # \hat{B}: ꡬ쑰 μμ λ°μ νκΈ°
return np.flip(struct_elem)
def translate(struct_elem, x): # νν μ΄λ.
return np.roll(struct_elem, shift=x, axis=(0,1))
def erosion(image, struct_elem): # A \ominus B
return binary_erosion(image, structure=struct_elem)
def dilation(image, struct_elem): # A \oplus B
return binary_dilation(image, structure=struct_elem)
def plot_image(image, title):
plt.imshow(image, cmap='gray')
plt.title(title)
A = np.array(
[
[0,0,0,0,0,0,0,0,0,0],
[0,1,1,1,0,0,1,1,1,0],
[0,1,1,1,0,1,0,1,1,0],
[0,0,1,0,0,0,0,1,0,0],
[0,0,0,0,1,0,0,0,0,0],
[0,0,0,1,1,1,0,0,0,0],
[0,0,0,1,1,1,1,1,0,0],
[0,0,0,1,1,1,1,0,0,0],
[0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,1,1,1,1]
],
dtype=bool)
B = np.array([[0,0,0], [0,1,1], [0,1,0]], dtype=bool)
A_oplus_B = dilation(A, B)
A_ominus_B = erosion(A, B)
plt.subplot(2,2,1)
plot_image(A, "A")
plt.subplot(2,2,2)
plot_image(B, "B")
plt.subplot(2,2,3)
plot_image(A_oplus_B, "A_oplus_B")
plt.subplot(2,2,4)
plot_image(A_ominus_B, "A_ominus_B")
plt.tight_layout()
plt.show()
