8 Kasım 2012 Perşembe

Matlab ile kırmızı bir nesne algılandığında arduino ile led yakmak


Bu yazıda matlab ile görüntü işleme ve arduino ile kırmızı renkte bir nesnenin tanınması kırmızı nesne olması durumunda arduinoda belirtilen pindeki ledi yakan program gerçeklenmiştir.Programın ilk kısmı görüntü işleme kısmıdır kodu ve açıklamaları aşağıdaki şekildedir:
Source code   
video = videoinput('winvideo');%Kullanılabilir video kaynağı belirleniyor
resim=getsnapshot(video);%video nesnesinde bir resim çekiliyor
resim=ycbcr2rgb(resim);% resim ycbcr renk uzayından rgb renk uzayına dönüştürülüyor
figure;imshow(resim);%Renk dönüşümü yapılmış resim basılıyor
resim_r=resim(:,:,1);%Resimin kırmızı renk bileşeni belirleniyor
resim_g=resim(:,:,2);%Resimin yeşil renk bileşeni belirleniyor
resim_b=resim(:,:,3);%Resimin mavi renk bileşeni belirleniyor
figure;imshow(resim_r);title('Kirmizi bilesenler');%Resimin kırmızı renk bileşeni ekrana basılıyor
figure;imshow(resim_g);title('Yesil bilesenler');%Resimin yeşil renk bileşeni ekrana basılıyor
figure;imshow(resim_b);title('Mavi bilesenler');%Resimin mavi renk bileşeni ekrana basılıyor
maske=(resim_r>90)&(resim_r<120)&(resim_g<30)&(resim_b<40); %Kırmızı nesnenin açığa çıkartılması için maske oluşturuluyor
figure;imshow(maske);title('Maske');%Maske resmi ekrana basılıyor
Bir sonraki adımda mikroişlemciden led yakmak için matlabta kullandığımız kod kullanalıcaktır.İlk olarak ilk yazdığımız programda kullandığımız adisrv.pde  dosyasını arduinoya yüklememiz gerekmektedir. Daha detaylı bilgi için http://www.mcu-turkey.com/?p=22790  bakabilirsiniz.Kırmızı bir nesnenin gelip gelmediği lojiksel olarak bir maske oluşturulması sonucu nesnedeki “1″ seviyeli toplam piksel sayısına göre karar verilmesi ile nesnenin tespiti yapılmıştır.Aşağıdaki kodta led yakmanın kodu yer almaktadır.
Source code   
clc;clear all;
arduino = arduino('COM3');%bağlantının yapılacağı port belirleniyor
arduino.pinMode(2,'output');%2 nolu pin çıkış olarak belirtiliyor
if (toplam>20)%Toplam değeri 20 den büyük ise led yakılıyor
arduino.digitalWrite(2,1); %2 nolu pin lojik-1 seviyesine çekiliyor
else
arduino.digitalWrite(2,0);%2 nolu pin lojik-0 seviyesine çekiliyor
end
Uygulamadaki  kodun tamamı aşağıdaki şekildedir:
Source code   
clc;close all;clear all;
arduino = arduino('COM3');%bağlantının yapılacağı port belirleniyor
arduino.pinMode(2,'output');%2 nolu pin çıkış olarak belirtiliyor
video = videoinput('winvideo');%Kullanılabilir video kaynağı belirleniyor
resim=getsnapshot(video);%video nesnesinde bir resim çekiliyor
resim=ycbcr2rgb(resim);% resim ycbcr renk uzayından rgb renk uzayına dönüştürülüyor
figure;imshow(resim);%Renk dönüşümü yapılmış resim basılıyor
resim_r=resim(:,:,1);%Resimin kırmızı renk bileşeni belirleniyor
resim_g=resim(:,:,2);%Resimin yeşil renk bileşeni belirleniyor
resim_b=resim(:,:,3);%Resimin mavi renk bileşeni belirleniyor
figure;imshow(resim_r);title('Kirmizi bilesenler');%Resimin kırmızı renk bileşeni ekrana basılıyor
figure;imshow(resim_g);title('Yesil bilesenler');%Resimin yeşil renk bileşeni ekrana basılıyor
figure;imshow(resim_b);title('Mavi bilesenler');%Resimin mavi renk bileşeni ekrana basılıyor
maske=(resim_r>90)&(resim_r<120)&(resim_g<30)&(resim_b<40); %Kırmızı nesnenin açığa çıkartılması için maske oluşturuluyor
figure;imshow(maske);title('Maske');%Maske resmi ekrana basılıyor
toplam=sum(sum(maske));%Maskedeki toplam beyaz piksel sayısı belirleniyor
if (toplam>20)%Toplam değeri 20 den büyük ise led yakılıyor
arduino.digitalWrite(2,1); %2 nolu pin lojik-1 seviyesine çekiliyor
else
arduino.digitalWrite(2,0);%2 nolu pin lojik-0 seviyesine çekiliyor
end
Uygulama sonucu çekilen fotoğrafların renk bileşenleri ve maske,ledin  yandığını gösteren fotoğraflar aşağıdaki şekildedir:

Hiç yorum yok: