Image Processing, Coin Area Project

Kategori: MATLAB , 10 Ağustos 2019 , JanFranco


MATLAB ortamında Image Processing yani görüntü işleme tekniklerine devam ediyoruz. Bu yazımda 10 madeni paranın bulunduğu bir resimde, madeni paraları tespit edip alanlarını bulacağız. Resmi alalım, binary resme çevirelim, imfill() fonksiyonu ile oluşan boşlukları kapatalım:


image = imread('coins.png');
figure,imshow(image);
bwCoins = imbinarize(image);
figure,imshow(bwCoins);
clearBwCoins = imfill(bwCoins, 'holes');
figure,imshow(clearBwCoins);

coin project

coin project

coin project
Bir önceki yazıda açıklamıştım fakat tekrar anlatayım, imbinarize() fonksiyonu default olarak Otsu's Threshold tekniğine göre bir threshold değeri belirler. Bu değer resmin histogramındaki ortalama değere göre bulunur. Bu değerin üstünde kalan pikseller 1, altında kalan pikseller 0 olarak güncellenir. 2. resimde görüyoruz ki çemberlerin içlerinde boşluklar mevcut. Bunu da imfill() fonksiyonu kapattık. Şimdi bwboundaries() fonksiyonu ile çemberlerin sınırlarını bulalım:


boundaries = bwboundaries(clear_bwCoins);
figure,imshow(image);
text(10, 10, ['Bulunan Nesne Sayısı: ', num2str(length(boundaries))], 'color', 'r');
Burada bir figür oluşturduk. text() fonksiyonu ile (10, 10) koordinatından başlayarak bulunan nesne sayısını yazdırdık. Nesne sayısını boundaries değişkenindeki matris sayısını alarak bulduk. Objelerin etrafını çizelim:


hold on
for i=1:length(boundaries)
       boundary = boundaries{i};
       plot(boundary(:,2), boundary(:,1), 'b', 'LineWidth', 2);
end
Objelerin etrafını çizdik. text() fonksiyonu ile aynı figüre yazı yazmıştık. Aynı figürde hold on komutu ile çizimleri yaptık. Şimdi bwlabel() fonksiyonu ile objeleri etiketleyelim ve regionprops() fonksiyonu ile önemli bilgileri alalım:


[boundaries, numOfElements] = bwlabel(clear_bwCoins);
properties = regionprops(boundaries, 'Area', 'Centroid');
Burada objelerin area ve centroid bilgilerini aldık. Yani alan ve ağırlık merkezi bilgileri. Şimdi alanı 2000 birimden küçük olan objeleri 5C büyük olanları 10C olarak sınıflandıralım:


for i=1:numOfElements
    center = properties(i).Centroid;
    x = center(1);
    y = center(2);
    
    if properties(i).Area < 2000
        text(x-10, y, '5C');
    else
        text(x-10, y, '10C');
    end
end

hold off

coin project


Sonraki Yazı: Image Processing, Plane Project
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın