Bilgisayarla Görme Projeleri
Hakkında
Bu repo, Mehmet ve Jean‘in Colorado School of Mines‘deki CSCI437 dersine kayıtlı oldukları süre boyunca üzerinde çalıştıkları tüm kodlama projelerini (laboratuvarlar) sergilemektedir. Bu laboratuvarlar, 28 Ağustos 2020‘den 14 Aralık 2020‘ye kadar olan dönemi kapsamaktadır ve Python, OpenCV ve temel bilgisayarla görme kavramlarını öğrenmek için kapsamlı bir platform sağlamıştır.
Ders Hakkında
2020 Sonbahar döneminde Bilgisayarla Görmeye Giriş (CSCI437) dersini aldım. Bu süre zarfında Dr. William Hoff ve Dr. Tom Williams dersi vermiştir. CSCI437 için resmi ders tanımı şu şekildedir:
(I) Bilgisayarla görme, bilgisayarları kullanarak görüntüleri elde etme, görüntüleri dönüştürme ve görüntülerden sembolik tanımlar çıkarma sürecidir. Bu ders, görüntü oluşumu, özellik çıkarımı, konum tahmini ve nesne tanıma konularını kapsayan bu alana bir giriş sağlamaktadır. Tasarım yeteneği ve uygulamalı projeler vurgulanacak, popüler yazılım araçları kullanılacaktır. Bu ders, konuyu daha fazla öğrenmek isteyenler ve sadece bilgisayar görüntüleme tekniklerini kullanmak isteyenler için ilgi çekici olacaktır. Kıdemli düzeyde olma şartı vardır. 3 saat ders; 3 dönem saati. Ön koşul: (MATH201 veya MATH334 veya EENG311), ve, MATH332, ve, (CSCI200 veya CSCI261).
Krediler
CSCI437 dersi sırasında derslerde, slaytlarda veya Canvas üzerinden sağlanan Python betikleri ve/veya kod parçaları bulunmaktadır. CSCI437 dersi Colorado School of Mines’de verilmektedir. Bu laboratuvarlar aşağıdaki ortaklarla gerçekleştirilmiştir:
- Jean Duong
- Mehmet Yilmaz
Laboratuvar Tanımları
Laboratuvar 1
Laboratuvar 1, Python ile OpenCV kullanmanın temellerine odaklanmaktadır. Katılımcılardan bir video dosyasını okuyan, videonun her karesine bir kare oluşturan dört noktayı projekte eden ve her noktanın Z koordinatını kademeli olarak ayarlayarak karenin uzaklaşmasını simüle eden bir Python programı yazmaları beklenmektedir. Ayrıca, her karede çerçeve numarasının gösterilmesi ve grafik katmanları ile birlikte son videonun değerlendirme için yüklenmesi gerekmektedir.
Laboratuvar 2
Laboratuvar 2, “XYZ sabit açıları” konvansiyonunu kullanarak X, Y ve Z eksenleri etrafında döndürmelere odaklanarak görüntü dönüşümleri ile ilgilenmektedir. Öğrencilerden döndürme matrislerini hesaplamaları, kamera pozları için homojen dönüşüm matrisleri oluşturmaları, bir kalibrasyon matrisini yaratmaları ve OpenCV’nin çizgi fonksiyonunu kullanarak bir görüntüye noktaları projekte etmeleri istenmektedir. Laboratuvar, bilgisayarla görmede kamera geometrisi ve dönüşüm matrislerinin anlaşılmasını vurgulamaktadır.
Laboratuvar 3
Laboratuvar 3, öğrencilerin bir film dosyasının her karesinde bir şablon alt görüntüsünü izlemeleri gereken şablon eşleştirme ile ilgilidir. Görev, kullanıcının filmin ilk görüntüsünden bir şablon seçmesine izin vermek, bu şablonu sonraki görüntülerde izlemek, her görüntüde şablonun konumunu göstermek için dikdörtgenler çizmek ve bu konumları göstermek için bir çıkış film dosyası oluşturmaktır. Öğrenciler, en iyi izlemeyi sağlayan farklı şablonlarla denemeler yapmaya teşvik edilmektedir ve eşleşmeler doğru bir şekilde tanımlandığında gözlemlenen korelasyon puanlarını tartışmaları istenmektedir.
Laboratuvar 4
Laboratuvar 4, renkli görüntülerle başa çıkmadaki etkinliği için derslerde tartışılan HSV renk alanını kullanarak renk segmentasyonuna odaklanmaktadır. Öğrencilerden sağlanan görüntülerden dur işareti piksellerini segmentlemek için eşik işlemleri uygulamaları, bir Python/OpenCV programı kullanarak dur işareti piksellerini en iyi tespit eden eşik değerlerini bulmaları, sonucu temizlemek için morfolojik işlemler gerçekleştirmeleri ve segmentlenmiş görüntüleri Python programı ile birlikte ve kullanılan eşik ve morfolojik işlem parametreleri ile birlikte göndermeleri gerekmektedir.
Laboratuvar 5
Laboratuvar 5, mevcut bir görüntünün belirli bir alanına yeni bir görüntü dokusu ekleme görevini içermektedir. Bu süreç, düzlem değiştirme olarak bilinir ve öğrencilerin yeni bir görüntüyü mevcut bir görüntünün düzlem alanına haritalamak için projeksiyon dönüşümü (homografi) tekniklerini kullanmaları gerekmektedir. Laboratuvar, görüntü içeriğini değiştirmek için homografiyi pratik bir şekilde uygulamayı vurgulamaktadır. Öğrencilerin, laboratuvar teslimatlarının bir parçası olarak orijinal görüntüyü, değiştirilmiş dokulu görüntüyü, birleştirilmiş görüntüyü ve Python programlarını göndermeleri beklenmektedir.
Laboratuvar 6
Laboratuvar 6, öğrencilerin bir görüntüde beş zıt konsantrik daireden (CCC) oluşan bir hedefin pozunu tespit etmelerini ve hesaplamalarını istemektedir. Görev, OpenCV kullanarak CCC hedeflerini tespit etmek, bunları doğru bir şekilde sıralamak, OpenCV’nin solvePnP() fonksiyonunu kullanarak pozunu hesaplamak ve görüntüye koordinat eksenlerini ve pozu çizmekten oluşmaktadır. Laboratuvar, bilgisayarla görmede hedef tespiti, poz tahmini ve görsel çıktı formatlama gibi kavramların uygulanmasını vurgulamaktadır.
Laboratuvar 7
Laboratuvar 7, görüntüler arasında SIFT özelliklerinin tespiti ve eşleştirilmesi etrafında dönmektedir. Amaç, bir görüntüden diğerine SIFT özelliklerinin doğru eşleşmelerini tanımlamak ve bu eşleşmelerin doğruluğunu analiz etmektir. Laboratuvar, verilen Python kodunu ve bir veri setinden görüntüleri kullanmayı, eşleşme tespitini optimize etmek için algoritma parametrelerini ayarlamayı ve özellik eşleştirme sürecinin performansını değerlendirmek için hassasiyet ve geri çağırma metriklerini hesaplamayı içermektedir. Öğrencilerin, Python programlarını ve farklı parametre ayarları için hesaplanan hassasiyet ve geri çağırma değerlerini göndermeleri gerekmektedir.
Laboratuvar 8
Laboratuvar 8, bir eğitim görüntüsünden bir sorgu görüntüsüne nesneleri tespit etmek ve üst üste bindirmek için özellik eşleştirme ve affine dönüşüm uyumunu kullanmaya odaklanmaktadır. Laboratuvar, nesneyi farklı senaryolarda tespit etmeyi, yanlış pozitifleri azaltmak için içsel eşleşmelerin sayısını ayarlamayı ve nesne tespit sistemi performansını değerlendirmek için hassasiyet, geri çağırma ve doğruluk metriklerini hesaplamayı içermektedir. Öğrencilerin, sağlanan Python kodunu değiştirmeleri ve çalıştırmaları, sistemin farklı koşullar altındaki performansını analiz etmeleri ve bulgularını ve değiştirilmiş kodlarını göndermeleri beklenmektedir.
Laboratuvar 9
Laboratuvar 9, bir eğitim görüntüsündeki bir nesne üzerinde anotasyon noktaları yerleştirmeyi ve bu noktaları sonraki sorgu görüntülerinde nesne üzerinde otomatik olarak doğru bir şekilde göstermeyi içermektedir. Bu laboratuvar, özellik çıkarımı, belirsiz eşleşmeleri ortadan kaldırmak için oran testini kullanarak eşleştirme, aykırı değerleri ortadan kaldırmak için RANSAC kullanarak 2D affine dönüşüm uyumunu sağlama ve anotasyon noktalarını eğitimden sorgu görüntülerine haritalamak için dönüşümü uygulama konularına odaklanmaktadır. Kritik görev, içsel eşleşmelerin eşik sayısını ayarlayarak yanlış pozitifler ve negatifler arasında denge kurmak ve görüntüleri doğru bir şekilde sınıflandırmada en yüksek doğruluğu hedeflemektir.
Laboratuvar 10
Laboratuvar 10, Hough dönüşümünü kullanarak çizgi segmentlerini bulmaya ve bir görüntüdeki paralel çizgi setlerini tanımlamaya adanmıştır. Çizgi segmentlerini uç noktaları ile temsil eden probabilistik Hough Dönüşümünü OpenCV’nin cv2.HoughLinesP() fonksiyonu aracılığıyla kullanmaktadır. Laboratuvar ayrıca, bu çizgi segmentlerinin yön vektörlerini analiz ederek kaybolma noktalarını tanımlamayı içermekte ve 2D görüntü düzleminde paralel çizgilerin yönelimini anlamayı hedeflemektedir. Öğrenciler, paralel çizgi segmentlerini bulmak için test görüntülerini işlemeyi, tespiti optimize etmek için parametrelerle denemeler yapmayı ve sonuçlarını bir Python programı ile birlikte göndermeyi gerektirmektedir.
Notlar
- Bu betikleri/laboratuvarları çalıştırmak için aşağıdaki 3. parti Python paketlerine ihtiyacınız olacak: cv2 & numpy.
- Bu laboratuvarların bazıları belirli bir cv2 sürümünü kullanmanızı gerektirebilir. Ne yazık ki, gereksinimler belgelenmemiştir, bu yüzden bunu kendiniz çözmeniz gerekecek. Eğer bunu çözerseniz veya takılırsanız, lütfen bunu sorun formuna bildirin.