23 Ocak 2017 Pazartesi

Python - OPENCV Yaya Tespiti (Görüntü İşleme)


Yaya tanıma (pedestrian detection) video takip, kişi davranış analizi, akıllı arabalar için sürücü destek sistemi gibi farklı uygulamalarda kullanılabilir. Yaya tespiti probleminde makine öğrenmesi teknikleri yaygın olarak kullanılmaktadır, bu tekniklerde eğitilmiş sınıflandırıcılar ile görüntü içerisindeki yaya tespit edilmeye çalışılır. Sınıflama yapılırken yani bizim örneğimizde görüntüdeki insanları bulurken, uygun bir sınıflandırıcı bulmak kadar bulunacak nesneye ait olan seçici/ayırt edici bir özelliğin (feature) çıkarılabilir olması da çok önemlidir. Yayaların tanınması probleminde HOG (Histograms of Oriented Gradient) ile özellik çıkarılması yönteminin başarılı sonuçlar verdiği gösterilmiştir.

                 

11 Ocak 2017 Çarşamba

C++ inline fonksiyon, önişlemci (preprocessor)


C++'da  önişlemci(preprocessor)/önişleme derleme işlemiminin bir parçası değildir, daha önce gerçekleştirilen bir aşamadır. Önişlemci adı üstünde olduğu gibi derleme işleminden önce kaynak kod üzerinde bir takım düzenlemeler/değişiklikler yapar. # karakteri ile başlayan satırlar önişlemci tarafından işlenir.

7 Ocak 2017 Cumartesi

Arduino TFT ekran ve Timer


Şimdiye kadar Görüntü işleme, Python, C++ ile ilgili çeşitli örnekler paylaştım. Bu defa küçük bir farklılık yapıp Arduino ile bir örnek uygulama paylaşmak istiyorum. Gerçekleştirdiğim bu uygulamada Arduino Mega 2560 ve ER_TFTM043_3 lcd ekran kullanılmıştır. Uygulamada amaç tft lcd ekranı sürmek ve bu ekranı timer kullanarak güncellemektir. Bunun için UTFT ve TimerOne kütüphaneleri kullanılmıştır. 

(Not: LCD görüntüsü aşağıdaki gibidir, yazının sonunda videoyu da izleyebilirsiniz)

5 Ocak 2017 Perşembe

Operatör Aşırı Yükleme (C++) - Operator Overloading


Operatör aşırı yükleme bir operatörün default tanımlı görevi dışında tanımlanan yeni bir görevi de yapabilecek hale getirilmesidir. Genel olarak syntax şu şekildedir.


type operator sign (parameters) { /*... body ...*/ }


C++ için aşırı yüklenmesine izin verilen ve verilmeyen oparatörler şunlardır;

6 Aralık 2016 Salı

Blob Detection Using OPENCV (C++)


