Raspberry Pi

Raspi Hakkında Herşey

Python Dili

Python Dili Hakkında Herşey

Python İle OpenCV

Python Dili ile OpenCV Kullanımı

Internet Of Things

IoT Hakkında Herşey

Bina ve Ev Otomasyonu

Ev ve Bina Kontrolü Hakkında Herşey

7 Şubat 2018 Çarşamba

CC1310 TANITIM


Texas Instruments'in Simplelink ailesine ait olan bu entegre çok düşük enerji tüketimi Sub 1Ghz'lik haberleşme frekansı ve güçlü Arm Cortex M3 mimarisi ile çok fonksiyonlu ve hemen hemen her projede kullanılabilecek bir RF haberleşme sistemi gömülü bir işlemcidir.


Teknik Özellikleri
  • EEMBC CoreMark® Score: 142
  • EEMBC ULPBench™ Score: 158
  • İşlemci Clock frekansı 48Mhz'e kadar arttırılabilir.
  • Alınacak çeşidine göre 32KB, 64KB, veya 128KB programlanabilir flash hafıza
  • 8KB SRAM
  • 20KB Düşük güç tüketim SRAM
  • 2 pin JTAG debugging 
  • OTA(Over The Air) güncellenmesini destekler.
  • Düşük güç tüketimli sensör kontrol yönü
  • Sensör kontrol yönü için 2KB'lık SRAM hafizası
  • Her pini herhangi bir çevresel birim olarak atayabilme(Örn. RX pinini 6. pin olarak TX pini 10. pin olarak seçmek gibi)
  • 4  Timer modülü(8 tane 16-Bit veya 4 tane 32-Bit PWM)
  • 12-Bit ADC,200 körnek/s, 8 kanallı Analog MUX
  • Düşük güç tüketim Clock Komparatörü
  • Programlanabilir Akım kaynağı
  • 1x UART
  • 2x SPI
  • I2C, I2S
  • Real Time Clock(RTC)
  • AES-128 Güvenlik modülü(şifreleme ve şifre çözmek için)
  • Doğru Rastgele sayı üreticisi(TRNG)
  • 8 adet Kapasitif algılama butonunu destekler
  • Gömülü sıcaklık sensörü
  • Gömülü DC-DC çevirici.
