Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk melaksanakan penapisan morfologi asas dalam Python
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 | 开(先腐蚀后膨胀) |
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 Dengan kata lain, selagi kawasan bertindih B dan A bukan set kosong, kemudian (i, j) titik Hanya tetapkan kepada 1. Contohnya adalah seperti berikutimport 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 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. Morfologi skala kelabuKakisan, 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 ialahbinary_closing(input, iterations=1, mask=None, border_value=0, brute_force=False)di mana
grey_closing(input, size=None, footprint=None, mode='reflect', cval=0.0)
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!