Bagaimana Anda membaca gambar dalam array dengan python?

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

Bagaimana Anda membaca gambar dalam array dengan python?

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 ...>

Bagaimana Anda membaca gambar dalam array dengan python?

[]

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...>

Bagaimana Anda membaca gambar dalam array dengan python?

[]

Lihat juga

Lebih banyak metode interpolasi ada dalam contoh Matplotlib

Lihat juga

visualisasi 3-D. Mayavi

Lihat

  • Widget bidang gambar
  • Permukaan iso

Bagaimana Anda membaca gambar dalam array dengan python?

Gambar adalah array. menggunakan seluruh

>>> face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3))
5 mesin

Bagaimana Anda membaca gambar dalam array dengan python?

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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

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)
Bagaimana Anda membaca gambar dalam array dengan python?

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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

Filter lokal. ganti nilai piksel dengan fungsi dari nilai piksel tetangga

Lingkungan. persegi (pilih ukuran), disk, atau elemen penataan yang lebih rumit

Bagaimana Anda membaca gambar dalam array dengan python?

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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

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

Bagaimana Anda membaca gambar dalam array dengan python?

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

Bagaimana Anda membaca gambar dalam array dengan python?

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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

  • 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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

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

Bagaimana Anda membaca gambar dalam array dengan python?

[]

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

Bagaimana Anda menyimpan gambar dalam array dengan Python?

Buat contoh larik Numpy dan ubah larik ke format PIL menggunakan fungsi fromarray() dari PIL. Ini akan membuka jendela terminal baru tempat gambar akan ditampilkan. Untuk menyimpan larik Numpy sebagai gambar lokal, gunakan fungsi save() dan berikan nama file gambar dengan direktori tempat menyimpannya .

Bagaimana cara mengimpor gambar ke dalam array?

Memanipulasi dan Menyimpan Gambar .
1 impor numpy sebagai np 2 dari PIL impor Gambar 3 4im = np. larik (Gambar. buka('kolala. jpeg'). .
1load_img_rz = np. larik (Gambar. buka('kolala. jpeg'). .
1im = np. larik (Gambar. buka('kolala. jpeg')) 2 3print("Sebelum memotong. ",Aku

Bagaimana gambar direpresentasikan dalam array NumPy?

Gambar RGB tunggal dapat direpresentasikan menggunakan larik NumPy tiga dimensi (3D) atau tensor . Karena ada tiga saluran warna pada gambar RGB, kita memerlukan dimensi ekstra untuk saluran warna. Kumpulan 3 gambar RGB dapat direpresentasikan menggunakan larik NumPy empat dimensi (4D) atau tensor.

Bagaimana cara mendapatkan data gambar dengan Python?

Prosedur ekstraksi adalah. .
impor modul Gambar PIL ke dalam Shell. >>>dari PIL import Image
buat objek gambar dan buka gambar untuk mode membaca. >>>im = Gambar. buka('filesaya. png', 'r').
kami menggunakan fungsi modul Gambar yang disebut getdata() untuk mengekstrak nilai piksel