Konversi daftar piksel menjadi gambar python

Bab ini merupakan pengantar untuk menangani dan memproses gambar. Dengan contoh ekstensif, ini menjelaskan paket Python pusat yang Anda perlukan untuk bekerja dengan gambar. Bab ini memperkenalkan alat dasar untuk membaca gambar, mengonversi dan menskalakan gambar, menghitung turunan, memplot atau menyimpan hasil, dan sebagainya. Kami akan menggunakan ini sepanjang sisa buku ini

Perpustakaan Pencitraan Python [PIL] menyediakan penanganan gambar umum dan banyak operasi gambar dasar yang berguna seperti mengubah ukuran, memotong, memutar, mengubah warna, dan banyak lagi. PIL gratis dan tersedia dari http. // www. pythonware. com/produk/pil/

Dengan PIL, Anda dapat membaca gambar dari sebagian besar format dan menulis ke format yang paling umum. Modul yang paling penting adalah modul

box = [100,100,400,400]
region = pil_im.crop[box]
2. Untuk membaca gambar, gunakan

from PIL import Image

pil_im = Image.open['empire.jpg']
_

Nilai yang dikembalikan, pil_im, adalah objek gambar PIL

Konversi warna dilakukan dengan menggunakan metode

box = [100,100,400,400]
region = pil_im.crop[box]
3. Untuk membaca gambar dan mengubahnya menjadi skala abu-abu, cukup tambahkan
box = [100,100,400,400]
region = pil_im.crop[box]
4 seperti ini

pil_im = Image.open['empire.jpg'].convert['L']
_

Berikut adalah beberapa contoh yang diambil dari dokumentasi PIL, tersedia di http. // www. pythonware. com/library/pil/handbook/index. htm. Output dari contoh ditampilkan di

Konversi Gambar ke Format Lain

Menggunakan metode

box = [100,100,400,400]
region = pil_im.crop[box]
5, PIL dapat menyimpan gambar dalam sebagian besar format file gambar. Berikut adalah contoh yang mengambil semua file gambar dalam daftar nama file [daftar file] dan mengubah gambar menjadi file JPEG

Gambar 1-1. Contoh pengolahan gambar dengan PIL

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_

Fungsi PIL

box = [100,100,400,400]
region = pil_im.crop[box]
6 membuat objek gambar PIL dan metode
box = [100,100,400,400]
region = pil_im.crop[box]
5 menyimpan gambar ke file dengan nama file yang diberikan. Nama file baru akan sama dengan aslinya dengan akhiran file “. jpg” sebagai gantinya. PIL cukup pintar untuk menentukan format gambar dari ekstensi file. Ada pemeriksaan sederhana bahwa file tersebut belum menjadi file JPEG dan pesan dicetak ke konsol jika konversi gagal

Sepanjang buku ini kita akan membutuhkan daftar gambar untuk diproses. Inilah cara Anda membuat daftar nama file dari semua gambar dalam folder. Buat file bernama imtools. py untuk menyimpan beberapa rutinitas yang umumnya berguna ini dan menambahkan fungsi berikut

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_

Sekarang, kembali ke PIL

Menggunakan PIL untuk membuat thumbnail sangat sederhana. Metode

box = [100,100,400,400]
region = pil_im.crop[box]
8 mengambil tupel yang menentukan ukuran baru dan mengonversi gambar menjadi gambar mini dengan ukuran yang pas di dalam tupel. Untuk membuat thumbnail dengan sisi terpanjang 128 piksel, gunakan cara seperti ini

pil_im.thumbnail[[128,128]]

Memotong suatu wilayah dari gambar dilakukan dengan menggunakan metode

box = [100,100,400,400]
region = pil_im.crop[box]
9

box = [100,100,400,400]
region = pil_im.crop[box]

Wilayah didefinisikan oleh 4-tuple, di mana koordinatnya [kiri, atas, kanan, bawah]. PIL menggunakan sistem koordinat dengan [0, 0] di pojok kiri atas. Wilayah yang diekstraksi dapat, misalnya, diputar dan kemudian dikembalikan menggunakan metode

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
0 seperti ini

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]

Untuk mengubah ukuran gambar, panggil

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
1 dengan tuple yang memberikan ukuran baru

out = pil_im.resize[[128,128]]

Untuk memutar gambar, gunakan sudut berlawanan arah jarum jam dan

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
2 seperti ini

out = pil_im.rotate[45]

Beberapa contoh ditampilkan di. Gambar paling kiri adalah yang asli, diikuti dengan versi skala abu-abu, potongan yang dirotasi ditempelkan, dan gambar mini

Saat bekerja dengan matematika dan memplot grafik atau menggambar titik, garis, dan kurva pada gambar,

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
3 adalah perpustakaan grafik yang bagus dengan fitur yang jauh lebih canggih daripada plotting yang tersedia di PIL.
region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
_3 menghasilkan figur berkualitas tinggi seperti banyak ilustrasi yang digunakan dalam buku ini. Antarmuka
region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
_3
region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
6 adalah sekumpulan fungsi yang memungkinkan pengguna untuk membuat plot.
region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
_3 adalah open source dan tersedia secara bebas dari http. //matplotlib. sourceforge. net/, di mana dokumentasi dan tutorial mendetail tersedia. Berikut adalah beberapa contoh yang menunjukkan sebagian besar fungsi yang akan kita perlukan dalam buku ini

Merencanakan Gambar, Titik, dan Garis

Meskipun dimungkinkan untuk membuat plot batang yang bagus, diagram lingkaran, plot pencar, dll. , hanya beberapa perintah yang diperlukan untuk sebagian besar tujuan visi komputer. Yang terpenting, kami ingin dapat menunjukkan hal-hal seperti titik minat, korespondensi, dan objek yang terdeteksi menggunakan titik dan garis. Berikut adalah contoh memplot gambar dengan beberapa titik dan garis

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]