GitHub (https://github.com/mribrahim/Blob-Detection) to download the codes and  contribute the project

A Blob means a group of connected pixels in an image that share near intensity values. In the image below, the goal is to detect the blobs and identify some properties belong to that blobs, as if regionprobs in Python (http://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.regionprops).

Measure Properties of Regions 

center:                point2f -> Center coordinates of region 
area:                   float -> Number of pixels of region. 
perimeter:          float -> Perimeter of region. 
eccentricity:       float -> Between 1 and 0. (1 for circle) 
solidity:              float -> Between 1 and 0. ( Area / ConvexHullArea ) 
compactness:     float -> Between 1 and 0. ( Area / BoundingRect Area ) -- measure of how close to a rectangle 
mean_intensity:  Vec3b -> mean intensity values of three channel(blue,green,red) of the region 
bounding_box:   Rect -> Bounding box of the region 

9 Kasım 2016 Çarşamba

C++ XML işlemleri


XML, farklı sistemler/yazılımlar arasında veri paylaşımını sağlamak için geliştirilmiş bir standarttır. Böylece paylaşılmak istenen verilerin, standart format kullanılarak yazılımdan bağımsız bir şekilde saklanması ve iletilmesi sağlanır.

C++ ile XML dökümanları oluşturmak ve okuyup ayrıştırmak için çeşitli kütüphaneler mevcuttur. Bunlardan bazıları :



6 Kasım 2016 Pazar

HSV renk uzayı, Renk filtreleme



RGB renk uzayı renkleri farklı tonlardaki üç ana rengin (kırmızı,yeşil,mavi) karışımı ile tanımlar.
HSV renk uzayı ise Hue, Saturation ve Value terimleri ile rengi tanımlar. RGB de renklerin karışımı kullanılmasına karşın HSV de renk, doygunluk ve parlaklık değerleri kullanılır. Doygunluk rengin canlılığını belirlerken parlaklık rengin aydınlığını ifade eder. HSV uzayında siyah renk için renk ve doygunluk değerleri 0 ile 255 arasında herhangi bir alabilir iken parlaklık değeri sıfırdır. Beyaz renkte ise ise parlaklık değeri 255'dir.




Buna göre herhangi bir bilgisayarlı görme/görüntü işleme uygulamasında belirli renkteki bir nesneyi ayırt etmek istediğimizde HSV renk uzayını kullanmak daha elverişlidir. Çünkü RGB nin aksine sadece hue değerini kullanarak eşik değer uygulama suretiyle renkleri daha net ayırt edebiliriz.

Örneğin; Aşağıda soldaki Muslera fotoğrafından kırmızı bölgeleri ayırt etmek istediğimizde; HSV renk uzayını kullanınca sağ üstteki sonucu, RGB renk uzayını kullanınca sağ alttaki sonucu elde ediyoruz. İlgili Python kodlarına yazının devamında ulaşabilirsiniz.


27 Ekim 2016 Perşembe

Python - Opencv kamera kalibrasyonu



Kamera kalibrasyonu 3 boyutlu bilgisayarlı görme uygulamalarında son derece önemlidir. Malumunuz kamera ile elde edilen görüntüler 2 boyutludur ve ayrıca kullanılan lensten kaynaklanan bozulmalar da vardır. Örneğin kullanılan lense göre görüntünün merkezindeki pikseller ile kenarlardaki piksellerin yer değiştirme oranları(nasıl tarif edeceğimi tam bulamadım ama literatürde bknz. lens distortion) farklı olabilir (Şekil 1). Kameranın üretiminden kaynaklanan bu bozukluğu gidermek için; kameranın iç parametreleri diye adlandırılan lens parametrelerini tahmin edip görüntüye düzeltme işlemi uygulamak gerekir. Bunun için gerçek büyüklüğü bilinen bir nesne referans olarak kullanılmalıdır. Genelde satranç tahtası (chessboard) bu amaçla kullanılır ve görüntü işlemede yaygın kullanılan OPENCV içerisinde de bu amaçla geliştirilmiş fonksiyonlar mevcuttur.


Şekil 1


19 Ekim 2016 Çarşamba

Python - VTK ile 3 Boyutlu (3D) görüntü oluşturma

Bu yazıda .stl uzantılı dosyayı okuyup VTK kütüphanesi ile 3 Boyutlu görüntüyü oluşturan Python kodunu paylaşacağım.

8 Ekim 2016 Cumartesi

Python - Dicom medikal görüntülerin açılması (SimpleItk, Vtk, Pydicom)

Medical görüntülerin depolanması/saklanması için DICOM dosya formatı yaygın olarak kullanılmaktadır.  DICOM görüntüler hastane ve kliniklerdeki görüntüleme cihazlarından elde edilen görüntülerin kalitelerinin korunmasını sağlar ve görüntünün elde edilişine dair kesit aralığı, modalite, protokol adı gibi parametreleri de içerir. Bu yazımda dicom görüntülerin Python ile nasıl açılacağına/okunacağına dair bilgiler vereceğim.

25 Eylül 2016 Pazar

Python - Webcam Capture GUI with PyQT

I will show an example how to capture webcam and display into QT widget. Opencv is used to capture the video and the stream is shown in a GUI. The main reason for integrating PyQT and Opencv is to be able to provide UI for computer vision applications using Opencv and Python.

QT Designer is used to design the GUI. User Interface in this example is so simple with only two buttons and a Qlabel(videoframe) is to show the stream.