Mengonversi gambar skala abu-abu menjadi python array 2d

Hari ini, Anda akan mempelajari beberapa topik terpenting dan mendasar dalam pembelajaran mesin dan pembelajaran mendalam. Saya jamin bahwa konten hari ini akan menyampaikan beberapa konsep dasar yang merupakan kunci untuk mulai mempelajari deep learning — bagian dari machine learning

Pertama, kita akan mulai menjelaskan dasar-dasar gambar seperti piksel, nilai piksel, properti gambar, dan perbedaan antara gambar RGB dan skala abu-abu. Kemudian kita akan berbicara tentang bagaimana gambar-gambar ini direpresentasikan dalam array NumPy

Sebagai bagian bonus, kita akan menjelajahi kumpulan data digit MNIST (lihat kutipan di bagian bawah) yang berisi ribuan gambar skala abu-abu dari digit tulisan tangan. Ini akan membantu Anda untuk lebih memperjelas hal-hal yang Anda pelajari dalam representasi gambar NumPy

Oleh karena itu, konten hari ini akan dibagi menjadi dua bagian utama

  • Dasar-dasar gambar — komponen dan representasi utama
  • Melihat lebih dekat pada kumpulan data MNIST (Opsional)

Kita mulai dengan dasar-dasar gambar

Dasar gambar

Piksel

Gambar terbuat dari elemen kecil seperti persegi yang disebut piksel. Bahkan sebuah gambar kecil dapat berisi jutaan piksel dengan warna berbeda

Properti gambar

Setiap gambar memiliki tiga properti utama

  • Ukuran — Ini adalah tinggi dan lebar gambar. Itu dapat direpresentasikan dalam sentimeter, inci atau bahkan dalam piksel
  • Ruang warna — Contohnya adalah ruang warna RGB dan HSV
  • Saluran — Ini adalah atribut ruang warna. Misalnya, ruang warna RGB memiliki tiga jenis warna atau atribut yang dikenal sebagai Merah, Hijau, dan Biru (maka nama RGB)

Gambar RGB vs gambar skala abu-abu

Penting untuk membedakan antara gambar RGB dan gambar skala abu-abu. Gambar RGB memiliki tiga saluran warna. Saluran merah, saluran hijau dan saluran biru. Namun, gambar skala abu-abu hanya memiliki satu saluran

Nilai piksel

Warna suatu gambar dilambangkan dengan nilai pikselnya. Piksel hanya dapat memiliki satu warna tetapi dapat digabungkan untuk membuat banyak warna

Dalam gambar skala abu-abu di mana hanya ada satu saluran, nilai piksel hanya memiliki satu angka mulai dari 0 hingga 255 (keduanya inklusif). Nilai piksel 0 mewakili hitam dan nilai piksel 255 mewakili putih. Nilai piksel dalam gambar skala abu-abu dapat direpresentasikan sebagai berikut

[40]

Karena nilai 40 mendekati 0 daripada 255, warna piksel juga mendekati hitam

Dalam gambar RGB di mana ada tiga saluran warna, nilai piksel memiliki tiga angka, masing-masing berkisar dari 0 hingga 255 (keduanya inklusif). Misalnya, angka 0 piksel pada saluran merah berarti tidak ada warna merah pada piksel tersebut sedangkan angka 255 berarti ada 100% warna merah pada piksel tersebut. Interpretasi ini juga berlaku untuk piksel di dua saluran lainnya. Nilai piksel dalam citra RGB dapat direpresentasikan sebagai berikut

[255, 255, 0]
_

Nilai piksel ini mewakili warna kuning. Lihatlah gambar berikut

Gambar oleh OpenClipart-Vectors dari Pixabay

Warna kuning terbuat dari warna hijau dan merah. Tidak ada warna biru yang terlibat. Itu sebabnya nilai piksel

[255, 255, 0]
_8 mewakili piksel warna kuning — Merah 100% (255), Hijau 100% (255), dan tanpa Biru (0)

Representasi gambar dalam pembelajaran mendalam

Dalam pembelajaran mesin dan pembelajaran mendalam, gambar direpresentasikan sebagai larik NumPy. Dalam konteks pembelajaran mendalam, array NumPy tersebut secara teknis disebut tensor (Pelajari cara membuat Tensor seperti array NumPy)

Sebagian besar dari Anda mungkin bingung saat merepresentasikan gambar dalam array NumPy karena melibatkan banyak dimensi. Pada dasarnya, jumlah dimensi ditentukan oleh faktor-faktor berikut

  • Ukuran gambar — Dua dimensi selalu diperlukan untuk mewakili tinggi dan lebar gambar
  • Saluran warna
  • Jumlah gambar

Representasi gambar skala abu-abu sebagai array NumPy

Gambar skala abu-abu tunggal dapat direpresentasikan menggunakan larik NumPy dua dimensi (2D) atau tensor. Karena hanya ada satu saluran dalam gambar skala abu-abu, kami tidak memerlukan dimensi ekstra untuk mewakili saluran warna. Dua dimensi mewakili tinggi dan lebar gambar

Kumpulan 3 gambar skala abu-abu dapat direpresentasikan menggunakan larik NumPy tiga dimensi (3D) atau tensor. Di sini, kita memerlukan dimensi ekstra untuk mewakili jumlah gambar

(Gambar oleh penulis, dibuat dengan draw. io)

Bentuk kumpulan 3 gambar skala abu-abu di atas dapat direpresentasikan sebagai

(Gambar oleh penulis, dibuat dengan draw. io)

Representasi gambar RGB sebagai 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. Di sini, kita memerlukan dimensi ekstra untuk mewakili jumlah gambar

(Gambar oleh penulis, dibuat dengan draw. io)

Bentuk kumpulan 3 gambar RGB di atas dapat direpresentasikan dalam dua cara berbeda

  • Saluran-terakhir. Ini menempatkan sumbu saluran warna di bagian akhir. Ini standar di TensorFlow (Keras) dan OpenCV
  • Saluran-pertama. Ini menempatkan sumbu saluran warna setelah sumbu sampel

(Gambar oleh penulis, dibuat dengan draw. io)

Pengambilan teratas. Notasi terakhir saluran adalah notasi standar untuk merepresentasikan gambar RGB sebagai larik NumPy

Teori yang cukup untuk dasar-dasar gambar dan representasi NumPy-nya. Mari mulai menjelajahi kumpulan data digit MNIST

Melihat lebih dekat pada kumpulan data MNIST (Opsional)

Kumpulan data digit MNIST (lihat kutipan di bagian bawah), dibuat oleh NIST (Institut Standar dan Teknologi Nasional), adalah kumpulan data klasik untuk mempelajari pembelajaran mendalam dan juga pembelajaran mesin umum. Ini telah digunakan secara berlebihan oleh pembelajaran mesin dan komunitas pembelajaran mendalam. Namun, masih perlu ditelusuri dan menggunakan kumpulan data ini, terutama jika Anda akan menyentuh pembelajaran mendalam untuk pertama kalinya.

Kumpulan data MNIST berisi 70.000 gambar skala abu-abu dari digit tulisan tangan di bawah 10 kategori (0 hingga 9). Kami akan menggunakan dua API populer untuk memuat dataset. Keras API dan Scikit-learn API. Keduanya menyediakan fungsi utilitas untuk memuat dataset MNIST dengan mudah. Kami juga akan membahas perbedaan antara kedua API untuk kumpulan data MNIST

Memuat dataset MNIST menggunakan Keras API