Ini memplot gambar, lalu empat titik dengan penanda bintang merah pada koordinat x dan y yang diberikan oleh daftar x dan y, dan terakhir menggambar garis [biru secara default] antara dua titik pertama dalam daftar ini. menunjukkan hasilnya. Perintah

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
_8 memulai GUI gambar dan memunculkan jendela gambar. Lingkaran GUI ini memblokir skrip Anda dan dijeda hingga jendela gambar terakhir ditutup. Anda harus memanggil
region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
_8 hanya sekali per skrip, biasanya di bagian akhir. Perhatikan bahwa
region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
_6 menggunakan asal koordinat di sudut kiri atas seperti yang umum untuk gambar. Sumbu berguna untuk debugging, tetapi jika Anda menginginkan plot yang lebih cantik, tambahkan

pil_im = Image.open['empire.jpg'].convert['L']
_0

Ini akan memberikan plot seperti yang ada di sebelah kanan sebagai gantinya

Ada banyak opsi untuk memformat warna dan gaya saat merencanakan. Yang paling berguna adalah perintah pendek yang ditampilkan di , dan. Gunakan mereka seperti ini

pil_im = Image.open['empire.jpg'].convert['L']
_1

Kontur Gambar dan Histogram

Mari kita lihat dua contoh plot khusus. kontur citra dan histogram citra. Memvisualisasikan kontur-iso gambar [atau kontur-iso dari fungsi 2D lainnya] bisa sangat berguna. Ini membutuhkan gambar skala abu-abu, karena kontur perlu diambil pada satu nilai untuk setiap koordinat [x, y]. Inilah cara melakukannya

Gambar 1-2. Contoh merencanakan dengan

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
_3. Gambar dengan titik dan garis dengan dan tanpa menunjukkan sumbu

Tabel 1-1. Perintah pemformatan warna dasar untuk memplot dengan

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
6

Warna

out = pil_im.resize[[128,128]]
3

biru

out = pil_im.resize[[128,128]]
_4

hijau

out = pil_im.resize[[128,128]]
5

merah

out = pil_im.resize[[128,128]]
6

cyan

out = pil_im.resize[[128,128]]
7

magenta

out = pil_im.resize[[128,128]]
8

kuning

out = pil_im.resize[[128,128]]
_9

hitam

out = pil_im.rotate[45]
_0

putih

Tabel 1-2. Perintah pemformatan gaya garis dasar untuk merencanakan dengan

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
6

Gaya garis

out = pil_im.rotate[45]
_2

padat

out = pil_im.rotate[45]
_3

putus-putus

out = pil_im.rotate[45]
_4

burik

Tabel 1-3. Perintah pemformatan penanda plot dasar untuk merencanakan dengan

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
6

Penanda

out = pil_im.rotate[45]
_6

titik

out = pil_im.rotate[45]
_7

lingkaran

out = pil_im.rotate[45]
_8

persegi

out = pil_im.rotate[45]
_9

bintang

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_0

plus

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_1

x

pil_im = Image.open['empire.jpg'].convert['L']
_2

Seperti sebelumnya, metode PIL

box = [100,100,400,400]
region = pil_im.crop[box]
3 melakukan konversi ke skala abu-abu

Histogram gambar adalah plot yang menunjukkan distribusi nilai piksel. Sejumlah tempat sampah ditentukan untuk rentang nilai dan setiap tempat sampah menghitung berapa banyak piksel yang memiliki nilai dalam rentang tempat sampah. Visualisasi histogram gambar [tingkat keabuan] dilakukan dengan menggunakan fungsi

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
3

pil_im = Image.open['empire.jpg'].convert['L']
_3

Argumen kedua menentukan jumlah tempat sampah yang akan digunakan. Perhatikan bahwa gambar harus diratakan terlebih dahulu, karena

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
3 menggunakan larik satu dimensi sebagai masukan. Metode
from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_5 mengonversi larik apa pun menjadi larik satu dimensi dengan nilai yang diambil berdasarkan baris. menunjukkan plot kontur dan histogram

Gambar 1-3. Contoh memvisualisasikan kontur gambar dan memplot histogram gambar dengan

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
3

Terkadang pengguna perlu berinteraksi dengan aplikasi, misalnya dengan menandai titik pada gambar, atau Anda perlu memberi anotasi pada beberapa data pelatihan.

region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
_6 hadir dengan fungsi sederhana,
from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
8, yang memungkinkan Anda melakukan hal itu. Ini contoh singkatnya

pil_im = Image.open['empire.jpg'].convert['L']
_4

