32
Sinyal ve Görüntü İşleme 1.Ders - Giriş Dr. Musa Ataş Siirt Üniversitesi Bilgisayar Mühendisliği

Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Sinyal ve Görüntü İşleme1.Ders - Giriş

Dr. Musa Ataş

Siirt Üniversitesi

Bilgisayar Mühendisliği

Page 2: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Sinyal ve Görüntü İşleme Tanımı• Sinyal nedir?

Sinyal, fiziksel değişkenlerin durumu hakkında bilgi taşıyan ve matematiksel olarakfonksiyon biçiminde gösterilen kavrama denir. Sinyal çoğunlukla tek boyutlu olarak (örn zaman serisi sinyalleri ‘’time series signal ’’ olarak bilinir.

Page 3: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Zaman serisi örnekleri (1B Sinyal)

• SES ÖRNEKLEMESİ• Ses kartları ses örneklemesi KHZ birimiyle ölçülür. ses kartlarında standart üç değişik

örnekleme bulunur.

• 11.25 KHZ (Telefon Kalitesi)

• 22.50 KHZ (Radyo kalitesi)

• 41.10 KHZ (cd kalitesi )

• Sesin kalitesi ne kadar yükselirse yapılan bir kaydın sabit diskte kaplayacağıalan o denli fazla olacaktır. örneğin 44.1 KHZ de bir dakikalık kayıt işlemisabit diskinizde yaklaşık 11Mbyte yer tutar. Bu nedenle ses kartlarınaverinin sıkışmasını sağlanır.Veri2:1,4:1 gibi oranlarda sıkıştırılır.

• Diğer zaman serisi örnekleri neler olabilir? Araştırınız.

Page 4: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Bu linkteki bilgileri okuyunuz : https://whatis.techtarget.com/definition/Nyquist-Theorem

Page 5: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,
Page 6: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Ders Kitabı

Page 7: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Bu Derste Kullanılacak Uygulama Geliştirme Dilleri

• Matlabhttps://www.mathworks.com/academia/students.html

• GNU Octavehttps://www.gnu.org/software/octave/

• OJL4J (Open Jazari Library for Java) https://github.com/hakmesyo/open-cezeri-library

https://github.com/hakmesyo/Open-Jazari-Library

https://open-cezeri-library.blogspot.com/

Page 8: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Açık Cezeri Kütüphanesinin Kurulumu

• https://open-cezeri-library.blogspot.com/2018/03/ack-cezeri-kutuphanesi-calsma-mantg.html

• https://open-cezeri-library.blogspot.com/2018/03/ack-cezeri-kutuphanesinin-kurulumu.html

Page 9: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Okuma Ödevi

• https://onlinelibrary.wiley.com/doi/abs/10.1002/cae.21745

• veya,

• https://www.researchgate.net/publication/303324806_Open_Cezeri_Library_A_novel_java_based_matrix_and_computer_vision_framework_OPEN_CEZERI_LIBRARY

Page 10: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

1 - Açık Cezeri Kütüphanesi çalışma mantığı nedirne işe yarar ve kimler OCL'yi kullanmalıdır?

• Open Cezeri Library (OCL), Java programlama dili ile hazırlanmış, açıkerişimli matris, veri görselleştirme, sinyal ve görüntü işleme, makineöğrenmesi ve derin öğrenme alt konularını ve modüllerini kapsayan baştaöğrenciler, akademisyenler, bilim adamları ve araştırmacılar için geliştirilenbir yazılım kütüphanesidir.

• Asıl ortaya çıkış hikayesi, El-Cezeri Sibernetik ve Robotik Laboratuvarındageliştirilen projelerde kullanılmak üzere ortak bir yazılım çatısı ve tekrarkullanılabilir (reusable) sınıf ve metodlar'dan meydana gelen alan-spesifikdil (Domain Specific Language DSL) geliştirmek olarak özetlenebilir. OCL tasarım deseni olarak, FactoryMethod, Facade, Singleton, Observer, veFluent Interface veya method chain kalıplarını kullanmıştır.

Page 11: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Java programlama dilinde vektörizasyon işlemleri Matlab, R veya Python dillerinegöre belirgin ölçüde zor ve zahmetlidir. Özellikle matris ve vektör tabanlı aritmetiğinyoğun olarak kullanıldığı makine öğrenmesi, sinyal ve görüntü işleme, bilgisayarlıgörü uygulamaları ve grafiksel işlemlerde Matlab, R, Python ve benzeri dillerdegeliştirilen uygulamalarda matris ve vektörel işlemler harici for döngülerine ihtiyaçduyulmaksızın dilin kendi yorumlama özelliğini kullandığından daha az satırlaçözülmeye çalışılır.

Örnek vermek gerekirse, Matlab'de sin() fonksiyonu parametre olarak tek birdeğişkeni aldığı gibi, tek boyutlu veya n boyutlu bir matrisi de alabilir mahiyettedir. Java'da Math sınıfında statik olarak tanımlı metodlar ise sadece tek bir değişkenüzerinde işlem yapılacak şekilde tasarlanmıştır.

Bir vektör (tek boyutlu dizi) veya bir matris (iki boyutlu dizi) üzerinde işlemyapabilmesi için sırasıyla tek seviyeli ve iç içe çalışan ikili for (nested for) döngüsüyapılarına ihtiyaç duyulur. Birçok işlemde tekrarlayan for döngüleri yazmak geliştiriciaçısından kodun denetiminin azalması, kod karmaşıklığına sebebiyet vermesi vehatalı kodlama riskini netice vereceği için tasvib edilmez.

OCL'yi geliştirirken aynen Matlab'da olduğu gibi n-boyutlu dizilerle çalışmaya imkanverebilecek bir framework geliştirmeye çalıştık. Şu an için OCL en fazla 2 boyutludizilerle çalışabilecek şekilde tasarlandı. Sadece bazı durumlar için örneğin renkli birgörüntünün piksel değerlerine ulaşmak istediğinizde 3 boyutlu diziüretebilmektedir.

Page 12: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

OCL'yi tasarlarken geliştiricinin sadece probleme odaklanmasını ve belirli bir mantıksal akış çerçevesinde kodlama sistematiğini bölmeden metodlar arasına nokta notasyonu ile sonuca ulaşması hedeflenmiştir. Bunun neticesinde geliştiricinin farklı sınıf veya metodları ayrı değişkenlere atamasına ve programın bütünlüğünü bozmasına gerek kalmamıştır.

Bu tarz yaklaşımın (Fluent Interface veya Method Chaining) diğer bir avantajı da geliştiricinin noktayı bastıktan sonra açılan popup menüden işi ile ilgili anahtar kelimeleri (keywords) yazarak ilgili metoda hızlı ve etkin ulaşabilme şansıdır. Bunun için birbiri ile alakalı metodlarsemantik olarak öbeklenmiştir. Mesela, görüntü işleme ile ilgili metodların tümü aynen Matlab'de olduğu gibi im ön eki ile başlarlar (imread, imhist, imshow gibi).

Page 13: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Aslında OCL'yi tasarlarken iki geliştirici kitleyi (Matlab ve JAVA yazılım geliştiricileri) göz önüne alarak aynı işlemi yapacak iki farklı isimde metodtanımlaması yazmayı uygun gördük. Örneğin OCL'yi kullanacak kişi Matlabplatformundan geliyorsa aşina olduğu fonksiyon isimlerini aynen muhafaza etmekle beraber, JAVA geliştiricilerinin sıklıkla kullandığı fiil önekli metodisimlendirmeleri (imread'in java karşılığı readImage gibi) de kullanıldı.

Bu bağlamda, geliştiricinin ismini unuttuğu bir metoda daha hızlı ve verimli bir şekilde konumlanmasının da önü açılmış oldu. Bu özelliklerin dışında OCL'de geliştirici isterse CMatrix nesnesinin herhangi bir state'ine yeni bir değişken tanımlaması yapmadan prev() ve next() komutları yardımıyla ulaşabilmektedir. Bu yaklaşım program akışını sekteye uğratmadan geliştiricinin kullanımına açılmıştır. Kullanıcı isterse performans ve hızdan kazanmak için söz konusu özelliği kapatabilir.

Youtube Linki: https://www.youtube.com/watch?v=XiL8RtApi78

Page 14: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

2 - Açık Cezeri Kütüphanesinin Kurulumu

• OCL'yi bilgisayarınıza sorunsuz bir şekilde kurmak, çalıştırmak ve kullanabilmek için aşağıda listelenen yönergeleri başarılı bir şekilde uygulamanız gerekir.

1- Sisteminizde JDK yüklü değilse http://www.oracle.com/technetwork/java/javase/downloads/index.html adresinde Netbeans editörünün çalışabileceği ve işletim sisteminize uygun jdk'yı indirip kurmalısınız. Bu tarih itibariyle Netbeans IDE 8.2 sürümü jdk 8 ile uyumlu olduğu için JDK 8 i indirmeniz gerekmektedir. Netbeans'in sonraki versiyonları hangi jdkya uyumlu ise oracle sitesinden uygun jdk'yi kurmanız gerekmektedir.

Page 15: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

2- Netbeans'in son sürümünü https://netbeans.org/downloads/linkinden indirip kuruyorsunuz.

3- OCL'yi sadece https://github.com/hakmesyo/open-cezeri-librarylinkinden indirmenizi öneriyorum. Farklı kaynaklardaki sürümler çok eski sürüm olduklarından çeşitli sorunlarla karşılaşabilirsiniz. Github'dan OCL'yi iki farklı yöntem ile bilgisayarınıza indirebilirsiniz. Birincisi Yeşil renkli "Clone or download" yazan butonu tıkladığınızda açılır pencereden

Page 16: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

resimde görüldüğü gibi butona basarak linki kaydediyorsunuz. Daha sonra Netbeans editörünüzün menülerinden sırasıyla Team menüsüne oradan git menüsüne oradan da clone seçeneğine tıklayarak "CloneRepository" penceresinin açılmasını sağlıyorsunuz. Burada RepositoryURL yazan yere github dan kopyaladığınız linki yapıştırıyorsunuz. Altta "Specify Destination Folder" yazan yerde hedef klasörünüz olan "C:\projects" yazarak "Next" sonra da "Finish" butonuna basıyorsunuz. Bu işlemlerden sonra OCL bilgisayarınıza indirilecektir.

Page 17: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,
Page 18: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

OCL indirme işlemi bir müddet sürecektir. İşlem bittikten sonra aşağıdaki gibi bir pencere belirecektir. Bu kısımda da "Open Project" butonuna basarak projenin editöre yüklemesini sağlamalısınız.

Page 19: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Clone yöntemi ile OCL'yi indirmenizin avantajı OCL güncellendikten sonra tüm projeyi indirmeden sadece güncel dosyaları indirebilme şansınızdır. Bunun için yapmanız gerekenler OpenCezeriLibrary projesini sol taraftaki proje penceresinden mouse ile seçtikten sonra sırasıyla menüden Team -- Remote -- Pull deyip açılan pencereden de next ile ilerleyip sadece güncel dosyaları indirmek olacaktır. OCL çok sık güncellendiği içi arada bir OCL yi son sürümüne güncellemeniz yararlı olacaktır. İleride OCL Maven veya Gradle sistemine geçtiğinde güncelleştirme işlemi otomatik olarak yapılacaktır. Ancak şu an için bu kısımda anlatıldığı şekilde yapmanız gerekiyor. Veya alt kısımda anlatılan zip yöntemini kullanmalısınız.

Page 20: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

İkinci alternatif, clone yapmadan OCL yi zip olarak indiripkurmaktır. Bunun için github linkinden yeşil renkli "Clone or Download" butonuna tıkladığınızda açılan pencerede "Download ZIP" seçeneğine tıklayarak OCL'yi indirme işlemini başlatıyorsunuz.

Page 21: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

OCL'yi bilgisayarınıza indirdikten sonra değişik zip yazılımlarından biri ile (winrar, winzip, 7z gibi) açıyorsunuz. Açarken "extract to here" veya "buraya çıkart" ı seçmelisiniz çünkü içiçe iki tane aynı isimde "open-cezeri-libraray-master" klasörünüzün olmaması gerekiyor. Mümkünse kök dizinde projects isminde bir klasör yapıp ("c:\projects veya d:\projects") açtığınız zip klasörünü projects dizininin içine/altına taşıyorsunuz.

Page 22: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

4- Netbeans geliştirme editörünüzü açtıktan sonra menüden open projectseçip "c:\projects\" in içindeki OCL'nin açılmasını sağlıyorsunuz.

Page 23: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

5- OCL Netbeans'te açıldıktan sonra editörün sol tarafındaki pencereden OpenCezeriLibrary projesine mousunsağ tuşuyla tıklayıp açılan popupmenüden "clean and build" seçeneğine tıklayarak projenin derlenmesini ve yine "c:\projects" dizini altında "SharedLibrary" isimli bir dizinin yapılmasını sağlıyorsunuz. SharedLibrary dizini "OpenCezeriLibrary.jar" dosyasını ihtiva etmekle birlikte ayrıca lib klasörünün altında OCL'nin kullandığı diğer üçüncü parti jar kütüphanlerini de içermektedir. Yapacağınız projelerde OCL'yikullanabilmek için söz konusu jardosyalarının projenize dahil edilmeleri gerekmektedir.

Page 24: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

6- Netbeans IDE'sinin sol kısmındaki projeler bölümünde boş biryere mousun sağ tuşu ile tıkladığınızda açılan popup menüden "newproject" seçip yeni bir proje açınız.

7- Yapacağınız yeni projeye büyük harfle başlayacak şekilde arasında boşluk karakteri olmadan İngilizce karakterlerle bir proje ismi veriyorsunuz. Örnek "OgrenciKayitProgrami" gibi.

8- Yeni projenizi de mümkünse "c:\projects\" dizini altına açmakta fayda vardır.

Page 25: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

9- Yeni projenizi yaptıktan sonra mouse ile üzerine gelip sağ tıkladığınızda açılan menüden "Properties" kısmına oradan da "Libraries" bölümüne tıklıyorsunuz. Sağ taraftaki pencerede "AddJAR/Folder" yazan butona tıklayıp projects klasörü altındaki "SharedLibraries" dizini içerisinden öncelikle "OpenCezeriLibrary.jar" dosyasını seçiyorsunuz. Dosyayı seçtikten sonra "Relative Path" radyo butonun aktif olduğundan emin olun. Daha sonra da tekrar addjar/folder butonuna basıp lib altındaki bütün jar ları ctrl+A ile seçip relative path radyo butonu aktif iken projenize dahil ediyorsunuz. Aslında bu jar'ların büyük çoğunluğunu belki de projenizde hiç kullanmayacaksınız. OCL'de uzmanlaştıkça projeniz için gerekli jardosyalarını daha kolay filtreleyebileceksiniz. Şimdilik başlangıç aşamasında tüm jar'ları dahil etmenizin çok büyük bir sakıncası yok.

Page 26: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,
Page 27: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,
Page 28: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,
Page 29: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

10- Dahil ettiğiniz jar'lardan bazıları JNI tabanlı geliştirildiği için (özellikle donanım bağlantılarında örneğin webcam, endüstriyel kamera, OpenCVve Arduino bağlantısı gibi işlemlerde) çeşitli dll dosyalarına ihtiyaç duyulacaktır. Dilerseniz bu dll'leri registry'den ekleyebilir veya sistem path'ini tanımlayabilir ya da kolay olması açısından OpenCezeriLibraryklasörü altındaki tüm dll dosyalarını kopyalayıp kendi projenizin altına yapıştırabilirsiniz.

Page 30: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,
Page 31: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

11- OCL ile birlikte gelen resimleri kendi projenizde de kullanmak isterseniz OpenCezeriLibrary klasörü altındaki "Images" dizinini de kopyalayıp kendi projenize yapıştırmalısınız.

Tüm maddeleri sırasıyla doğru bir şekilde uyguladıysanız artık OCL bazlı program geliştirebilirsiniz.

Youtube linki: https://www.youtube.com/watch?v=2P44OP_ziks

Page 32: Sinyal ve Görüntü İşleme 1.Ders - Girişmusaatas.siirt.edu.tr/IMAGE_PROCESSING/dersNotlari/... · 2019. 3. 7. · Java programlama dilinde vektörizasyonişlemleriMatlab,

Homework-1

• https://open-cezeri-library.blogspot.com/2018/03/ack-cezeri-kutuphanesi-1-boyutlu-sinyal.html linkindeki yazı dizisini okuyarak oradaki soruları kendiniz çözmeye çalışınız.