from tensorflow.keras.datasets import mnist(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

Mendapatkan bentuk data

print("Train images shape:", train_images.shape)
print("Train labels shape:", train_labels.shape)
print("Test images shape: ", test_images.shape)
print("Test labels shape: ", test_labels.shape)
_

(Gambar oleh penulis)

Kumpulan gambar kereta dan uji berbentuk tiga dimensi. Ini karena dataset MNIST berisi gambar grayscale, bukan gambar RGB. (60000, 28, 28) berarti rangkaian gambar kereta berisi 60.000 gambar berukuran 28 x 28 px. Dengan kata lain, ini adalah array yang berisi 60.000 matriks dengan nilai bilangan bulat 28 x 28

Label kereta dan uji adalah satu dimensi. Mereka berisi label koresponden untuk 10 kategori (0 hingga 9)

import numpy as npnp.unique(test_labels)
#OR
np.unique(train_labels)

(Gambar oleh penulis)

Mendapatkan tipe array

print("Train images type:", type(train_images))
print("Train labels type:", type(train_labels))
print("Test images type: ", type(test_images))
print("Test labels type: ", type(test_labels))
_

(Gambar oleh penulis)

Semuanya adalah array NumPy

Mendapatkan tipe data

print("Train images data type:", train_images.dtype)
print("Train labels data type:", train_labels.dtype)
print("Test images data type: ", test_images.dtype)
print("Test labels data type: ", test_labels.dtype)

(Gambar oleh penulis)

Tipe data nilai piksel adalah "uint8" yang menunjukkan bilangan bulat 8-bit

Mendapatkan satu gambar dari kumpulan gambar kereta

Satu gambar dari set kereta dapat diakses dengan menggunakan notasi berikut

train_images[i]
_

Indeks ini berbasis 0. Untuk mendapatkan gambar ke-10, kita harus menggunakan i=9

train_images[9]
_

Bagian dari susunan (Gambar oleh penulis)
train_images[9].shape

Ini adalah matriks 28 x 28 dari gambar skala abu-abu

Memvisualisasikan satu gambar

Kami akan memvisualisasikan gambar ke-10 dari kumpulan data pelatihan

[255, 255, 0]
_0

(Gambar oleh penulis)

Gambar ke-10 dari set pelatihan mewakili angka 4. Mari kita lihat apakah itu benar dengan melihat label yang sesuai

[255, 255, 0]
_1

Ini juga mengembalikan 4. Jadi, gambar tersebut sesuai dengan labelnya

Memuat dataset MNIST menggunakan Scikit-learn API

[255, 255, 0]
_2

Mendapatkan bentuk data

[255, 255, 0]
_3

(Gambar oleh penulis)

Nilai piksel dari citra tunggal disusun dalam vektor satu dimensi berukuran 784 yang sama dengan 28 x 28. Ini berarti kita masih bisa membentuk ulang vektor untuk mendapatkan format gambar yang diperlukan seperti di Keras API

Mendapatkan tipe array

[255, 255, 0]
_4

(Gambar oleh penulis)

Mendapatkan tipe data

[255, 255, 0]
_5

(Gambar oleh penulis)
[255, 255, 0]
_6

(Gambar oleh penulis)

Perbedaan antara kedua API untuk kumpulan data MNIST

  • Latih dan set tes. Di Kears, dataset MNIST dapat dimuat dengan rangkaian pelatihan dan pengujian. Namun di Scikit-learn, kita perlu membuat bagian train dan test secara manual
  • Membentuk. Di Keras, satu digit MNIST diwakili oleh array NumPy dua dimensi berukuran 28 x 28. Dalam Scikit-learn, satu digit MNIST diwakili oleh array NumPy satu dimensi berukuran 784. Kita perlu membentuk ulang array secara eksplisit menjadi array berukuran 28 x 28
  • Jenis larik. Di Kears, gambar dan label diulangi oleh array NumPy. Di Scikit-learn, gambar diulangi oleh Pandas DataFrame sementara label diwakili oleh seri Pandas
  • Tipe data. Di Kears, tipe data nilai dan label piksel adalah "uint8" yang menunjukkan bilangan bulat 8-bit. Di Scikit-learn, tipe data nilai piksel adalah "float64" dan tipe data label adalah "kategori" yang harus diubah menjadi "uint8" sebelum digunakan dalam algoritme sebagai berikut
[255, 255, 0]
_7

Pengambilan teratas. Jika Anda menggunakan kumpulan data MNIST untuk tujuan pembelajaran mendalam, saya sarankan Anda memuat data menggunakan Keras API

Baca selanjutnya (Sangat disarankan)

Pelajari cara membuat Tensor seperti array NumPy

Mari Membuat Tensor seperti NumPy Arrays

Tensor hanyalah representasi matriks dari array multi-dimensi

sedang. com

Pelajari dasar-dasar NumPy dan pembuatan array

NumPy untuk Ilmu Data. Bagian 1

Dasar-Dasar NumPy dan Pembuatan Array

menuju ilmu data. com

Iris array NumPy seperti pro

Panduan Langkah-demi-Langkah Lengkap untuk Pengindeksan dan Pengirisan NumPy Array

NumPy untuk Ilmu Data — Bagian 2

rukshan pramoditha. sedang. com

Baca selanjutnya (Opsional)

Kompres gambar menggunakan PCA

Kompresi Gambar Menggunakan Analisis Komponen Utama (PCA)

Pengurangan Dimensi dalam Tindakan

menuju ilmu data. com

Ini adalah akhir dari postingan hari ini

Harap beri tahu saya jika Anda memiliki umpan balik

Sementara itu, Anda dapat mendaftar keanggotaan untuk mendapatkan akses penuh ke setiap cerita yang saya tulis dan saya akan menerima sebagian dari biaya keanggotaan Anda

Terima kasih banyak atas dukungan Anda yang berkelanjutan. Sampai jumpa di cerita selanjutnya. Selamat belajar untuk semuanya

Pengutipan dataset digit MNIST

Deng, L. , 2012. Database mnist gambar digit tulisan tangan untuk penelitian pembelajaran mesin. Majalah Pemrosesan Sinyal IEEE, 29(6), hlm. 141–142

Sumber dataset digit MNIST

http. //yann. lecun. com/exdb/mnist/

Lisensi dataset angka MNIST

Yann LeCun (Courant Institute, NYU) dan Corinna Cortes (Google Labs, New York) memegang hak cipta kumpulan data MNIST yang disediakan berdasarkan ketentuan Creative Commons Attribution-Share Alike 3. 0 lisensi

Bagaimana cara mengubah gambar menjadi array 2D dengan Python?

langkah-langkahnya adalah. .
mengonversi gambar menjadi skala abu-abu (opencv)
konversi skala abu-abu ke gambar biner (opencv)
konversikan ke matriks 2D biner (scipy , pillow, numpy)

Apakah array 2D gambar skala abu-abu?

Gambar skala abu-abu dapat direpresentasikan sebagai larik dua dimensi , yang sumbu pertamanya sesuai dengan koordinat x gambar dan sumbu kedua sesuai dengan koordinat y. Larik berisi pada setiap pasangan koordinat (x,y) sebuah nilai, yang biasanya berupa float antara 0. 0 dan 1. 0, atau bilangan bulat antara 0 dan 255.

Bagaimana Anda mengubah array gambar menjadi skala abu-abu dengan Python?

Gunakan numpy. dot() untuk mengonversi gambar dari RGB ke skala abu-abu gambar . imread(fname) untuk mendapatkan array NumPy yang mewakili gambar bernama fname. Panggil numpy. titik(a, b) dengan a sebagai larik[. ,. 3] dan b sebagai [0. 2989, 0. 5870, 0. 1140] untuk mengubah larik hasil sebelumnya menjadi skala abu-abu.

Bagaimana cara mengonversi gambar menjadi matriks dengan Python?

Konversi Gambar Menjadi Matriks dengan Python .
Impor modul Gambar dari pustaka PILLOW Python sebagai PIL
Impor modul array dari NUMPY library Python
Kedua pustaka ini untuk ekstraksi Gambar dari file sumber dan menentukan dimensi matriks