가장 기본적인 네 가지 형태학적 연산, 즉 침식, 확장, 개방형 계산 및 폐쇄형 계산이 있습니다. `scipy.ndimage는 이진 배열과 회색조 배열에 각각 이 네 가지 연산을 구현합니다.
Binary | grayscale | |
---|---|---|
binary_erosion | grey_erosion | corrosion |
binary_dilation | grey_dilation | expansion |
bin ary_closing | grey_closing | 폐쇄(첫 번째 팽창 후 부식) |
binary_opening | grey_opening | opening( 먼저 부식하고 확장) |
소위 부식은 수학 기호로 다음과 같이 표현됩니다.
여기서 Bij는 B BB의 원점이 (i , j)에 있을 때를 의미합니다. , B에서 1인 모든 값의 집합.
이 공식은 구조 B가 A를 부식시키는 데 사용될 때 B의 원점을 이미지 A의 픽셀(i, j)로 변환할 때 B가 둘이 겹치는 영역으로 완전히 둘러싸여 있으면 값은 1에 할당됩니다. 그렇지 않으면 값은 0입니다. B의 특정 요소가 1일 때 A의 해당 위치도 1이면 (i, j)의 값은 1입니다. 이는 보다 직관적인 예입니다.
인플레이션은 그 반대이며,
로 표현할 수 있다. 즉, B와 A의 겹치는 면적이 공집합이 아닌 한, (i, j)점은 로 설정된다. 1.
예는 다음과 같습니다
import numpy as np import matplotlib.pyplot as plt import scipy.ndimage as sn x = np.zeros([20,20]) x[5:15, 5:15] = 1 x_ero = sn.binary_erosion(x) x_dil = sn.binary_dilation(x) fig = plt.figure() ax = fig.add_subplot(1,3,1) ax.imshow(x) plt.title("original") ax = fig.add_subplot(1,3,2) ax.imshow(x_ero) plt.title("erosion") ax = fig.add_subplot(1,3,3) ax.imshow(x_dil) plt.title("dilation") plt.show()
효과는 다음과 같습니다
열림 작업은 먼저 부식한 다음 확장하고 닫는 작업은 먼저 확장한 다음 부식합니다. 그 효과는 다음과 같습니다. 열기 작업은 격리된 1을 제거하고 닫는 작업은 격리된 1을 제거합니다. 작업은 격리된 0을 제거합니다.
회색조 형태
x = np.zeros([20,20]) x[5:15, 5:15] = 1 x[10:12,10:12] = 0 x[2:4, 2:4] = 1 x_open = sn.binary_opening(x) x_close = sn.binary_closing(x) fig = plt.figure() ax = fig.add_subplot(1,3,1) ax.imshow(x) plt.title("original") ax = fig.add_subplot(1,3,2) ax.imshow(x_open) plt.title("opening") ax = fig.add_subplot(1,3,3) ax.imshow(x_close) plt.title("closing") plt.show()
scipy
매개변수 목록이진 함수와 그레이스케일 함수의 매개변수는 동일하지 않습니다. 아래 예와 같이 닫기 작업을 수행하면 입력 입력을 제외한 이진 및 그레이스케일 함수의 모든 매개변수가 공통됩니다.
from scipy.misc import ascent img = ascent() funcs = { "original": lambda x, tmp:x, "erosion" : sn.grey_erosion, "dilation" : sn.grey_dilation, "opening" : sn.grey_opening, "closing" : sn.grey_closing } fig = plt.figure() for i, key in enumerate(funcs): ax = fig.add_subplot(2,3,i+1) plt.imshow(funcs[key](img, (10,10)), cmap=plt.cm.gray) plt.title(key) plt.show()
여기서
binary_closing(input, iterations=1, mask=None, border_value=0, brute_force=False)
위 내용은 Python에서 기본 형태학적 필터링을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!