Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan penapisan morfologi asas dalam Python

Bagaimana untuk melaksanakan penapisan morfologi asas dalam Python

PHPz
PHPzke hadapan
2023-05-21 23:29:36837semak imbas

Terdapat empat operasi morfologi yang paling asas, iaitu kakisan, pengembangan, pengiraan terbuka dan pengiraan tertutup masing-masing melaksanakan empat operasi ini untuk tatasusunan binari dan tatasusunan skala kelabu

二值 灰度
binary_erosion grey_erosion 腐蚀
binary_dilation grey_dilation 膨胀
binary_closing grey_closing 闭(先膨胀后腐蚀)
binary_opening grey_opening 开(先腐蚀后膨胀)

morfologi binari

Kakisan yang dipanggil dinyatakan dalam simbol matematik sebagai

Bagaimana untuk melaksanakan penapisan morfologi asas dalam Python

di mana B

ij bermaksud apabila B BB Apabila asalan berada di (i , j), set semua nilai yang 1 dalam B.

Formula ini bermakna apabila struktur B digunakan untuk menghakis A, apabila asal B diterjemahkan kepada piksel (i,j) imej A, jika B dikelilingi sepenuhnya oleh kawasan bertindih kedua-duanya, kemudian Berikan nilai 1, jika tidak, berikan nilai 0. Apabila elemen tertentu dalam B ialah 1, jika kedudukan sepadan dalam A juga 1, maka nilai pada (i, j) ialah 1. Ini adalah contoh yang lebih intuitif.

pengembangan adalah sebaliknya, yang boleh dinyatakan sebagai

Bagaimana untuk melaksanakan penapisan morfologi asas dalam Python

Dengan kata lain, selagi kawasan bertindih B dan A bukan set kosong, kemudian (i, j) titik Hanya tetapkan kepada 1.

Contohnya adalah seperti berikut

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()

Kesannya adalah seperti berikut

Bagaimana untuk melaksanakan penapisan morfologi asas dalam Python

Operasi pembukaan adalah untuk menghakis dahulu dan kemudian mengembang; operasi penutupan adalah untuk mengembang dahulu dan kemudian menghakis Contohnya seperti berikut

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()

Kesannya adalah seperti berikut. Dapat dilihat bahawa operasi pembukaan akan mengeluarkan 1s terpencil, dan operasi penutupan akan mengeluarkan 0s terpencil.

Bagaimana untuk melaksanakan penapisan morfologi asas dalam Python

Morfologi skala kelabu

Kakisan, pengembangan dan operasi membuka dan menutup imej skala kelabu adalah lanjutan daripada keadaan binarinya, menggunakan kaedah yang serupa dengan For the logic daripada lilitan, imej tangga diambil terus daripada

, dan hakisan, pengembangan serta operasi buka dan tutup dilakukan mengikut turutan. 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()

Senarai parameter

Parameter fungsi binari dan fungsi skala kelabu adalah tidak sama yang berikut mengambil operasi penutup sebagai contoh untuk menunjukkan semua parameter daripada fungsi binari dan skala kelabu , sebagai tambahan kepada input input, parameter yang dikongsi oleh kedua-duanya ialah

  • struktur ialah jenis tatasusunan, mewakili elemen pembinaan, yang boleh difahami sebagai templat konvolusi

  • output ialah tatasusunan dengan dimensi yang sama seperti input, dan hasilnya boleh disimpan

  • tetapan penapis organ, lalai ialah 0

Borang binari Parameter lain penapisan pembelajaran adalah seperti berikut

binary_closing(input, iterations=1, mask=None, border_value=0, brute_force=False)

di mana

  • lelaran ialah bilangan pelaksanaan

  • tatasusunan topeng topeng, yang terdiri daripada tatasusunan jenis bool, kedudukan yang sepadan dengan Palsu tidak akan berubah

  • nilai_sempadan Nilai di tepi

  • brute_force Jika Palsu, hanya lelaran terakhir Hanya nilai yang diubah dalam

  • grey_closing(input, size=None, footprint=None, mode='reflect', cval=0.0)
  • saiz ialah templat penapis

  • mod pantulan pilihan, pemalar, terdekat, cermin, balut, kaedah pengisian tepi

  • nilai isian tepi cval

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan penapisan morfologi asas dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam