Bagian ini membahas manipulasi dan pemrosesan gambar dasar menggunakan modul ilmiah inti NumPy dan SciPy. Beberapa operasi yang tercakup dalam tutorial ini mungkin berguna untuk jenis pemrosesan array multidimensi lainnya selain pemrosesan gambar. Secara khusus, submodul menyediakan fungsi yang beroperasi pada larik NumPy n-dimensi
Lihat juga
Untuk pemrosesan gambar lebih lanjut dan rutinitas khusus gambar, lihat tutorial , yang didedikasikan untuk modul ini
Gambar = larik numerik 2-D
(atau 3-D. CT, MRI, 2D + waktu;
Di sini, gambar == Numpy array >>> face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3)) 4
Alat yang digunakan dalam tutorial ini
>>> face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3)) 5. manipulasi array dasar
>>> face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3)) _6. >>> face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3)) 2 submodul yang didedikasikan untuk pemrosesan gambar (gambar n-dimensi). Lihat dokumentasinya
>>> from scipy import ndimage _
Tugas umum dalam pemrosesan gambar
- Input/Output, menampilkan gambar
- Manipulasi dasar. memotong, membalik, memutar, …
- Pemfilteran gambar. denoising, mengasah
- Segmentasi gambar. pelabelan piksel yang sesuai dengan objek yang berbeda
- Klasifikasi
- Ekstraksi fitur
- Registrasi
- …
Isi bab
Menulis array ke file
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show()
Membuat array numpy dari file gambar
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _
dtype adalah uint8 untuk gambar 8-bit (0-255)
Membuka file mentah (kamera, gambar 3-D)
>>> face.tofile('face.raw') # Create raw file >>> face_from_raw = np.fromfile('face.raw', dtype=np.uint8) >>> face_from_raw.shape (2359296,) >>> face_from_raw.shape = (768, 1024, 3)
Perlu mengetahui bentuk dan tipe gambar (cara memisahkan byte data)
Untuk data besar, gunakan >>> face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3)) _9 untuk pemetaan memori
>>> face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3))
(data dibaca dari file, dan tidak dimuat ke dalam memori)
Bekerja pada daftar file gambar
>>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort()
Gunakan >>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort() 0 dan >>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort() 1 untuk menampilkan gambar di dalam >>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort() 2
>>> f = misc.face(gray=True) # retrieve a grayscale image >>> import matplotlib.pyplot as plt >>> plt.imshow(f, cmap=plt.cm.gray) <matplotlib.image.AxesImage object at 0x...>
Tingkatkan kontras dengan mengatur nilai min dan maks
>>> plt.imshow(f, cmap=plt.cm.gray, vmin=30, vmax=200) <matplotlib.image.AxesImage object at 0x...> >>> # Remove axes and ticks >>> plt.axis('off') (-0.5, 1023.5, 767.5, -0.5)
Gambar garis kontur
>>> plt.contour(f, [50, 200]) <matplotlib.contour.QuadContourSet ...>
[]
Untuk variasi intensitas yang halus, gunakan >>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort() 3. Untuk pemeriksaan variasi intensitas yang baik, gunakan >>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort() 4
>>> plt.imshow(f[320:340, 510:530], cmap=plt.cm.gray, interpolation='bilinear') <matplotlib.image.AxesImage object at 0x...> >>> plt.imshow(f[320:340, 510:530], cmap=plt.cm.gray, interpolation='nearest') <matplotlib.image.AxesImage object at 0x...>
[]
Lihat juga
Lebih banyak metode interpolasi ada dalam contoh Matplotlib
Lihat juga
visualisasi 3-D. Mayavi
Lihat
- Widget bidang gambar
- Permukaan iso
- …
Gambar adalah array. menggunakan seluruh >>> face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3)) 5 mesin
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show() 0
[]
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show() 1
>>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort() _6
Latihan
- Buka sebagai larik logo >>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort() _7 (http. //cikit-gambar. org/_statis/img/logo. png), atau gambar yang Anda miliki di komputer Anda
- Pangkas bagian gambar yang berarti, misalnya lingkaran python di logo
- Tampilkan larik gambar menggunakan >>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort() 0. Ubah metode interpolasi dan perbesar untuk melihat perbedaannya
- Ubah gambar Anda menjadi skala abu-abu
- Tingkatkan kontras gambar dengan mengubah nilai minimum dan maksimumnya. Opsional. gunakan >>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort() _9 (baca docstring. ) untuk menjenuhkan 5% piksel paling gelap dan 5% piksel paling terang
- Simpan array ke dua format file berbeda (png, jpg, tiff)
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show() 2
[]
Filter lokal. ganti nilai piksel dengan fungsi dari nilai piksel tetangga
Lingkungan. persegi (pilih ukuran), disk, atau elemen penataan yang lebih rumit
Filter Gaussian dari >>> face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3)) 2
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show() _3
Filter seragam
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show() _4
[]
Pertajam gambar buram
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show() 5
menambah bobot tepi dengan menambahkan perkiraan Laplacian
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show() _6
[]
Wajah berisik
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show() _7
Filter Gaussian menghaluskan noise… dan juga tepiannya
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show() _8
Sebagian besar filter isotropik linier lokal mengaburkan gambar (>>> f = misc.face(gray=True) # retrieve a grayscale image >>> import matplotlib.pyplot as plt >>> plt.imshow(f, cmap=plt.cm.gray) <matplotlib.image.AxesImage object at 0x...> 1)
Filter median mempertahankan tepian dengan lebih baik
from scipy import misc import imageio f = misc.face() imageio.imsave('face.png', f) # uses the Image module (PIL) import matplotlib.pyplot as plt plt.imshow(f) plt.show() _9
[]
Filter tengah. hasil yang lebih baik untuk batas lurus (kelengkungan rendah)
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _0
[]
Filter peringkat lainnya. >>> f = misc.face(gray=True) # retrieve a grayscale image >>> import matplotlib.pyplot as plt >>> plt.imshow(f, cmap=plt.cm.gray) <matplotlib.image.AxesImage object at 0x...> 2, >>> f = misc.face(gray=True) # retrieve a grayscale image >>> import matplotlib.pyplot as plt >>> plt.imshow(f, cmap=plt.cm.gray) <matplotlib.image.AxesImage object at 0x...> 3
Filter non-linear lokal lainnya. Wiener (>>> f = misc.face(gray=True) # retrieve a grayscale image >>> import matplotlib.pyplot as plt >>> plt.imshow(f, cmap=plt.cm.gray) <matplotlib.image.AxesImage object at 0x...> _4), dll
Filter non-lokal
Latihan. denoising
- Buat gambar biner (dari 0 dan 1) dengan beberapa objek (lingkaran, elips, kotak, atau bentuk acak)
- Tambahkan beberapa kebisingan (mis. g. , 20% dari kebisingan)
- Cobalah dua metode denoising yang berbeda untuk menghilangkan noise pada gambar. penyaringan gaussian dan penyaringan median
- Bandingkan histogram dari dua gambar denoised yang berbeda. Yang mana yang paling dekat dengan histogram dari gambar asli (bebas noise)?
Lihat juga
Lebih banyak filter denoising tersedia di >>> f = misc.face(gray=True) # retrieve a grayscale image >>> import matplotlib.pyplot as plt >>> plt.imshow(f, cmap=plt.cm.gray) <matplotlib.image.AxesImage object at 0x...> 5, lihat tutorialnya
Lihat wikipedia untuk definisi morfologi matematika
Menyelidiki gambar dengan bentuk sederhana (elemen penataan), dan memodifikasi gambar ini sesuai dengan bagaimana bentuk cocok atau tidak sesuai dengan gambar secara lokal
Elemen penataan
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _1
Erosi = filter minimum. Ganti nilai piksel dengan nilai minimal yang dicakup oleh elemen penataan
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _2
Pelebaran. saringan maksimum
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _3
Juga berfungsi untuk gambar bernilai abu-abu
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _4
[]
Pembukaan. erosi + pelebaran
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _5
Aplikasi. menghilangkan kebisingan
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _6
[]
Penutupan. pelebaran + erosi
Banyak operasi morfologi matematika lainnya. hit and miss transform, tophat, dll
Data sintetis
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _7
Gunakan operator gradien (Sobel) untuk menemukan variasi intensitas tinggi
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _8
[]
- Segmentasi berbasis histogram (tanpa informasi spasial)
>>> from scipy import misc >>> import imageio >>> face = misc.face() >>> imageio.imsave('face.png', face) # First we need to create the PNG file >>> face = imageio.imread('face.png') >>> type(face) <class 'imageio.core.util.Array'> >>> face.shape, face.dtype ((768, 1024, 3), dtype('uint8')) _9
[]
Gunakan morfologi matematika untuk membersihkan hasilnya
>>> face.tofile('face.raw') # Create raw file >>> face_from_raw = np.fromfile('face.raw', dtype=np.uint8) >>> face_from_raw.shape (2359296,) >>> face_from_raw.shape = (768, 1024, 3) 0
[]
Latihan
Periksa operasi rekonstruksi (erosi + propagasi) menghasilkan hasil yang lebih baik daripada pembukaan/penutupan
>>> face.tofile('face.raw') # Create raw file >>> face_from_raw = np.fromfile('face.raw', dtype=np.uint8) >>> face_from_raw.shape (2359296,) >>> face_from_raw.shape = (768, 1024, 3) 1
Latihan
Periksa bagaimana langkah denoising pertama (mis. g. dengan filter median) memodifikasi histogram, dan memeriksa bahwa segmentasi berbasis histogram yang dihasilkan lebih akurat
Lihat juga
Algoritme segmentasi yang lebih canggih ditemukan di >>> for i in range(10): .. im = np.random.randint(0, 256, 10000).reshape((100, 100)) .. imageio.imsave('random_%02d.png' % i, im) >>> from glob import glob >>> filelist = glob('random*.png') >>> filelist.sort() 7. Lihat
Lihat juga
Paket Ilmiah Lainnya menyediakan algoritme yang dapat berguna untuk pemrosesan gambar. Dalam contoh ini, kami menggunakan fungsi pengelompokan spektral dari >>> f = misc.face(gray=True) # retrieve a grayscale image >>> import matplotlib.pyplot as plt >>> plt.imshow(f, cmap=plt.cm.gray) <matplotlib.image.AxesImage object at 0x...> 7 untuk mengelompokkan objek yang direkatkan