Python'da görüntülerin çıkarılması


18

Sınıfımda, bir görüntüdeki bir nesnenin phylum porifera (deniz süngeri) veya başka bir nesne örneği olup olmadığına karar vermek için iki sınıflandırıcı kullanarak bir uygulama oluşturmak zorundayım.

Ancak, python özellik çıkarma teknikleri söz konusu olduğunda tamamen kayboldum. Danışmanım beni sınıfta ele alınmayan görüntüleri kullanmaya ikna etti.

Beni anlamlı belgelere veya okumaya yönlendirebilir veya dikkate alınması gereken yöntemler önerebilir mi?


Danışmandan bahsettiniz, bu yüzden bunun bir Enstitü görevinin bir parçası olduğunu varsayabilir miyim? Herhangi bir ticari yazılıma erişiminiz var mı veya bunu yalnızca Python ve açık kaynaklı paketlerle yapmanız bekleniyor mu? Şu anda sınıfta ne öğreniyorsunuz ve sınıfın adı nedir? Ayrıca, cevap vermesi gereken zaman açısından bir performans gereksinimi var mı?
MLowry

Sadece Python ve açık kaynak paketleri kullanmam bekleniyor. Kendi kaynak kodumu yazmak bile cesaretini kırıyor. Bu yüksek lisans düzeyinde bir derstir. Sınıf bir giriş Veri Bilimi dersidir. Ele aldığımız son şey özellik seçimidir, ancak tartışmanın neredeyse tamamı metin verileri ile ilgilidir. Doğruluk dışında hiçbir performans gereksinimi yoktur ~% 70
Jeremy Barnes

Yanıtlar:


11

Görüntülerde, özellik çıkarma için sık kullanılan bazı teknikler ikilileştirme ve bulanıklaştırmadır

İkilileştirme: resim dizisini 1s ve 0s'ye dönüştürür. Bu, görüntü 2B görüntüye dönüştürülürken yapılır. Gri tonlama bile kullanılabilir. Size görüntünün sayısal bir matrisini verir. Gri tonlama, Disk'te saklandığında daha az yer kaplar.

Python'da böyle yaparsınız:

from PIL import Image

%matplotlib inline  

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

image

Örnek Resim:

resim açıklamasını buraya girin

Şimdi, gri skalaya dönüştürün:

im = image.convert('L')

im

size bu resmi döndürür:

resim açıklamasını buraya girin

Ve matris bunu çalıştırarak görülebilir:

array(im)

Dizi şöyle görünecektir:

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)

Şimdi, görüntü özelliklerine göz atmak için bir histogram grafiği ve / veya bir kontur grafiği kullanın:

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

Bu size şöyle bir arsa döndürür:

resim açıklamasını buraya girin resim açıklamasını buraya girin

Bulanıklaştırma: Bulanıklaştırma algoritması, çevre rengini her piksele dahil etmek için komşu piksellerin ağırlıklı ortalamasını alır. Kontürleri daha iyi geliştirir ve özellikleri ve önemlerini daha iyi anlamaya yardımcı olur.

Ve Python'da böyle yapıyorsunuz:

from PIL import *


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

Ve bulanık görüntü:

resim açıklamasını buraya girin

Yani, bunlar özellik mühendisliği yapabileceğiniz bazı yollardır. Gelişmiş yöntemler için, Bilgisayarla Görme ve sinir ağlarının temellerini ve farklı filtre türlerini ve bunların önemini ve arkasındaki matematiği anlamalısınız.


1
Çok teşekkür ederim. Bu konuda birkaç yere gönderdim ve sizinki en bilgilendirici cevaptı. Görüntü çıkarma özelliğinin kavramsal olarak nasıl çalıştığını yanlış anladığımı fark ettim.
Jeremy Barnes

Cevabımın sana yardım ettiğine sevindim :)
Dawny33

8

Bu harika eğitici, şu anda çoğu vizyon görevinde en son performansa ulaşan evrişimli sinir ağlarının temellerini kapsamaktadır:

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

Theano ve üzerine inşa edilen kütüphaneler dahil olmak üzere python'da CNN'ler için bir dizi seçenek var (keras'ın kullanımı kolay olduğunu gördüm).

Derin öğrenmeden kaçınmayı tercih ederseniz, diğer birçok özellik türünü, Haar kaskadlarını ve SIFT özelliklerini öğrenebilen OpenCV'ye bakabilirsiniz.

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


1

Jeremy Barnes ve Jamesmf'in dediği gibi, sorunla başa çıkmak için herhangi bir makine öğrenme algoritmasını kullanabilirsiniz. Güçlüdürler ve özellikleri otomatik olarak tanımlayabilirler. Sadece algoritmayı doğru egzersiz verilerini beslemeniz gerekir. Görüntüler üzerinde çalışmak gerektiğinden, evrişim sinir ağları sizin için daha iyi bir seçenek olacaktır.

Bu evrişim sinir ağı hakkında bilgi edinmek için iyi bir öğreticidir. Kodu da indirebilir ve sorun tanımınıza göre değiştirebilirsiniz. Ama işleme için python ve theano kütüphanesini öğrenmeniz gerekiyor ve bunun için de iyi öğreticiler alacaksınız

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.