none
Resim İşleme İle İlgili Sorularım

    Soru

  • Merhaba

    Resim işlemeyi kafama göre yapıyorum herhangi bir api vs kullanmıyorum.

    C# ile bitmap üzerinde pixel pixel dolaşıp kendi yöntemimle karşılaştırmalar vs yaparak resim üzerinde istediğim objenin yer tespitini yapabiliyorum. Daha sonrasında bu bilgiler seriport üzerinden elektronik cihazıma gidiyor ve orada obje takibi yapıyorum. 

    Sorunum şu resim işlemem çok yavaş yani saniyede 2 kez filan tam tanımlama yapabiliyorum. Bunu nasıl hızlandırabilirim?

    C# ile bunları yapıyorum, önerebileceğiniz yöntem veya bu iş için biçilmiş kaftan kütüphane var mı?

    Veya C# bu iş için yetersiz ve hantal mı kalıyor?

    Yorumlarınız benim için önemli yardımcı olursanız çok teşekkür ederim.

    18 Haziran 2017 Pazar 10:51

Tüm Yanıtlar

  • C# da bu işi hızlı yapabilmeniz için unsafe moda çıkmanız ve pointerları kullanmanız gerekmekte ve yazdığınız algoritmanın mutlaka birden fazla thread ile çalışıyor olması gerekmektedir.

    Ayrıca bu gibi paralellik önemli işlemleri grafik kartına yaptırabilmeniz için üretici özelinde CUDA gibi API'lar mevcut. 

    Yine bir işi yaparken o işi yapmak için gereken algoritma karmaşıklığını en aza düşürmeniz gerekmektedir.  Dolayısıyla donanımdan ziyade kodun kendisi de çok önemli.  Bunları kavramak için Bubble Sort ile Quick Sort algoritmalarını karşılaştırmanız ve gerekli aydınlanmayı yaşamanız gerekir :)

    https://algoslaves.wordpress.com/2013/08/25/nvidia-cuda-hello-world-in-managed-c-and-f-with-use-of-managedcuda/

    http://kunzmi.github.io/managedCuda/

    https://cudafy.codeplex.com


    18 Haziran 2017 Pazar 11:45
  • Sanırım bu işi dediğiniz gibi grafik kartına yaptırmak en iyisi olacak.

    Aklıma takılan bir şey var CUDA AMD ekran kartlarında çalışabiliyor mu? :)

    Edit : Şimdi gördüm, "for NVIDIA, AMD and Intel Devices"



    • Düzenleyen Exs123 19 Haziran 2017 Pazartesi 11:01
    18 Haziran 2017 Pazar 11:51
  • OpenGL kutuphanelerini kullanarak image islemlerini hizlandirabilirsin. tabi algoritma secimi yapmak burada onemlidir. 

    C# daki apiler  kullnarak CPU uzerinde paralel programlama ile kiyaslamani yapabilir  ve GPU uzerinde ise OpenGL kutuphanesi (C# tarafinda OpenTK Api olarak vardi galiba ) ile shaderlar ile image uzerindeki islemleri cok daha hizli sekilde yapabilirsin. 

    bu konu uzerinde bir defa program yapmistim unide odev olarak. aklimda kalanlar bunlar. 


    • Düzenleyen Rudvan 18 Haziran 2017 Pazar 12:22
    18 Haziran 2017 Pazar 12:21
  • Sanırım bu işi dediğiniz gibi grafik kartına yaptırmak en iyisi olacak.

    Aklıma takılan bir şey var CUDA AMD ekran kartlarında çalışabiliyor mu? :)

    Edit : Şimdi gördüm, "for NVIDIA, AMD and Intel Devices"



    Her üreticinin kendi çözümü var. @Rudvan'ın dediği gibi OpenGL ile shader kullanımına da gidebilirsin : http://www.linuxjournal.com/content/image-processing-opengl-and-shaders

    opentk c# da opengl kullanmanın en kolay yolu. Fakat shader programlayabiliyor musun onu bilmiyorum, ilgi alanım dışında :)

    19 Haziran 2017 Pazartesi 17:31