>  기사  >  백엔드 개발  >  Python에서 기본 형태학적 필터링을 구현하는 방법

Python에서 기본 형태학적 필터링을 구현하는 방법

PHPz
PHPz앞으로
2023-05-21 23:29:36836검색

가장 기본적인 네 가지 형태학적 연산, 즉 침식, 확장, 개방형 계산 및 폐쇄형 계산이 있습니다. `scipy.ndimage는 이진 배열과 회색조 배열에 각각 이 네 가지 연산을 구현합니다.

Binary grayscale
binary_erosion grey_erosion corrosion
binary_dilation grey_dilation expansion
bin ary_closing grey_closing 폐쇄(첫 번째 팽창 후 부식)
binary_opening grey_opening opening( 먼저 부식하고 확장)

이원 형태

소위 부식은 수학 기호로 다음과 같이 표현됩니다.

Python에서 기본 형태학적 필터링을 구현하는 방법

여기서 Bij는 B BB의 원점이 (i , j)에 있을 때를 의미합니다. , B에서 1인 모든 값의 집합.

이 공식은 구조 B가 A를 부식시키는 데 사용될 때 B의 원점을 이미지 A의 픽셀(i, j)로 변환할 때 B가 둘이 겹치는 영역으로 완전히 둘러싸여 있으면 값은 1에 할당됩니다. 그렇지 않으면 값은 0입니다. B의 특정 요소가 1일 때 A의 해당 위치도 1이면 (i, j)의 값은 1입니다. 이는 보다 직관적인 예입니다.

인플레이션은 그 반대이며,

Python에서 기본 형태학적 필터링을 구현하는 방법

로 표현할 수 있다. 즉, 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()

효과는 다음과 같습니다

Python에서 기본 형태학적 필터링을 구현하는 방법

열림 작업은 먼저 부식한 다음 확장하고 닫는 작업은 먼저 확장한 다음 부식합니다. 그 효과는 다음과 같습니다. 열기 작업은 격리된 1을 제거하고 닫는 작업은 격리된 1을 제거합니다. 작업은 격리된 0을 제거합니다.

Python에서 기본 형태학적 필터링을 구현하는 방법회색조 형태

회색조 이미지의 부식, 확장 및 열기 및 닫기 작업은 회선과 유사한 논리를 사용하는 이진 형식의 확장입니다. 계단 이미지는

에서 직접 검색되며 부식, 확장을 수행합니다. 그리고 순차적으로 열고 닫는 작업을 수행합니다.

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

매개변수 목록

이진 함수와 그레이스케일 함수의 매개변수는 동일하지 않습니다. 아래 예와 같이 닫기 작업을 수행하면 입력 입력을 제외한 이진 및 그레이스케일 함수의 모든 매개변수가 공통됩니다.

    구조는 컨볼루션 템플릿으로 이해될 수 있는 구성 요소를 나타내는 배열 유형입니다.
  • 출력은 입력과 동일한 크기의 배열이며 결과를 저장할 수 있습니다.
  • orgin 필터 설정, 기본값은 0
  • 이진 형태적 필터링의 다른 매개변수는 다음과 같습니다
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()

여기서

    iterations는 실행 횟수입니다
  • mask 마스크 배열은 부울 배열입니다. 입력하면 False에 해당하는 위치는 변경되지 않습니다
  • border_value 가장자리의 값
  • brute_force False인 경우 마지막 반복에서 변경된 값만 업데이트됩니다
  • binary_closing(input, iterations=1, mask=None, border_value=0, brute_force=False)
    크기는 필터 템플릿입니다
  • 모드 옵션 반영, 상수, 가장 가까운, 미러, 랩, 가장자리 채우기 방법
  • cval 가장자리 채우기 값

위 내용은 Python에서 기본 형태학적 필터링을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제