Ini memplot gambar dan menunggu pengguna mengklik tiga kali di wilayah gambar jendela gambar. Koordinat [x, y] klik disimpan dalam daftar x

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_9 [http. // www. scipy. org/NumPy/] adalah paket yang populer digunakan untuk komputasi ilmiah dengan Python.
from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_9 berisi sejumlah konsep yang berguna seperti objek array [untuk merepresentasikan vektor, matriks, gambar, dan banyak lagi] dan fungsi aljabar linier. Objek array
from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_9 akan digunakan di hampir semua contoh di seluruh buku ini. [] Objek array memungkinkan Anda melakukan operasi penting seperti perkalian matriks, transposisi, menyelesaikan sistem persamaan, perkalian vektor, dan normalisasi, yang diperlukan untuk melakukan hal-hal seperti menyelaraskan gambar, membengkokkan gambar, variasi pemodelan, mengklasifikasikan gambar, mengelompokkan gambar, dan

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_9 tersedia secara bebas dari http. // www. scipy. org/Download dan dokumentasi online [http. //dokumen. scipy. org/doc/numpy/] berisi jawaban untuk sebagian besar pertanyaan. Untuk detail lebih lanjut tentang
from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
9, buku yang tersedia secara bebas adalah referensi yang bagus

Representasi Gambar Array

Saat kami memuat gambar pada contoh sebelumnya, kami mengonversinya menjadi

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
9 objek array dengan panggilan
pil_im = Image.open['empire.jpg'].convert['L']
05 tetapi tidak menyebutkan artinya. Array di
from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
9 multi-dimensi dan dapat mewakili vektor, matriks, dan gambar. Array sangat mirip dengan daftar [atau daftar daftar] tetapi dibatasi untuk memiliki semua elemen dari tipe yang sama. Kecuali ditentukan pada pembuatan, tipe akan secara otomatis diatur tergantung pada data

Contoh berikut mengilustrasikan ini untuk gambar

pil_im = Image.open['empire.jpg'].convert['L']
_5

Hasil cetak di konsol Anda akan terlihat seperti ini

pil_im = Image.open['empire.jpg'].convert['L']
_6

Tuple pertama pada setiap baris adalah bentuk array gambar [baris, kolom, saluran warna], dan string berikutnya adalah tipe data dari elemen array. Gambar biasanya dikodekan dengan bilangan bulat 8-bit yang tidak ditandatangani [uint8], jadi memuat gambar ini dan mengonversi ke array memberikan tipe "uint8" dalam kasus pertama. Kasus kedua melakukan konversi skala abu-abu dan membuat larik dengan argumen tambahan "f". Ini adalah perintah singkat untuk menyetel tipe ke floating point. Untuk opsi tipe data lainnya, lihat. Perhatikan bahwa gambar skala abu-abu hanya memiliki dua nilai dalam shape tuple;

Elemen dalam array diakses dengan indeks. Nilai pada koordinat i, j dan color channel k diakses seperti ini

pil_im = Image.open['empire.jpg'].convert['L']
_7

Beberapa elemen dapat diakses menggunakan pengirisan array. Mengiris mengembalikan tampilan ke dalam larik yang ditentukan oleh interval. Berikut adalah beberapa contoh untuk gambar skala abu-abu

pil_im = Image.open['empire.jpg'].convert['L']
_8

Perhatikan contoh dengan hanya satu indeks. Jika Anda hanya menggunakan satu indeks, itu ditafsirkan sebagai indeks baris. Perhatikan juga contoh terakhir. Indeks negatif dihitung dari elemen terakhir mundur. Kami akan sering menggunakan pemotongan untuk mengakses nilai piksel, dan ini merupakan konsep penting untuk dipahami

Ada banyak operasi dan cara untuk menggunakan array. Kami akan memperkenalkan mereka sesuai kebutuhan di seluruh buku ini. Lihat dokumentasi online atau buku untuk penjelasan lebih lanjut

Setelah membaca gambar ke

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_9 array, kita dapat melakukan operasi matematika apa pun yang kita suka pada mereka. Contoh sederhananya adalah mengubah tingkat abu-abu suatu gambar. Ambil sembarang fungsi f yang memetakan interval 0. . . 255 [atau, jika Anda suka, 0. . . 1] ke dirinya sendiri [artinya output memiliki rentang yang sama dengan input]. Berikut beberapa contohnya

pil_im = Image.open['empire.jpg'].convert['L']
_9

Contoh pertama membalikkan tingkat keabuan gambar, yang kedua menjepit intensitas ke interval 100. . . 200, dan yang ketiga menerapkan fungsi kuadrat, yang menurunkan nilai piksel yang lebih gelap. menunjukkan fungsi dan gambar yang dihasilkan. Anda dapat memeriksa nilai minimum dan maksimum dari setiap gambar menggunakan

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_0

Gambar 1-4. Contoh transformasi tingkat abu-abu. Tiga contoh fungsi bersama dengan transformasi identitas ditampilkan sebagai garis putus-putus

Gambar 1-5. Transformasi tingkat abu-abu. Menerapkan fungsi di. Membalikkan bayangan dengan f[x] = 255 – x [kiri], menjepit bayangan dengan f[x] = [100/255]x + 100 [tengah], transformasi kuadrat dengan f[x] = 255[x/255

Jika Anda mencobanya untuk masing-masing contoh di atas, Anda akan mendapatkan keluaran berikut

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_1

Kebalikan dari transformasi

pil_im = Image.open['empire.jpg'].convert['L']
05 dapat dilakukan dengan menggunakan fungsi PIL
pil_im = Image.open['empire.jpg'].convert['L']
09 sebagai

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_2

Jika Anda melakukan beberapa operasi untuk mengubah tipe dari "uint8" ke tipe data lain, seperti im3 atau im4 pada contoh di atas, Anda perlu mengonversi kembali sebelum membuat gambar PIL

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_3

Jika Anda tidak benar-benar yakin dengan jenis inputnya, Anda harus melakukannya karena ini adalah pilihan yang aman. Perhatikan bahwa

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_9 akan selalu mengubah tipe array menjadi tipe “terendah” yang dapat mewakili data. Perkalian atau pembagian dengan bilangan floating point akan mengubah larik bertipe integer menjadi float

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_9 array akan menjadi alat utama kami untuk bekerja dengan gambar dan data. Tidak ada cara sederhana untuk mengubah ukuran array, yang ingin Anda lakukan untuk gambar. Kita dapat menggunakan konversi objek gambar PIL yang ditunjukkan sebelumnya untuk membuat fungsi pengubahan ukuran gambar sederhana. Tambahkan yang berikut ini ke imtools. py

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_4

Fungsi ini akan berguna nanti

Contoh yang sangat berguna dari transformasi tingkat keabuan adalah pemerataan histogram. Transformasi ini meratakan histogram tingkat keabuan dari suatu gambar sehingga semua intensitas seumum mungkin. Ini seringkali merupakan cara yang baik untuk menormalkan intensitas gambar sebelum diproses lebih lanjut dan juga cara untuk meningkatkan kontras gambar

Fungsi transformasi dalam hal ini adalah fungsi distribusi kumulatif [cdf] dari nilai piksel pada gambar [dinormalkan untuk memetakan rentang nilai piksel ke rentang yang diinginkan]

Inilah cara melakukannya. Tambahkan fungsi ini ke file imtools. py

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_5

Fungsi ini mengambil gambar skala abu-abu dan jumlah kotak untuk digunakan dalam histogram sebagai masukan, dan mengembalikan gambar dengan histogram yang disamakan bersama dengan fungsi distribusi kumulatif yang digunakan untuk melakukan pemetaan nilai piksel. Perhatikan penggunaan elemen terakhir [indeks -1] dari cdf untuk menormalkannya antara 0. 1. Coba ini pada gambar seperti ini

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_6

dan tunjukkan contoh pemerataan histogram. Baris atas menunjukkan histogram tingkat keabuan sebelum dan sesudah pemerataan bersama dengan pemetaan cdf. Seperti yang Anda lihat, kontras meningkat dan detail area gelap kini tampak jelas

Rata-rata gambar adalah cara sederhana untuk mengurangi noise gambar dan juga sering digunakan untuk efek artistik. Menghitung gambar rata-rata dari daftar gambar tidaklah sulit. Dengan asumsi semua gambar memiliki ukuran yang sama, kita dapat menghitung rata-rata semua gambar tersebut dengan hanya menjumlahkannya dan membaginya dengan jumlah gambar. Tambahkan fungsi berikut ke imtools. py

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_7

Ini mencakup beberapa penanganan pengecualian dasar untuk melewati gambar yang tidak dapat dibuka. Ada cara lain untuk menghitung gambar rata-rata menggunakan fungsi ________4______12. Ini mengharuskan semua gambar ditumpuk ke dalam array dan akan menggunakan banyak memori jika ada banyak gambar. Kami akan menggunakan fungsi ini di bagian selanjutnya

Gambar 1-6. Contoh pemerataan histogram. Di sebelah kiri adalah gambar asli dan histogram. Plot tengah adalah fungsi transformasi tingkat abu-abu. Di sebelah kanan adalah gambar dan histogram setelah pemerataan histogram

Gambar 1-7. Contoh pemerataan histogram. Di sebelah kiri adalah gambar asli dan histogram. Plot tengah adalah fungsi transformasi tingkat abu-abu. Di sebelah kanan adalah gambar dan histogram setelah pemerataan histogram

Analisis Komponen Utama [PCA] adalah teknik yang berguna untuk pengurangan dimensi dan optimal dalam arti mewakili variabilitas data pelatihan dengan dimensi sesedikit mungkin. Bahkan gambar skala abu-abu kecil 100 × 100 piksel memiliki 10.000 dimensi, dan dapat dianggap sebagai titik dalam ruang 10.000 dimensi. Gambar megapiksel memiliki dimensi dalam jutaan. Dengan dimensi setinggi itu, tidak mengherankan jika pengurangan dimensi sangat berguna di banyak aplikasi computer vision. Matriks proyeksi yang dihasilkan dari PCA dapat dilihat sebagai perubahan koordinat menjadi sistem koordinat di mana koordinat berada dalam urutan kepentingan yang menurun

Untuk menerapkan PCA pada data gambar, gambar perlu diubah menjadi representasi vektor satu dimensi menggunakan, misalnya, metode

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
9
from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
5

Gambar yang diratakan dikumpulkan dalam satu matriks dengan menumpuknya, satu baris untuk setiap gambar. Baris kemudian dipusatkan relatif terhadap gambar rata-rata sebelum perhitungan arah dominan. Untuk menemukan komponen utama, dekomposisi nilai singular [SVD] biasanya digunakan, tetapi jika dimensinya tinggi, ada trik berguna yang dapat digunakan karena perhitungan SVD akan sangat lambat dalam kasus tersebut. Inilah tampilannya dalam kode

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_8

Fungsi ini pertama-tama memusatkan data dengan mengurangkan rata-rata di setiap dimensi. Kemudian vektor eigen yang sesuai dengan nilai eigen terbesar dari matriks kovarian dihitung, baik menggunakan trik kompak atau menggunakan SVD. Di sini kami menggunakan fungsi

pil_im = Image.open['empire.jpg'].convert['L']
15, yang mengambil bilangan bulat n dan mengembalikan daftar bilangan bulat 0. . . [n – 1]. Jangan ragu untuk menggunakan alternatif
pil_im = Image.open['empire.jpg'].convert['L']
_16, yang memberikan array, atau
pil_im = Image.open['empire.jpg'].convert['L']
17, yang memberikan generator [dan mungkin memberikan peningkatan kecepatan]. Kami akan tetap dengan
pil_im = Image.open['empire.jpg'].convert['L']
15 sepanjang buku ini

Kami beralih dari SVD untuk menggunakan trik dengan menghitung vektor eigen dari matriks kovarians XXT [lebih kecil] jika jumlah titik data kurang dari dimensi vektor. Ada juga cara untuk hanya menghitung vektor eigen yang sesuai dengan k nilai eigen terbesar [k menjadi jumlah dimensi yang diinginkan], membuatnya lebih cepat. Kami serahkan kepada pembaca yang tertarik untuk mengeksplorasi, karena ini benar-benar di luar cakupan buku ini. Baris-baris matriks V adalah ortogonal dan berisi arah koordinat dalam urutan varians menurun dari data pelatihan

Mari kita coba ini pada contoh gambar font. File fontimages. zip berisi gambar mini kecil dari karakter "a" yang dicetak dalam font berbeda dan kemudian dipindai. 2.359 font berasal dari koleksi font yang tersedia secara bebas. [] Dengan asumsi bahwa nama file dari gambar-gambar ini disimpan dalam daftar, imlist, bersama dengan kode sebelumnya, dalam file pca. py, komponen utama dapat dihitung dan ditampilkan seperti ini

from PIL import Image
import os

for infile in filelist:
  outfile = os.path.splitext[infile][0] + ".jpg"
  if infile != outfile:
    try:
      Image.open[infile].save[outfile]
    except IOError:
      print "cannot convert", infile
_9

Gambar 1-8. Gambar rata-rata [kiri atas] dan tujuh mode pertama;

Perhatikan bahwa gambar perlu diubah kembali dari representasi satu dimensi menggunakan

pil_im = Image.open['empire.jpg'].convert['L']
19. Menjalankan contoh harus memberikan delapan gambar dalam satu jendela gambar seperti yang ada di dalamnya. Di sini kami menggunakan fungsi
region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
_6
pil_im = Image.open['empire.jpg'].convert['L']
21 untuk menempatkan banyak plot dalam satu jendela

Jika Anda ingin menyimpan beberapa hasil atau data untuk digunakan nanti, modul

pil_im = Image.open['empire.jpg'].convert['L']
22, yang disertakan dengan Python, sangat berguna. Pickle dapat mengambil hampir semua objek Python dan mengubahnya menjadi representasi string. Proses ini disebut pengawetan. Merekonstruksi objek dari representasi string sebaliknya disebut unpickling. Representasi string ini kemudian dapat dengan mudah disimpan atau ditransmisikan

Mari kita ilustrasikan ini dengan sebuah contoh. Misalkan kita ingin menyimpan rata-rata gambar dan komponen utama dari gambar font di bagian sebelumnya. Ini dilakukan seperti ini

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_0

Seperti yang Anda lihat, beberapa objek dapat diasinkan ke file yang sama. Ada beberapa protokol berbeda yang tersedia untuk. pkl, dan jika tidak yakin, yang terbaik adalah membaca dan menulis file biner. Untuk memuat data di beberapa sesi Python lainnya, cukup gunakan metode

pil_im = Image.open['empire.jpg'].convert['L']
23 seperti ini

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_1

Perhatikan bahwa urutan objek harus sama. Ada juga versi yang dioptimalkan yang ditulis dalam C disebut

pil_im = Image.open['empire.jpg'].convert['L']
24 yang sepenuhnya kompatibel dengan modul pickle standar. Rincian lebih lanjut dapat ditemukan di halaman dokumentasi modul pickle http. //dokumen. python. org/perpustakaan/acar. html

Untuk sisa buku ini, kami akan menggunakan pernyataan

pil_im = Image.open['empire.jpg'].convert['L']
25 untuk menangani pembacaan dan penulisan file. Ini adalah konstruksi yang diperkenalkan di Python 2. 5 yang secara otomatis menangani pembukaan dan penutupan file [bahkan jika terjadi kesalahan saat file dibuka]. Inilah tampilan penyimpanan dan pemuatan di atas menggunakan
pil_im = Image.open['empire.jpg'].convert['L']
26

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_2

dan

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_3

Ini mungkin terlihat aneh saat pertama kali Anda melihatnya, tetapi ini adalah konstruksi yang sangat berguna. Jika Anda tidak menyukainya, gunakan saja fungsi

pil_im = Image.open['empire.jpg'].convert['L']
_27 dan
pil_im = Image.open['empire.jpg'].convert['L']
28 seperti di atas

Sebagai alternatif untuk menggunakan pickle,

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_9 juga memiliki fungsi sederhana untuk membaca dan menulis file teks yang dapat berguna jika data Anda tidak mengandung struktur yang rumit, misalnya daftar titik yang diklik pada gambar. Untuk menyimpan array x ke file, gunakan

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_4

Parameter terakhir menunjukkan bahwa format integer harus digunakan. Demikian pula, membaca dilakukan seperti ini

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_5

Anda dapat mengetahui lebih lanjut dari dokumentasi online http. //dokumen. scipy. org/doc/numpy/reference/generated/numpy. loadtxt. html

Terakhir,

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_9 memiliki fungsi khusus untuk menyimpan dan memuat array. Cari
box = [100,100,400,400]
region = pil_im.crop[box]
5 dan
pil_im = Image.open['empire.jpg'].convert['L']
23 dalam dokumentasi online untuk detailnya

pil_im = Image.open['empire.jpg'].convert['L']
_33 [http. // pedas. org/] adalah paket sumber terbuka untuk matematika yang dibangun di atas
from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
9 dan menyediakan rutin yang efisien untuk sejumlah operasi, termasuk integrasi numerik, pengoptimalan, statistik, pemrosesan sinyal, dan yang terpenting bagi kami, pemrosesan gambar. Seperti yang akan ditunjukkan berikut ini, ada banyak modul berguna di
pil_im = Image.open['empire.jpg'].convert['L']
33.
pil_im = Image.open['empire.jpg'].convert['L']
_33 gratis dan tersedia di http. // pedas. org/Unduh

Contoh klasik dan sangat berguna dari konvolusi gambar adalah pengaburan gambar Gaussian. Intinya, gambar [skala abu-abu] saya digabungkan dengan kernel Gaussian untuk membuat versi buram

Iσ = I * Gσ,

di mana * menunjukkan konvolusi dan Gσ adalah kernel 2D Gaussian dengan standar deviasi σ didefinisikan sebagai

Pemburaman Gaussian digunakan untuk menentukan skala gambar yang akan digunakan, untuk interpolasi, untuk menghitung poin minat, dan di banyak aplikasi lainnya

pil_im = Image.open['empire.jpg'].convert['L']
_33 dilengkapi dengan modul untuk memfilter yang disebut
pil_im = Image.open['empire.jpg'].convert['L']
38 yang dapat digunakan untuk menghitung konvolusi ini menggunakan pemisahan 1D yang cepat. Yang perlu Anda lakukan hanyalah ini

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_6

Di sini parameter terakhir dari

pil_im = Image.open['empire.jpg'].convert['L']
39 adalah standar deviasi

menunjukkan contoh gambar kabur dengan meningkatnya σ. Nilai yang lebih besar memberikan detail yang lebih sedikit. Untuk mengaburkan gambar berwarna, cukup terapkan Gaussian blur ke setiap saluran warna

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_7

Di sini konversi terakhir ke "uint8" tidak selalu diperlukan tetapi memaksa nilai piksel berada dalam representasi 8-bit. Kami juga bisa menggunakan

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_8

untuk konversi

Gambar 1-9. Contoh pengaburan Gaussian menggunakan modul ________4______38. [a] gambar asli dalam skala abu-abu;

Untuk informasi lebih lanjut tentang penggunaan modul ini dan pilihan parameter yang berbeda, lihat dokumentasi

pil_im = Image.open['empire.jpg'].convert['L']
33 dari
pil_im = Image.open['empire.jpg'].convert['L']
42 di http. //dokumen. scipy. org/doc/scipy/reference/ndimage. html

Bagaimana intensitas citra berubah terhadap citra merupakan informasi penting dan digunakan untuk banyak aplikasi, seperti yang akan kita lihat di sepanjang buku ini. Perubahan intensitas dideskripsikan dengan turunan x dan y Ix dan Iy dari citra tingkat keabuan I [untuk citra berwarna biasanya diambil turunan untuk setiap kanal warna]

Gradien gambar adalah vektor ∇I = [Ix, Iy]T. Gradien memiliki dua sifat penting, besarnya gradien

yang menggambarkan seberapa kuat perubahan intensitas gambar, dan sudut gradien

α = arctan2[Iy, Ix],

yang menunjukkan arah perubahan intensitas terbesar pada setiap titik [piksel] pada citra. Fungsi

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
_9
pil_im = Image.open['empire.jpg'].convert['L']
44 mengembalikan sudut bertanda dalam radian, dalam interval –π. π

Menghitung turunan gambar dapat dilakukan dengan menggunakan pendekatan diskrit. Ini paling mudah diimplementasikan sebagai konvolusi

Ix = I * Dx dan Iy = I * Dy

Dua pilihan umum untuk Dx dan Dy adalah filter Prewitt

dan filter Sobel

Filter turunan ini mudah diimplementasikan menggunakan konvolusi standar yang tersedia di modul

pil_im = Image.open['empire.jpg'].convert['L']
38. Sebagai contoh

import os

def get_imlist[path]:
  """  Returns a list of filenames for
    all jpg images in a directory. """

  return [os.path.join[path,f] for f in os.listdir[path] if f.endswith['.jpg']]
_9

Ini menghitung turunan x dan y dan besarnya gradien menggunakan filter Sobel. Argumen kedua memilih turunan x atau y, dan argumen ketiga menyimpan hasilnya. menunjukkan gambar dengan turunan yang dihitung menggunakan filter Sobel. Pada dua citra turunan, turunan positif ditunjukkan dengan piksel terang dan turunan negatif ditampilkan dengan piksel gelap. Area abu-abu memiliki nilai mendekati nol

Menggunakan pendekatan ini memiliki kelemahan yaitu turunan diambil pada skala yang ditentukan oleh resolusi gambar. Agar lebih kuat terhadap derau gambar dan untuk menghitung turunan pada skala apa pun, filter turunan Gaussian dapat digunakan

Ix = I * Gσx dan Iy = I * Gσy,

di mana Gσx dan Gσy adalah turunan x dan y dari Gσ, sebuah fungsi Gaussian dengan standar deviasi σ

Fungsi

pil_im = Image.open['empire.jpg'].convert['L']
46 yang kita gunakan untuk mengaburkan sebelumnya juga dapat menggunakan argumen tambahan untuk menghitung turunan Gaussian sebagai gantinya. Untuk mencoba ini pada gambar, lakukan saja

pil_im.thumbnail[[128,128]]
_0

Argumen ketiga menentukan urutan turunan mana yang akan digunakan di setiap arah menggunakan standar deviasi yang ditentukan oleh argumen kedua. Lihat dokumentasi untuk detailnya. menunjukkan turunan dan besarnya gradien untuk skala yang berbeda. Bandingkan ini dengan pengaburan pada skala yang sama

Gambar 1-10. Contoh menghitung turunan gambar menggunakan filter turunan Sobel. [a] gambar asli dalam skala abu-abu;

Gambar 1-11. Contoh menghitung turunan gambar menggunakan turunan Gaussian. turunan-x [atas], turunan-y [tengah], dan besarnya gradien [bawah];

Morfologi—Menghitung Objek

Morfologi [atau morfologi matematika] adalah kerangka kerja dan kumpulan metode pemrosesan gambar untuk mengukur dan menganalisis bentuk dasar. Morfologi biasanya diterapkan pada citra biner tetapi juga dapat digunakan dengan skala abu-abu. Citra biner adalah citra yang setiap pikselnya hanya mengambil dua nilai, biasanya 0 dan 1. Citra biner seringkali merupakan hasil dari thresholding suatu citra, misalnya dengan maksud untuk menghitung objek atau mengukur ukurannya. Ringkasan morfologi yang bagus dan cara kerjanya ada di http. //en. wikipedia. org/wiki/Mathematical_morphology

Operasi morfologi termasuk dalam modul

pil_im = Image.open['empire.jpg'].convert['L']
_42
pil_im = Image.open['empire.jpg'].convert['L']
48. Fungsi penghitungan dan pengukuran untuk citra biner terdapat pada modul
pil_im = Image.open['empire.jpg'].convert['L']
42
pil_im = Image.open['empire.jpg'].convert['L']
50. Mari kita lihat contoh sederhana tentang cara menggunakannya

Pertimbangkan gambar biner di. [] Menghitung objek pada gambar tersebut dapat dilakukan dengan menggunakan

pil_im.thumbnail[[128,128]]
_1

Ini memuat gambar dan memastikannya biner dengan ambang batas. Mengalikan dengan 1 mengubah array boolean menjadi biner. Kemudian fungsi

pil_im = Image.open['empire.jpg'].convert['L']
51 menemukan objek individu dan memberikan label bilangan bulat ke piksel sesuai dengan objek yang dimiliki. menunjukkan larik label. Nilai tingkat keabuan menunjukkan indeks objek. Seperti yang Anda lihat, ada koneksi kecil antara beberapa objek. Menggunakan operasi yang disebut pembukaan biner, kita dapat menghapusnya

pil_im.thumbnail[[128,128]]
_2

Argumen kedua dari

pil_im = Image.open['empire.jpg'].convert['L']
52 menentukan elemen penataan, sebuah larik yang menunjukkan tetangga apa yang akan digunakan saat berpusat di sekitar piksel. Dalam hal ini, kami menggunakan 9 piksel [4 di atas, piksel itu sendiri, dan 4 di bawah] pada arah y dan 5 pada arah x. Anda dapat menentukan array apa pun sebagai elemen penataan; . Iterasi parameter menentukan berapa kali untuk menerapkan operasi. Coba ini dan lihat bagaimana jumlah objek berubah. Gambar setelah dibuka dan gambar label yang sesuai ditampilkan di. Seperti yang Anda duga, ada fungsi bernama
pil_im = Image.open['empire.jpg'].convert['L']
53 yang melakukan kebalikannya. Kami meninggalkan itu dan fungsi lainnya di
pil_im = Image.open['empire.jpg'].convert['L']
_48 dan
pil_im = Image.open['empire.jpg'].convert['L']
50 ke latihan. Anda dapat mempelajari lebih lanjut tentang mereka dari
pil_im = Image.open['empire.jpg'].convert['L']
_42 dokumentasi http. //dokumen. scipy. org/doc/scipy/reference/ndimage. html

Gambar 1-12. Contoh morfologi. Pembukaan biner untuk memisahkan objek diikuti dengan menghitungnya. [a] gambar biner asli;

pil_im = Image.open['empire.jpg'].convert['L']
_33 hadir dengan beberapa modul yang berguna untuk input dan output. Dua di antaranya adalah
pil_im = Image.open['empire.jpg'].convert['L']
58 dan
pil_im = Image.open['empire.jpg'].convert['L']
59

Membaca dan menulis. file tikar

Jika Anda memiliki beberapa data, atau menemukan beberapa kumpulan data menarik secara online, disimpan di Matlab. mat, dimungkinkan untuk membaca ini menggunakan modul

pil_im = Image.open['empire.jpg'].convert['L']
60. Ini adalah cara untuk melakukannya

pil_im.thumbnail[[128,128]]
_3

Data objek sekarang berisi kamus dengan kunci yang sesuai dengan nama variabel yang disimpan dalam aslinya. berkas tikar. Variabel dalam format array. Menyimpan ke. file mat sama sederhananya. Cukup buat kamus dengan semua variabel yang ingin Anda simpan dan gunakan

pil_im = Image.open['empire.jpg'].convert['L']
61

pil_im.thumbnail[[128,128]]
_4

Ini menyimpan array x sehingga memiliki nama "x" saat dibaca ke dalam Matlab. Informasi lebih lanjut tentang

pil_im = Image.open['empire.jpg'].convert['L']
_60 dapat ditemukan di dokumentasi online, http. //dokumen. scipy. org/doc/scipy/reference/io. html

Karena kita memanipulasi gambar dan melakukan perhitungan menggunakan objek array, akan berguna untuk menyimpannya secara langsung sebagai file gambar. [] Banyak gambar dalam buku ini dibuat begitu saja

Fungsi

pil_im = Image.open['empire.jpg'].convert['L']
63 tersedia melalui modul
pil_im = Image.open['empire.jpg'].convert['L']
64. Untuk menyimpan array im ke file, lakukan saja hal berikut

pil_im.thumbnail[[128,128]]
_5

Modul

pil_im = Image.open['empire.jpg'].convert['L']
64 juga berisi gambar uji "Lena" yang terkenal

pil_im.thumbnail[[128,128]]
_6

Ini akan memberi Anda versi array skala abu-abu 512 × 512 dari gambar

Kami mengakhiri bab ini dengan contoh yang sangat berguna, menghilangkan kebisingan gambar. Image de-noising adalah proses menghilangkan noise gambar sementara pada saat yang sama mencoba mempertahankan detail dan struktur. Kami akan menggunakan model de-noising Rudin-Osher-Fatemi [ROF] yang awalnya diperkenalkan di. Menghilangkan noise dari gambar penting untuk banyak aplikasi, mulai dari membuat foto liburan Anda terlihat lebih baik hingga meningkatkan kualitas gambar satelit. Model ROF memiliki sifat yang menarik yaitu menemukan versi gambar yang lebih mulus sambil mempertahankan tepi dan struktur

Matematika yang mendasari model ROF dan teknik penyelesaiannya cukup maju dan berada di luar cakupan buku ini. Kami akan memberikan pengantar singkat dan disederhanakan sebelum menunjukkan cara mengimplementasikan pemecah ROF berdasarkan algoritme oleh Chambolle

Variasi total [TV] dari gambar [skala abu-abu] I didefinisikan sebagai jumlah dari norma gradien. Dalam representasi berkelanjutan, ini adalah

Persamaan 1-1.  

Dalam pengaturan diskrit, variasi total menjadi

dimana penjumlahannya diambil dari semua koordinat citra x = [x, y]

Dalam ROF versi Chambolle, tujuannya adalah untuk menemukan gambar U yang dihilangkan noise yang meminimalkan min

dimana norma. saya – U. mengukur perbedaan antara U dan gambar asli I. Artinya, pada dasarnya, model mencari gambar yang "datar" tetapi memungkinkan "melompat" di tepi antar wilayah

Mengikuti resep di koran, ini kodenya

pil_im.thumbnail[[128,128]]
_7

Dalam contoh ini, kami menggunakan fungsi

pil_im = Image.open['empire.jpg'].convert['L']
_66, yang, seperti namanya, "menggulung" nilai array secara siklis di sekitar sumbu. Ini sangat nyaman untuk menghitung selisih tetangga, dalam hal ini untuk turunan. Kami juga menggunakan
pil_im = Image.open['empire.jpg'].convert['L']
67, yang mengukur perbedaan antara dua array [dalam hal ini, matriks gambar U dan Uold]. Simpan fungsi
pil_im = Image.open['empire.jpg'].convert['L']
_68 dalam file rof. py

Mari kita mulai dengan contoh sintetik dari gambar yang berisik

pil_im.thumbnail[[128,128]]
_8

Gambar yang dihasilkan ditampilkan bersama dengan aslinya. Seperti yang Anda lihat, versi ROF mempertahankan tepian dengan baik

Gambar 1-13. Contoh de-noising ROF dari contoh sintetik. [a] gambar bising asli;

Gambar 1-14. Contoh de-noising ROF dari gambar skala abu-abu. [a] gambar asli;

Sekarang, mari kita lihat apa yang terjadi dengan gambar nyata

pil_im.thumbnail[[128,128]]
_9

Hasilnya akan terlihat seperti , yang juga menampilkan versi buram dari gambar yang sama untuk perbandingan. Seperti yang Anda lihat, de-noise ROF mempertahankan tepi dan struktur gambar sekaligus mengaburkan "noise. ”

Dari Bab 2 dan selanjutnya, kami menganggap PIL,

from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
9, dan
region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
3 disertakan di bagian atas setiap file yang Anda buat dan di setiap contoh kode sebagai

box = [100,100,400,400]
region = pil_im.crop[box]
0

Ini membuat kode contoh lebih bersih dan presentasi lebih mudah diikuti. Dalam kasus ketika kami menggunakan modul

pil_im = Image.open['empire.jpg'].convert['L']
_33, kami akan secara eksplisit menyatakannya dalam contoh

Kaum puritan akan menolak jenis impor selimut ini dan bersikeras pada sesuatu seperti itu

box = [100,100,400,400]
region = pil_im.crop[box]
_1

sehingga ruang nama dapat disimpan [untuk mengetahui dari mana setiap fungsi berasal] dan hanya mengimpor

pil_im = Image.open['empire.jpg'].convert['L']
72 bagian dari
region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
3, karena
from PIL import Image
from pylab import *

# read image to array
im = array[Image.open['empire.jpg']]

# plot the image
imshow[im]

# some points
x = [100,100,400,400]
y = [200,500,200,500]

# plot the points with red star-markers
plot[x,y,'r*']

# line plot connecting the first two points
plot[x[:2],y[:2]]

# add title and show the plot
title['Plotting: "empire.jpg"']
show[]
9 bagian yang diimpor dengan
region = region.transpose[Image.ROTATE_180]
pil_im.paste[region,box]
6 tidak diperlukan. Puritan dan pemrogram berpengalaman mengetahui perbedaannya dan dapat memilih opsi mana pun yang mereka sukai. Demi membuat konten dan contoh dalam buku ini mudah diakses oleh pembaca, saya memilih untuk tidak melakukannya

Bagaimana cara menemukan nilai piksel suatu gambar?

Anda juga dapat mendapatkan informasi nilai piksel dari gambar dengan imshow menggunakan fungsi impixelinfo . Untuk menyimpan lokasi piksel dan informasi nilai yang ditampilkan, klik kanan piksel pada gambar dan pilih opsi Salin info piksel. Penampil Gambar menyalin koordinat x dan y serta nilai piksel ke papan klip.

Bagaimana cara menemukan jumlah piksel dalam gambar dengan Python?

NumPy menyediakan fungsi sum[] yang mengembalikan jumlah semua elemen larik dalam larik NumPy . Fungsi sum[] ini dapat digunakan untuk menghitung jumlah piksel berdasarkan kriteria yang dibutuhkan.

Bagaimana kita bisa mendapatkan RGB dari sebuah piksel dengan Python?

Gambar dapat dibaca menggunakan imread[] function yang mengembalikan matriks piksel [default adalah mode RGB].

Bagaimana cara mengonversi piksel menjadi 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

Bài mới nhất

Chủ Đề