burada yansıtı işaretler yakalayıp bunların üçgen, kare, yuvarlak olarak sınıflandıracağız.
RGB = imread('resmin_adi.jpg'); % resim sayısal olarak yüklendi I = rgb2gray(RGB); % resim tek renk olan gri tona indirgendi. esik_degeri = graythresh(I); % resmin eşik değeri belirlendi. % resmin eşik değerine göre bir ve sıfırdan oluşan siyah beyaz formata çevrildi. bw = im2bw(I,esik_degeri);
bw = bwareaopen(bw, silenecek_piksel_degeri)
siyah beyaz bwboundaries uygulanmadan önceki resim
[B,L,N,A] = bwboundaries(bw); kodu uygulandıktan sonra
[B,L,N,A] = bwboundaries(bw,'noholes'); kodu uygulandıktan sonra
% resmi göster ve sabitle. figure, imshow(bw); hold on; % renklerin ingilizce olarak ilk harflerini kullan. renkler=['b' 'g' 'r' 'c' 'm' 'y']; % nesne sayısı kadar döngü gerçekleştir ve k birer birer artır. for k=1:length(B) nesne = B{k}; % nesneleri teker teker ata. % modüler aritmetik kullanarak renkler kümesinden sırayla renk oluştur. renk = mod(k,length(renkler))+1; plot(nesne(:,2), nesne(:,1),... % nesnelerin etrafını çiz. % belirtilen renkte ve 2 birim kalınlıkta çizgi ile çiz. renkler(renk),'LineWidth',2); % yuvarlak cisimlerin merkezini işaretliyoruz. plot(nesne_verileri(k).Centroid(1), nesne_verileri(k).Centroid(2),'b+'); % rastgele bir satır oluştur nesne üzerindeki sayılar birbirine fazla girmesin rastgele_satir = ceil(length(nesne)/(mod(rand*k,7)+1)); sutun = nesne(rastgele_satir,2); satir = nesne(rastgele_satir,1); % çizilecek cismin sayısı, sütun ve satır sayısı ayarlanıyor. h = text(sutun+1, satir-1, num2str(L(satir,sutun))); set(h,'Color',renkler(renk),... % belirtilen ayarla yazı yazılıyor resmin üzerine 'FontSize',14,'FontWeight','bold'); end
imshow(label2rgb(L, @jet, [.5 .5 .5]));
[B,L,N,A] = bwboundaries(bw); kodu sonrasındaki ' L '
[B,L,N,A] = bwboundaries(bw,'noholes'); kodu sonrasındaki ' L '
function yuvarlak_bulma() RGB = imread('nesneler.jpg'); % resim sayısal olarak yüklendi I = rgb2gray(RGB); % resim tek renk olan gri tona indirgendi. esik_degeri = graythresh(I); % resmin eşik değeri belirlendi. % resmin eşik değerine göre bir ve sıfırdan oluşan siyah beyaz formata çevrildi. bw = im2bw(I,esik_degeri); bw = bwareaopen(bw, 50); % nesnelerin elemanları arasındaki boşlukları birleştirecek birlestirici = strel('square',3); bw = imdilate(bw,birlestirici); [B,L] = bwboundaries(bw,'noholes'); % nesneleri buluyoruz. % nesnelerin alan, merkez ve çevre hesaplanması. nesne_verileri = regionprops(L, 'Area', 'Centroid', 'Perimeter'); yaricap_dusuk = 0.95; yaricap_yuksek = 1.2; imshow(label2rgb(L, @jet, [.5 .5 .5])); hold on; % resmi göster ve sabitle. % renklerin ingilizce olarak ilk harflerini kullan. renkler=['b' 'g' 'r' 'c' 'm' 'y']; yuvarlak_nesne_sayisi = 0; % nesne sayısı kadar döngü gerçekleştir ve k birer birer artır. for k=1:length(B) % ‘k’ etiketindeki nesnenin cevresi cevre = nesne_verileri(k).Perimeter; % ‘k’ etiketindeki nesnenin alanı alan = nesne_verileri(k).Area; % yuvarlaklık oranını hesapla yaricap = 4*pi*alan / cevre^2; if (yaricap >= yaricap_dusuk) && (yaricap <= yaricap_yuksek) yuvarlak_nesne_sayisi = yuvarlak_nesne_sayisi+1; nesne = B{k}; % nesneleri teker teker ata. % modüler aritmetik kullanarak renkler kümesinden sırayla renk oluştur. renk = mod(k,length(renkler))+1; plot(nesne(:,2), nesne(:,1),... % nesnelerin etrafını çiz. renkler(renk),'LineWidth',2); % belirtilen renkte ve 2 birim kalınlıkta çizgi ile çiz. plot(nesne_verileri(k).Centroid(1), nesne_verileri(k).Centroid(2),'b+'); % yuvarlak cisimlerin merkezini işaretliyoruz % rastgele bir satır oluştur nesne üzerindeki sayılar birbirine fazla girmesin. rastgele_satir = ceil(length(nesne)/(mod(rand*k,7)+1)); sutun = nesne(rastgele_satir,2); satir = nesne(rastgele_satir,1); h = text(sutun+1, satir-1, num2str(yuvarlak_nesne_sayisi)); % çizilecek cismin sayısı, sütun ve satır sayısı ayarlanıyor. set(h,'Color',renkler(renk),... 'FontSize',14,'FontWeight','bold'); % belirtilen ayarla yazı yazılıyor resmin üzerine end end end