MATLAB ile Bozuk Para Sayma Algoritması

Merhaba arkadaşlar..
Bir başka projede birlikteyiz :) Bu projede farklı miktarlardaki bozuk paraları (1TL, 25Kr, 50Kr..) görüntü işleme algoritmalarını kullanarak sayma işlemi gerçekleştireceğiz.  Görüntü olarak 'para.jpg' yi kullandık.

Daha önceki 'Resim Üzerindeki Nesneleri Bulma' yazımda resimdeki nesnelerin nasıl belirlendiğini ve bu nesnelerin kaç adet olduğunu size anlatmıştım. Burdaki mantığı kullanarak para sayma işlemini yapacağız.

Bu adımları sıralayacak olursak;
  • 1.Adım olarak, resmi okuma işlemini gerçekleştirmiştik.
  • 2.Adım olarak, öncelikle resmi gri tona yani 2 boyuta döndürmemiz ve şekilleri belirlemeye yardımcı olması için resmi tamamen binary hale getirmemiz gerekiyordu.
  • 3.Adım olarak, görüntüdeki bağımsız bileşenleri kaldırmamız gerekiyordu bunun için morfolojik işlemler uyguluyorduk. 
  • 4.Adım olarak, nesnelerin sınırlarını buluyorduk. (Bu uygulamada gerek yok.)
  • 5.Adım olarak ise nesnelerin alanlarını hesaplıyorduk.
Bu işlemleri sırayla para sayma algoritmasında da yazacağız. Çünkü paraları öncelikle tanımamız gerekiyor. Paraların yarıçaplarına göre de etiketleme yapıcağız.

İlk olarak resmimizi okuma işlemi ile başlıyoruz.
clc;
clear all;
imageorj=imread('C:\para.jpg'); %Resmimizi okuyoruz.
figure(1),imshow(imageorj);
Şekil-1
Resmimizi okuduktan sonra önce gri-tona çevirip (2D) sonra Binary (Siyah-Beyaz) formata çeviriyoruz. Çünkü diğer işlemler için görüntü binary modda olması lazım.
image=rgb2gray(imageorj); %Resmimizi gri tona çeviriyoruz. (2-Boyut)
level=graythresh(image);
bw=im2bw(image,level);
figure(2),imshow(bw);
Şekil-2

Bu adımda doldurma (fill) ve gereksiz bileşenlerin kaldırılması yapılacaktır.
imcomplement: binary modda siyah alanlar beyaz, beyaz alanlar siyaha çevrilir. Bu kodu eklememizdeki amaç imfill komutunu hatasız kullanabilmemiz içindir. İmfill komutunu hatasız kullanmak için nesnelerimiz beyaz arkaplan beyaz olması gerekmektedir.
bw=imcomplement(bw); %Resmi negatiflik ekliyoruz.
figure(3),imshow(bw)
bw=imfill(bw,'holes');%Resimde çukur diye nitelendirilen yerleri dolduruyoruz.
bw = bwareaopen(bw,30);%30px den daha az sayıda olan nesneler kaldırılıyor.
figure(4),imshow(bw);
Şekil-3
Şekil-4
Bu bölümde resmimize morfolojik filtreler uyguluyoruz. Öncelikle strel dairesel bir yapısal element olusturup imerode komutu ile aşındırma işlemi yapıyoruz. Bunu yapmamızdaki amaç yapışık olan paraların ayırmaktır. Böylece daha düzgün sonuçlar alabiliriz.
se=strel('disk',11); %Yarıçapı 11px olan disk biçiminde yapısal element oluşturuyoruz.
bw2=imerode(bw,se); %Birlesik madeni paralarin ayrilmasi saglaniyor.
figure(5),imshow(bw2);
Şekil-5
Resmimizle ilgili ön hazırlık bitmiştir. Resmimiz hazır haldedir. Bundan sonra asıl komutlara geçeceğiz.
bwboundaries komutu ile para adetini öğrenip döngüye sokup her paranın alanlarını öğreniyoruz ve bu alanlara göre paralarının tanımını yapıp toplam parayı ekrana yansıtıyoruz.
[B,L] = bwboundaries(bw2);  % length(B) ile para adetini ogrendik ve etiket atadik
stats = regionprops(bw2, 'Area','Centroid');
figure(6),imshow(imageorj);
toplam = 0;
for n=1:length(B)
a=stats(n).Area; % Her paranın alanını öğrendik. Boyutlara göre hesaplama yaptık.
centroid=stats(n).Centroid;
if a> 1200
toplam = toplam + 1;
text(centroid(1),centroid(2),'1TL');
elseif a >800 && a < 1050
toplam = toplam + 0.5;
text(centroid(1),centroid(2),'50Kr');
elseif a >500 && a < 650
toplam = toplam + 0.25;
text(centroid(1),centroid(2),'25Kr');
elseif a > 360 && a < 380
toplam = toplam + 0.10;
text(centroid(1),centroid(2),'10Kr');
else
toplam = toplam + 0.05;
text(centroid(1),centroid(2),'5Kr');
end
end

title(['Toplam para miktari = ',num2str(toplam),' TL'])
Şekil-6
Evet arkadaşlar projemiz tamamlanmıştır.Yardımcı olabilmişimdir İnşallah :) Özet olarak resmimizi bir önişlemden gerçiriyoruz hazır hale geldikten sonra asıl kodları yazıyoruz. Önişlemde kullanılan komutların altyapısını yani teorisini iyi öğrenmenizi tavsiye ederim. Bilmediğiniz komutları üstteki arama bölümüne yazarak sitede bulabilirsiniz.

Projemizin tam kodu aşağıdaki gibidir.
clc;
clear all;
imageorj=imread('C:\para.jpg'); %Resmimizi okuyoruz.
figure(1),imshow(imageorj);

image=rgb2gray(imageorj); %Resmimizi gri tona çeviriyoruz. (2-Boyut)
level=graythresh(image);
bw=im2bw(image,level);
figure(2),imshow(bw);

bw=imcomplement(bw); %Resmi negatiflik ekliyoruz.
figure(3),imshow(bw)
bw=imfill(bw,'holes');%Resimde çukur diye nitelendirilen yerleri dolduruyoruz.
bw = bwareaopen(bw,30);%30px den daha az sayıda olan nesneler kaldırılıyor.
figure(4),imshow(bw);

se=strel('disk',11); %Yarıçapı 11px olan disk biçiminde yapısal element oluşturuyoruz.
bw2=imerode(bw,se); %Birlesik madeni paralarin ayrilmasi saglaniyor.
figure(5),imshow(bw2);

[B,L] = bwboundaries(bw2); % length(B) ile para adetini ogrendik ve etiket atadik
stats = regionprops(bw2, 'Area','Centroid');
figure(6),imshow(imageorj);
toplam = 0;
for n=1:length(B)
a=stats(n).Area; % Her paranın alanını öğrendik. Boyutlara göre hesaplama yaptık.
centroid=stats(n).Centroid;
if a> 1200
toplam = toplam + 1;
text(centroid(1),centroid(2),'1TL');
elseif a >800 && a < 1050
toplam = toplam + 0.5;
text(centroid(1),centroid(2),'50Kr');
elseif a >500 && a < 650
toplam = toplam + 0.25;
text(centroid(1),centroid(2),'25Kr');
elseif a > 360 && a < 380
toplam = toplam + 0.10;
text(centroid(1),centroid(2),'10Kr');
else
toplam = toplam + 0.05;
text(centroid(1),centroid(2),'5Kr');
end
end

title(['Toplam para miktari = ',num2str(toplam),' TL'])
Loading...
Ad

Arduino Autocad Bilim-Teknoloji Biyomedikal Sistemler C-Programlama C# C# Programlama Diferansiyel Denklemler Dijital Kontrol Sistemleri Elektrik Devreleri 1 Elektrik Devreleri 2 Elektrik Makineleri 1 Elektrik Makineleri 2 Elektrik Tesislerinde Koruma Elektromantetik Alan Teorisi Elektromantetik Dalga Teorisi Elektronik 1 Elektronik 2 Elektronik-Devreler EmguCV Genel Fizik Genel Kimya Genel Matematik Gömülü Linux Güç Elektroniği Haberleşme Sistemleri İşaret ve Sistemler Lineer-Cebir Lojik Devreler Malzeme Bilimi MATLAB Mikroişlemciler Olasılık ve İstatistik Otomatik Kontrol Sistemleri PLC-Otomasyon Proje Yönetimi ve Girişimcilik Raspberry Pi Sayısal Analiz Sayısal İşaret İşleme Teknik-Kutuphane Termodinamik Yüksek Gerilim Tekniği
false
ltr
item
Çağlar GÜL: MATLAB ile Bozuk Para Sayma Algoritması
MATLAB ile Bozuk Para Sayma Algoritması
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMXnIk6JA0ykifij4o39leNuj26gPFSzaxvcKwq764RbAWRcuwoeThIBLcjn_yB7bqPXOCwQLPINQzVJJD4plgE0WlgQlyO105zkt4gClaVVPrZf6m_NwM_CVs2neUXqxkGwP24pSdapQ/s1600/resim1.PNG
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMXnIk6JA0ykifij4o39leNuj26gPFSzaxvcKwq764RbAWRcuwoeThIBLcjn_yB7bqPXOCwQLPINQzVJJD4plgE0WlgQlyO105zkt4gClaVVPrZf6m_NwM_CVs2neUXqxkGwP24pSdapQ/s72-c/resim1.PNG
Çağlar GÜL
http://elektronikafa.blogspot.com/2015/09/matlab-ile-bozuk-para-sayma-algoritmas.html
http://elektronikafa.blogspot.com/
http://elektronikafa.blogspot.com/
http://elektronikafa.blogspot.com/2015/09/matlab-ile-bozuk-para-sayma-algoritmas.html
true
871250089272898028
UTF-8
Not found any posts Not found any related posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU Tag ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Contents See also related Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS CONTENT IS PREMIUM Please share to unlock Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy