Soru sorGörüntü İşleme ile rengi tanımlamak ve Arduino ile rengin ledini yakmak
terranova tarafından 7 yıl önce soruldu

Matlabta kamerayı kullanarak sarı rengi tanımlamam ve bunu arduino kullanarak arduinoda ışık yaktırmam lazım. Herşeyi hallettim ama Matlabta nasıl sarı rengini tanımlayacağımı bulamadım. Yardımcı olursanız sevinirim.

4 Cevap
sayginer Yönetici tarafından 7 yıl önce cevaplandı

Merhaba,
Aşağıdaki bağlantılarda sorunuzun cevabını bulabilir, takıldığınız yer olursa tekrar sorabilirsiniz:

 

terranova tarafından 7 yıl önce cevaplandı

 RGB yani kırmızı yeşil ve mavi renklerini tanımlayabilirim onlarda sorun yok. Benim sorunum mesela matlaba sarı rengini gördüğünde 7 numaralı pine bağlı ledi yakmasını hangi kodu kullanarak yapabilirim. Daha doğrusu matlaba sarıyı nasıl tanımlayabilirim.

hakkans Yönetici tarafından 7 yıl önce cevaplandı

Kamerada gördüğünüzün sarı renk olup olmadığını anlamanız gerekiyor galiba. Eğer sabit bir tonda görüntü arıyorsanız görüntünüzden bunun bilgisini alabilirsiniz.

color=impixel(goruntu, x_koordinat, y_koordinat);

Bu rengi aldıktan sonra, diğer görüntü noktalarını bu renkle kıyaslamak için de çıkarma işlemiyle kıyas yapabilirsiniz. Aşağıdaki kodda hata_payi değişkeni üzerinden renk değişimi için belli miktarda pay bıraktık. Sabit bir ton gerekiyorsa aşağıdaki fark değişkeni 0 olmalı.

fark=norm(impixel(yeni_goruntu, x_koordinat, y_koordinat)-color);
hata_payi=0.1;
if fark/norm(color) < hata_payi %fark'ın rengin asıl tonuna oranı hata_payi'ndan küçükse Matlab'a 'Renk bulundu' yazdırılıyor.
disp('Renk bulundu');
else
disp('Renk bulunamadı');
end

Tüm resmi aramak isterseniz x_koordinat ve y_koordinat değerlerinin tarandığı for döngüleri de kurabilirsiniz.
Matlab'da önceden tanımlanmış bir sarı renk kullanmak istiyorsanız bunu RGB ile yapabilirsiniz. RGB kırmızı-yeşil-mavi üzerinden tüm renkleri tanımlayabilmenizi sağlar. Aşağıdaki linkte bazı sarı tonlarının RGB tanımları var. Yukarıdaki color değişkenini bu listedeki bir rengin 3 değeri üzerinden vektör olarak tanımlayarak kodun geri kalanını aynı şekilde kullanabilirsiniz.
http://www.rapidtables.com/web/color/Yellow_Color.htm

terranova tarafından 7 yıl önce cevaplandı
diff_im = imsubtract(data(:,:,1), rgb2gray(data));
 diff_im = medfilt2(diff_im, [3 3]);
 diff_im = im2bw(diff_im,0.3);
 diff_im = bwareaopen(diff_im,200);
 bw = bwlabel(diff_im, 4);
 toplam=sum(sum(bw)); % Kırmızı algılandığında yapılacaklar
if (toplam>20)
 writeDigitalPin(a,'D2',1);
 pause(0.1);
 writeDigitalPin(a,'D2',0);
 pause(0.1);
end
  

Bakın yukarıdaki örnekteki kod mesela kırmızı algılıyor ve bu renk algılandığında if statement kısmında yapılacak yazıyor. Benim bunun aynısının sarı renk için olanına ihtiyacım var.