Düşük Enerji Tüketimi
  • CC1310 Çalışma gerilimi 1.8 ile 3.8 V arasındadır.
  • RF tarafı alıcı kısmında iken 5.4mA akım çeker.
  • RF tarafı verici konumda(+10dBm) iken 13.4 mA
  • Aktif modda işlemci 48Mhz'de çalışıren 2.5mA çeker(akım hesabı ise: 51 μA/MHz )
  • Sensör kontrolcü kısmı aktifken(24Mhz'de) 0.4mA+8.2 μA/MHz
  • Standby modunda(RTC ve RAM açık) ise 0,7μA akım çeker. Bu özellik entegreyi farklı kılan özelliklerden biridir.
RF Kısmı
  • Alıcı hassasiyeti uzun mesafe modunda, -110 dBm 50kbps (Sub 1Ghz)
  • Programlanabilir çıkış gücü +15 dBm'e kadar
Araçlar 
  • Sensor Controller Studio
  • SmartRF Studio
  • Code Composer Studio

Neden CC1310

Bu özelliklerre baktığınız zaman CC1310'u neden kullanmalıyız sorusu şöyle yanıt buluyor.Çok düşük güç tüketimi gömülü rf ve her pini her çevresel birime(örn. uart,i2c,spi) atayabilme olanağı ile tasarım kolaylığıdır.

Peki RF kısmı ne kadar kuvvetli 

Kendi yapmış olduğum deneylerde nrf24l01+PA ve RFM75P modülleri ile mesafe kıyaslaması yaptım ve neredeyse 2 kat kadar bir mesafe uzunluğu olduğunu gördüm. ve diğer kartlara göre RF kısmı aktifken çok daha düşük güç tüketimi sağlıyor

TI ürün sayfasına buradan bakabilirsiniz.
Datasheetine buradan bakabilirsiniz.

29 Ağustos 2017 Salı

OPENCV DERSLERİ (DERS:23) HİSTOGRAM PART-3-2D HİSTOGRAMLAR

2D HİSTOGRAMLAR

    Daha önceki histogram derslerinde işlenilen konular aslında tek boyutlu histogram olarak adlandırılır.Bunun nedeni ise sadece gri tonlamaları kontrol etmesidir. Fakat 2 boyutlu histogramlarda iki özellik göz önüne alınır.Bu özellikler renk (Hue) ve dolgunluk (saturation) değerleridir. 

     Hue ve Saturation Nedir?
        Öncelikle HSV renk uzayından bahsedecek olursak HSV(Hue,Saturation,Value) renkleri sırasıyla renk özü, doygunluk ve parlaklık olarak tanımlar.
            Hue(Renk Özü): Rengin baskın dalga uzunluğunu belirler.Açısal bir değerdir(0-360). Bazı uygulamalarda 0-100 arası olağanlaştırılır. 
            Saturation(Doygunluk): Rengin canlılığını belirler.Yüksek doygunluk canlı renklere neden olurken,düşük doygunluk resmin gri tonlamaya yaklaşmasına neden olur.
        Aşağıdaki iki resim HSV renk uzaylarını göstermektedir.

       



OPENCV'DE 2D HİSTOGRAM

    OpenCV'de bu işlem oldukça basittir. Bu işlem cv2.calcHist() fonksiyonu kullanılarak yapılır. Renk histogramlarını bulmak için görüntü renklerini BGR formatından HSV formatına çevirmek gereklidir.Bu fonksiyonun parametreleri şunlardır;
    ➤Kanallar: [0,1] çünkü hem H hemde S düzleminde işlemek zorundadır.
    ➤Kutular: [180,256] 180 H düzlemi 256 S düzlemi içindir. Siz bu değerleri gerekli şekilde değiştirebilirsiniz.
    ➤Menzil: [0,180,0,256] Hue değeri 0 ile 180 arasında Saturation değeri 0 ile 256 arasında değişmektedir.

    Kod ile gösterecek olursak;
import cv2
import numpy as np

img = cv2.imread('home.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])


NUMPY'DE 2D HİSTOGRAM

    Numpy 2D histogram için ayrı bir fonksiyon sunar. Bu fonksiyon np.histogram2d() dir.

    Kod ile gösterecek olursak;
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('home.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

hist, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])
    Burada birinci argüman H düzlemi,ikincisi S düzlemi,üçüncüsü kutu sayısı,dördüncüsü ise aralık derecesidir.

2D HİSTOGRAM ÇİZDİRME YÖNTEMİ

    Matplotlib Kullanımı;
        Örnek Resim:
        Kod:
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('image.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hist = cv2.calcHist( [hsv], [0, 1], None, [180, 256], [0, 180, 0, 256] )

plt.imshow(hist,interpolation = 'nearest')
plt.show()
        Sonuç:


15 Ağustos 2017 Salı

CC3200MOD LAUNCHPAD DERSLERİ (DERS:1) TANITIM


    CC3200MOD Texas Instruments firmasının IOT çözümleri için geliştirdiği CC3200 işlemcisi ve çevresel donanımlarının bir paket haline getirdiği bir modüldür.
    İlk başta hemen söyleyelim CC3200 launchpad'teki çevresel donanımlar bir kılıfla sunulduğu için CC3200MOD launchpadi ile bu launchpad arasında yazılımsal donanımsal olarak hiç bir fark yoktur.Bu ders serisini takip ederken CC3200 launchpad ilede eşlik edebilirsiniz.
    Bu kartı ve CC3200MOD entegresini anlatmadan önce IOT nedir biraz ondan bahsedelim.

IOT NEDİR?

   IOT(Internet Of Things) yani nesnelerin interneti,aklınıza gelebilecek hertürlü eşyanın elektronik ve yazılım donanımlarla internete bağlanabilmesi, kontrolü,gerekli verilerin kaydedilmesi ve veri gönderimini sağlayan bir alandır.
    Peki nerelerde ve nasıl kullanılır diye sorulacak olursa,Akıllı ev sistemleri, Cloud(Bulut) sistemlerine sensör (sıcaklın, basınç, nem, hareket, ağırlık vs...) verilerinin kaydedilmesi endüstriyel otomasyon sistemleri uzaktan kontrol, otonom sistemler gibi elektroniğin bulunduğu her alanda kullanılabilmektedir.
    İyi bir IOT girii yapmak için neler bilinmelidir sorusunun cevabını verecek olursak.Öncelikle IOT adı üstünde olduğu gibi internet üzerinden çalışır bunun için bazı internet protokollerine yani haberleşme protokollerine hakim olmanız gerekmektedir. Bunlar ise;
  • HTTP protokolü
  • MQTT Protokolü
  • Client,Server ilişkisi 
  • SMTP Protokolü
  • TCP/IP Protokolüdür. 

CC3200MOD Özellikleri

    

    CC3200MOD içinde 80MHz'lik ARM Cortex M4 mimarisine sahip işlemcisi bulunan bir IOT entegresidir.Özellikleri;

        ➤ Gelişmiş Donanım Güvenliği İçeren Donanım Şifreleme Motoru Bunlar; AES,DES ve 3DES
        ➤ 8 bitlik hızlı paralel kamera arayüzü
        ➤ 1 adet multichannel I2S formatında Audio seri portu
        ➤ 1 adet SD(MMC) arayüzü
        ➤ 2 adet asenkron UART arayüzü
        ➤ 2 adet SPI arayüzü
        ➤ 1 adet I2C arayüzü
        ➤ 4 adet Timer
        ➤ 16 bitlik PWM
        ➤ 1 adet Watchdog Timer
        ➤ 4 kanal 12 bitlik ADC
        ➤ Wi-Fi Ağ İşlemci Alt Sistemi

    Öne çıkan özellikleridir.

Neden CC3200MOD ?

    Bir çok IOT çözümü için yapılmış modüller,kartlar ve entegreler kullandıktan sonra CC3200 entegresi diğer çözümler oranla daha düşük enerji tüketimi,daha iyi stabilite , kamera arayüzü, sd kart arayüzü gibi daha kapsamlı imkanlar sunması ve tek başına çoğu alanda yeterli olması kullandığım IOT çözümleri arasında en iyisi olduğunu kanıtladı.
    Tek dezavantajı 35 dolar gibi yüksek bir fiyata satılması.35 dolar ise profesyonel anlamda IOT işleri yapacaksanız çok önemli olmasa gerek.

Gerekli Dökümanlar

 Datasheet: Buradan açabilirsiniz.
 Technical Referance Manuel: Buradan açabilirsiniz.
 Getting Started Guide: Buradan açabilirsiniz.
 Texas Instruments linki: Buradan açabilirsiniz.

5 Temmuz 2017 Çarşamba

OPENCV DERSLERİ (DERS:22) HİSTOGRAM PART-2-HİSTOGRAM EŞİTLEME

HİSTOGRAM EŞİTLEME

    Piksel değerleri belirli bir aralıkta olan bir görüntüyü düşünün.Örneğin çok parlak bir görüntü tüm piksellerin yüksek değerlerle sınırlı kalmasına neden olur. Ancak iyi bir görüntü demek resmin tüm bölgelerinden piksellere sahip olmak demektir.Dolayısıyla histogramı başlangıç ve bitiş noktalarına dağıtmak zorunda kalabilirsiniz.İşte Histogram eşitleme işleminin yaptığı budur.Bu işlem normalde görüntünün kontrastını değiştirir.
    Bu konuda ayrıntılı bilgiye buradan ulaşabilirsiniz.
      Bir resimin histogram aralığını inceleyelim;
        Giriş resmi:
       
        Kod:
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('image.jpg',0)

hist,bins = np.histogram(img.flatten(),256,[0,256])

cdf = hist.cumsum()
cdf_normalized = cdf * hist.max()/ cdf.max()
cv2.imshow('img',img)
plt.plot(cdf_normalized, color = 'b')
plt.hist(img.flatten(),256,[0,256], color = 'r')
plt.xlim([0,256])
plt.legend(('cdf','histogram'), loc = 'upper left')
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
        Sonuç: 
           
    Resmin histogramına bakıldığı zaman pikseller daha parlak bir noktada toplanmıştır.Fakat tam bir spektruma ihtiyaç vardır.Bunun için parlak bölgenin giriş piksellerini tam bölgedeki çıktı piksellerine eşleyen bir dönüşüm fonksiyonuna ihtiyaç vardır.Histogram eşitleme işlemi bunu yapmaktadır.
    İlk adım olarak minimum histogram değeri bulunur(0 hariç).Ardından histogram eşitleme işlemi uygulanır.
cdf_m = np.ma.masked_equal(cdf,0)
cdf_m = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())
cdf = np.ma.filled(cdf_m,0).astype('uint8')
    Bu işlemden sonra giriş piksel değerleri için çıktı piksel değeri hakkında bilgi veren bir arama tablosuna sahip olunur.
img2 = cdf[img]
    Yukarıdaki Giriş resmi için histogram eşitleme işlemini uygulayalım;
        Kod:
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('image.jpg',0)

hist,bins = np.histogram(img.flatten(),256,[0,256])

cdf = hist.cumsum()
cdf_normalized = cdf * hist.max()/ cdf.max()
cdf_m = np.ma.masked_equal(cdf,0)
cdf_m = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())
cdf = np.ma.filled(cdf_m,0).astype('uint8')
img2 = cdf[img]
cv2.imshow('img',img2)
plt.plot(cdf_normalized, color = 'b')
plt.hist(img2.flatten(),256,[0,256], color = 'r')
plt.xlim([0,256])
plt.legend(('cdf','histogram'), loc = 'upper left')
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
        Sonuç:
        
    Yeni resimin histogramına bakıldığı zaman pikseller düzgün bir şekilde dağılmış histogram eşitliği sağlanmış ve ideal bir görüntü elde edilmiştir. 
    Histogram eşitleme işlemi nesne bulmada resimlerdeki aranacak nesnenin parlaklık oranının bütün resimlerde aynı olmasını sağlar nesne tanımada önemli bir rol oynar.
    Yukarıdaki kodda yapılan uzun işlemler sonucunda histogram eşitleme sağlanmıştır.Fakat OpenCV'de bu işlemi tek satırda yapan özel bi fonksiyon bulunmaktadır.Bu fonksiyon cv2.equalizeHist() fonksiyonudur.
    Yine aynı giriş resmi için bu yöntemi uygulayalım:;
        Kod:
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('image.jpg',0)
equ = cv2.equalizeHist(img)
res = np.hstack((img,equ))
cv2.imwrite('res.png',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
        Sonuç:
        

CLAHE(Kontras Sınırlı Histogram Eşitlemesi)
    Önceki histogram eşitlemeleri görüntünün genel kontrastını göze alır.Çoğu durumda bu iyi bir fikir değildir. Örnek olarak bir resimde anlatmak gerekirse;
    Yukarıdaki resime önceki histogram eşitleme yöntemi uygulandığında yüzün daha çok kaybolduğu görülmektedir.Bunun nedeni ise histogramın belirli bir bölgeyle sınırlı kalmamasıdır.
    Bu sorunu çözmek için CLAHE yöntemi kullanılır.Burada giriş resmi 8x8'lik bölgelere ayrılmıştır. Ardından herbir bölge önceki aşamalardaki gibi histogram eşitlemesine tabi tutulmuştur.Buradaki amaç her bir histogram eşitlemeyi küçük bir bölgede uygulamaktır. Fakat dezavantaj olarak resimdeki gürültü oranı artacaktır.Bunu önlemek için ise kontrast sınırlaması uygulanır. Herhangi bir bölgenin kontrast değeri sınırın üstündeyse bu pikseller histogram eşitlemesi uygulanmadan önce kesilir ve diğer bölgelere eşit olarak paylaştırılır.Eşitleme sonrasında ise bölgelerin çıkarılabilmesi için bilinear enterpolasyon uygulanır.
    Yukarıdaki giriş resmini bu eşitlemeye sokar isek;
        Kod:
import numpy as np
import cv2

img = cv2.imread('image.jpg',0)

clahe = cv2.createCLAHE(clipLimit=5.0, tileGridSize=(8,8))
cl1 = clahe.apply(img)

cv2.imwrite('clahe_2.jpg',cl1)
cv2.waitKey(0)
cv2.destroyAllWindows()
        Sonuç:
        
    Sonuca bakıldığı zaman yüz heykeli detayları kaybedilmeden histogram eşitleme yapılmıştır.


Ders:21⬅                                                      Ders:23

OMEGA 2 (DERS:2) KUTU AÇILIMI,KURULUM

KUTU AÇILIMI
    Omega mini IOT bilgisayarının 2 adet modeli bulunmaktadır bunlar Omega 2 ve Omega 2+ modelleridir. Elimde Omega 2 olduğundan dolayı ders serisi omega 2 üzerine devam edecektir. İşleyiş olarak omega 2 ve omega 2+ modellerinin hiç bir farkı yoktur.
    Omega 2'nin USB vs gibi çevresel birimleri olmadığı için omega 2 için üretilmiş olan Expansion Dock ile birlikte kullanılacaktır.
    Kutu açılımlarına bakalım;


    Kuruluma başlamadan önce Expansion Dock Hakkında kısaca bilgi verelim;
    Resimden de görüldüğü üzere expansion dockta reset butonu, power butonu pin headerlari,micro usb portu ve usb portu bulunmaktadır.Bu sayede omega 2'yi kullanmak daha rahat olacaktır.



İLK KURULUM
    Öncelikle Omega 2'yi Expansion Dock'a aşağıdaki resimdeki gibi takın.
   
    Omega 2 Expansion docktaki micro usb portundan beslemesini almaktadır.Bunun için bir micro usb kablosu ile ister bilgisayara ister bir adaptöre bağlayarak beslemesini verin.
    Fakat Omega 2'nize beslemenin gitmediğini göreceksiniz. Expansion Dock'taki power switch'ini ON konumuna aldığınız zaman Omega'ye ait ledin yanıp södüğünü gözleyeceksiniz.
    Daha Sonra bilgisayarınızada wifi arattırın ve aşağıdaki gibi bir wifi ismi çıkacaktır(Omega-XXX). Bu wifi ağına bağlanın. Wifi şifresi ise bütün omega modelleri için default olarak "12345678" olarak belirlenmiştir.
    Omeganızın Wi-Fi'sine bağlandıktan sonra tarayıcınıza "192.168.3.1" yazın ve kurulum aşamasına geçin.
    Tarayıcınıza omeganızın IP'sini yazdıktan sonra yukarıdaki resimdeki gibi bir arayüz karşınıza çıkmaktadır.Daha sonra Start butonuna basarak kurulumun ilk aşamasına geçebilirsiniz.
    Tuşa basıldıktan sonra aşağıdaki resimdeki gibi bir kullanıcı giriş sayafası karşınıza gelir.Omega 2'de default olarak kullanıcı adı "root" şifre ise "onioneer"dir bunları girerek  "Log In" butonuna basın ve giriş yapın. 
    
    Tuşa bastıktan sonra aşağıdaki resimdeki gibi Omega'nızın bağlanacağı internet ve şifre bilgisini istemektedir.
    Choose Wi-Fi kısmından bağlanacağınız interneti seçtikten sonra o internete ait şifreyi girerek "Configure WiFi" butonuna basın ve interneti yapılandırın.
    Bu işlem tamamlandığında bilgisayarınızın Omega 2'nin Wifisine olan bağlantısı kopacaktır.Tekrar bağlanarak "192.169.3.1" IP'sini tarayıcınızda açarak önceki adımları tekrarlayın.
    İnternet Bağlantı ayarlamsı kısmında ise aşağıdaki gibi bir durumla karşılaşacaksınız. Bu adımı daha önce yaptığınız için "Skip Step" butonuna basarak bir sonraki aşamaya geçin.
    Bir sonraki aşama ise Omega 2'nin Cloud servisine kayıt olma işlemidir.Bu aşama zorunlu değildir.Fakat ileride çok işinize yaracağından yapmanızı öneririm.
    Öncelikle Register butonuna basarak Cloud servisine emailiniz ile kayıt yaptırın emailinize gelen aktivasyon linkine tıklayarak aktive edin ve daha sonra Cloud servisi için cihazınıza aşağıdaki resimdeki gibi bir isim verin ve kapatın.
    Daha sonraki aşama ise işletim sistemini ve konsolu yükleme işlemidir bunu için "install Console" seçeneği tikli olmalıdır.ve İnstall butonuna basın.
    Yükleme işlemi yaklaşık 5-10 dakika sürmektedir.Yüklenme işlemi bittikten sonra aşağıdaki gibi bir sayfa ile karşılaşacaksınız.
    Bu sayfayı gördüğünüzde yükleme işleminiz bitmiş demektir.Sayfanızı yenileyerek işletim sisteminize girebilirsiniz.
    Şimdi mini Linux işletim sistemimizi inceleyelim ve gerekli konsol kurulumunu yapalım.
    Sayfayı yenilediğinizde giriş için kullanıcı adı ve şifre istemektedir.Bunlar için gene "root" kullanıcı adını ve "onioneer" şifresini girerek sistemimize girelim. Kullanıcı arayüzü aşağıdaki resimdeki gibidir.
    Settings sekmesine bakıldığı zaman aşağıdaki gibi bir arayüz ile karşılaşılmaktadır.
    Burada omega 2nin özellikleri bulunmaktadır.Sol köşedeki soğan simgesine basarak ana menüye geri dönelim ve Terminal'e basalım.
    Terminale basıldığı zaman yüklenmesi gerektiği söylenmektedir. Yükle butonuna basarak terminali yükleyelim.Terminal yüklenmesi bittiği zaman sayfayı yenilememizi istemektedir.
    Sayfayı yenilendiğinde tekrar terminale girildiğinde;
     Böyle bir görüntü ile karşılaşacaksınız login kısmına root yazıp enterlarsanız şifreyede onioneer yazıp enterlarsanız işletim sisteminizin terminaline buradan ulaşmış olacaksınız.

27 Haziran 2017 Salı

OMEGA 2 (DERS:1) TANITIM,ÖZELLİKLER



    Omega 2 5 dolarlık fiyatı olan dünyanın en küçük IOT bilgisayarıdır . Raspberry Pi'nin 1/4'ü kadar boya sahip olan Omega 2 içinde Linux sunucusu ve dahili Wi-Fi bulundurmaktadır. 
    Onion firması kickstarter kampanyası ile üstün bir başarı yakalamıştır.
    Şuan Omega'nın iki farklı modeli bulunmaktadır. Bunlar;
    ➥ Omega 2
    ➥ Omega 2 plus

    Bu iki modelin teknik özelliklerini incelersek;


    PIN Yapısı;

Omega 2 Nedir? Ne İşe Yarar
    Omega 2 özellikle IOT projelerinde kullanılması için tasarlanmış bir mini Linux bilgisayarıdır. Tabiki Omega 2 'de bir masaüstü bilgisayarının yaptığı işleri yapması beklenmemelidir. Ama Omega 2 IOT projeleri için gerekli bütün alt yapıyı sağlar.
     Kısacası Omega 2 Arduino nano'nun minikliğini ve güç tüketimini, Raspberry Pi'nin esnekliğini ve gücünü hissetmenizi sağlamaktadır.

Omega 2 Tak Çalıştır Bilgisayardır
    Omega 2 Raspberry pi ve türevleri gibi SD karta işletim sistem dosyaları yazılmasına gerek duymaz.Tak çalıştır bir bilgisayadır.Kurulum oldukça basittir.

Omega 2 Uygulamalar Çalıştırır
    Omega 2 diğer bilgisayarlar gibi uygulamalar çalıştırabilir. Sahip olduğu App Store sayesinde bir çok uygulama keşfedip kullanabilirsiniz.


Omega 2 Bir Çok Dil İle Programlanabilir
    Omega 2; PHP, Python, NodeJs, Ruby, C++ gibi birçok yazılım dili ile programlanabilir.

 


Omega 2 Cloud ile Entegrasyonludur
    Omega 2 Onion Cloud ile entegre halinde çalışır.Bu sayede Omega 2'yi Cloud ve sağlanan API'ler sayesinde istenildiği yerden kontrol etme imkanı vardır. Omega 2 de kod deploy edilebilir ve gerçek zamanlı olarak durum kontrolü yapılabilir.



        

26 Haziran 2017 Pazartesi

OPENCV DERSLERİ (DERS:21) HİSTOGRAM PART-1-BUL,ÇİZ,ANALİZ

HİSTOGRAM NEDİR?

    Histogramı bir görüntünün yoğunluk dağılımı hakkında genel bilgi veren bir grafik veya alan olarak düşünebilirsiniz. Histogram görüntüyü analiz etmenin başka bir yoludur.
    Görüntünün histogramına bakılarak o görüntünün parlaklık,  kontrast, yoğunluk dağılımı vb. gibi bilgiler elde edinebilirsiniz.
    Histogramla ilgili daha detaylı bilgi almak için buradan yardım alabilirsiniz.

 
       Histogram grafiği gri skaladaki resimler için bulunabilir.Yukarıdaki resimde histogram grafiğine bakıldığında sol taraftaki alan daha koyu piksellerin miktarını,sağ taraftaki alan ise daha parlak piksellerin miktarını göstermektedir.


HİSTOGRAM BULMAK

       Histogram bulma açısından hem OpenCV hemde Numpy kütüphaneleri ayrı ayrı işlevlere sahiptir.Bu işlevleri kullanmadan önce histogramla ilgili bazı terminolojileri anlamak gerekmektedir;

       ➤BINS: Yukarıdaki resimde her bir piksel için 0 ile 255 arasındaki yoğunluğunu gösterir. Eğer belirli yoğunluk değerindeki pikselleri ayrı ayrı göstermemiz istenirse ÖRN: 0-15,16-31...240-255 gibi. Ölçeklendirme parametresini 16 olarak ayarlamak gerekmektedir.Böylece 16 ayrı ölçeklendirme yapılacaktır.Yapılan 16 ölçeklendirmeden her birine BIN denir. BINS parametresi OpenCV'de histsize ile temsil edilir.
       ➤DIMS: Veriyi topladığımız parametre sayısıdır.burada bu parametre 1 yapılarak veri toplama işlemi sağlanılır.
       ➤ARALIK: Ölçmek istenilen yoğunluk değeri aralığıdır.Normal ayarlarında [0,255] arası değerleri bulacak şekilde ayarlanmıştır.

    1)OpenCV'de Histogram Hesabı

        Histogram bulmak için OpenCV'de cv2.calcHist() fonksiyonu kullanılır.
cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])

        ➤images: uint8 veya float32 türünde histogramı bulunacak kaynak görüntüdür.
        ➤channels: Histogram hesaplanan kanal dizinidir.Köşeli parantez içerisinde yazılmalıdır. Örneğin histogramı bulunacak kaynak görüntü gri skalada ise bu değer [0]dır. Renkler kanalları mavi,yeşil,kırmızı içinde bu değer sırasıyla [0],[1],[2] dir.
        ➤mask: Maske resmidir. Tam görüntünün histogramını bulmak için None (yok) kabul edilmelidir. Ancak görüntünün belirli bir bölgesinin histogramı bulunması isteniyorsa bunun için bir maske resmi oluşturulmak zorundadır.
        ➤histSize: BIN sayısını temsil eder. Köşeli parantez içinde yazılmalıdır.
        ➤ranges: Histogram aralığıdır. O değerler arasındaki piksel yoğunluklarını bulur.

        Bir örnek vermek gerekirse bir resimin [0,256] arasındaki histogramını bulan kod;
img = cv2.imread('home.jpg',0)
hist = cv2.calcHist([img],[0],None,[256],[0,256])

    2)OpenCV'de Histogram Hesabı  

        Histogram bulmak için Numpy kütüphanesinde np.histogram()  fonksiyonu kullanılır.
