Ekstraksi fitur gambar dalam Python

18

Di kelas saya, saya harus membuat aplikasi menggunakan dua pengklasifikasi untuk memutuskan apakah suatu objek dalam gambar adalah contoh filum porifera (seasponge) atau objek lain.

Namun, saya benar-benar tersesat ketika datang ke fitur teknik ekstraksi dalam python. Penasihat saya meyakinkan saya untuk menggunakan gambar yang belum tercakup di kelas.

Adakah yang bisa mengarahkan saya ke dokumentasi yang bermakna atau membaca atau menyarankan metode untuk dipertimbangkan?

Jeremy Barnes
sumber
Anda menyebut penasihat, jadi saya anggap ini adalah bagian dari tugas Sekolah Pascasarjana? Apakah Anda memiliki akses ke perangkat lunak komersial, atau Anda diharapkan melakukan ini hanya dengan paket Python dan open-source? Apa yang Anda pelajari di kelas saat ini dan apa nama kelasnya? Juga, apakah ada persyaratan kinerja dalam hal waktu yang diperlukan untuk memberikan jawaban?
MLowry
Saya diharapkan hanya menggunakan paket Python dan open source. Menulis kode sumber saya sendiri tidak disarankan. Ini adalah kursus tingkat master. Kelas ini adalah kursus Ilmu Data pengantar. Hal terakhir yang kami bahas adalah pemilihan fitur, meskipun hampir semua diskusi adalah tentang data teks. Tidak ada persyaratan kinerja di luar akurasi ~ 70%
Jeremy Barnes

Jawaban:

11

Dalam gambar, beberapa teknik yang sering digunakan untuk ekstraksi fitur adalah binarizing dan blur

Binarizing: mengubah array gambar menjadi 1s dan 0s. Ini dilakukan saat mengonversi gambar ke gambar 2D. Bahkan skala abu-abu juga dapat digunakan. Ini memberi Anda matriks numerik dari gambar. Grayscale membutuhkan ruang lebih sedikit saat disimpan pada Disc.

Ini adalah bagaimana Anda melakukannya dengan Python:

from PIL import Image

%matplotlib inline  

#Import an image
image = Image.open("xyz.jpg")

image

Contoh Gambar:

masukkan deskripsi gambar di sini

Sekarang, ubah menjadi skala abu-abu:

im = image.convert('L')

im

akan mengembalikan gambar ini kepada Anda:

masukkan deskripsi gambar di sini

Dan matriks dapat dilihat dengan menjalankan ini:

array(im)

Array akan terlihat seperti ini:

array([[213, 213, 213, ..., 176, 176, 176],
       [213, 213, 213, ..., 176, 176, 176],
       [213, 213, 213, ..., 175, 175, 175],
       ..., 
       [173, 173, 173, ..., 204, 204, 204],
       [173, 173, 173, ..., 205, 205, 204],
       [173, 173, 173, ..., 205, 205, 205]], dtype=uint8)

Sekarang, gunakan plot histogram dan / atau plot kontur untuk melihat fitur gambar:

from pylab import *

# create a new figure
figure()
gray()
# show contours with origin upper left corner
contour(im, origin='image')
axis('equal')
axis('off')


figure()


hist(im_array.flatten(), 128)

show()

Ini akan mengembalikan Anda plot, yang terlihat seperti ini:

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Blurring: Algoritma Blurring mengambil rata-rata tertimbang dari piksel tetangga untuk memasukkan warna lingkungan ke setiap piksel. Ini meningkatkan kontur lebih baik dan membantu dalam memahami fitur dan kepentingannya dengan lebih baik.

Dan ini adalah bagaimana Anda melakukannya dengan Python:

from PIL import *


figure()
p = image.convert("L").filter(ImageFilter.GaussianBlur(radius = 2))
p.show()

Dan gambar yang kabur adalah:

masukkan deskripsi gambar di sini

Jadi, ini adalah beberapa cara di mana Anda dapat melakukan rekayasa fitur. Dan untuk metode lanjutan, Anda harus memahami dasar-dasar Penglihatan Komputer dan jaringan saraf, dan juga berbagai jenis filter dan signifikansinya serta matematika di belakangnya.

Dawny33
sumber
1
Terima kasih banyak. Saya memposting tentang ini di beberapa tempat dan sejauh ini jawaban Anda adalah yang paling informatif. Saya menyadari bahwa saya salah paham bagaimana ekstraksi fitur gambar bekerja secara konseptual.
Jeremy Barnes
Senang bahwa jawaban saya membantu Anda :)
Dawny33
8

Tutorial hebat ini mencakup dasar-dasar kerja saraf convolutional, yang saat ini mencapai kinerja terbaik dalam sebagian besar tugas penglihatan:

http://deeplearning.net/tutorial/lenet.html

Ada sejumlah opsi untuk CNN dalam python, termasuk Theano dan perpustakaan yang dibangun di atasnya (saya menemukan keras agar mudah digunakan).

Jika Anda lebih suka menghindari pembelajaran mendalam, Anda mungkin melihat ke dalam OpenCV, yang dapat mempelajari banyak jenis fitur lainnya, garis Haar cascade, dan fitur SIFT.

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_table_of_contents_feature2d/py_table_of_contents_feature2d.html

jamesmf
sumber
1

Seperti yang dikatakan Jeremy Barnes dan Jamesmf, Anda dapat menggunakan algoritma pembelajaran mesin apa pun untuk mengatasi masalah tersebut. Mereka kuat dan dapat mengidentifikasi fitur-fitur secara otomatis. Anda hanya perlu memberi makan algoritma data pelatihan yang benar. Karena diperlukan untuk bekerja pada gambar, jaringan saraf convolution akan menjadi pilihan yang lebih baik untuk Anda.

Ini adalah tutorial yang baik untuk belajar tentang jaringan saraf konvolusi. Anda juga dapat mengunduh kode dan dapat berubah sesuai dengan definisi masalah Anda. Tetapi Anda perlu belajar python dan theano library untuk pemrosesan dan Anda akan mendapatkan tutorial yang bagus untuk itu juga

http://deeplearning.net/tutorial/lenet.html

Arun Sooraj
sumber