hist,bins = np.histogram(img.ravel(),256,[0,255])

HİSTOGRAM ÇİZDİRMEK



import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('apple.jpeg',0)
cv2.imshow('img',img)
plt.hist(img.ravel(),256,[0,256]); plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('apple.jpeg')
cv2.imshow('img',img)
color = ('b','g','r')
for i,col in enumerate(color):
histr = cv2.calcHist([img],[i],None,[256],[0,256])
plt.plot(histr,color = col)
plt.xlim([0,256])
plt.show()

MASKE UYGULAMASI


import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('apple.jpeg',0)

# create a mask
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:300, 100:400] = 255
masked_img = cv2.bitwise_and(img,img,mask = mask)

# Calculate histogram with mask and without mask
# Check third argument for mask
hist_full = cv2.calcHist([img],[0],None,[256],[0,256])
hist_mask = cv2.calcHist([img],[0],mask,[256],[0,256])

plt.subplot(221), plt.imshow(img, 'gray')
plt.subplot(222), plt.imshow(mask,'gray')
plt.subplot(223), plt.imshow(masked_img, 'gray')
plt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask)
plt.xlim([0,256])
plt.show()
         Resim x ekseninde 100-400 arası ve y ekseninde 100-300 arası maskelenerek histogram eğrileri çizdirilmiştir


Ders:20⬅                                                       Ders:22