Siyah-Beyaz Resim üzerindeki Nesneleri Bulma (MATLAB) – Mobile Application Developer

Siyah-Beyaz Resim üzerindeki Nesneleri Bulma (MATLAB)

Projenin Kodları

Siyah veya beyaz arkaplan renk üzerinde bulanan nesneleri bulan matlab programlama dili için kodlanmış algoritmanın genel mantığı şöyledir. Elimizdeki görüntüde siyah arkaplan ve beyaz nesnelerden oluşuyor veya tam tersi durumda bulunuyor olsun. Önce görüntü alınacak, adres olarak çalıştığım dizinde olduğundan direkt dosyanın adını yazdım. Resim matlab çalışma klasörü dışında ise tam adres yazılmalıdır.

[matlab]
resimOrjinal = imread(‘1.jpg’);
[/matlab]

Görüntü renkli bile olsa siyah beyaz resme dönüştürülecek. ikinci parametre ile verilen değere kadar ki kısımlar beyaz geriye kalan kısım siyah olarak dönüştürülecek. Bu kadar yüksek verilmesinin nedeni incelenecek olan görüntün siyah ve beyaz renkler içerecek olmasıdır.

[matlab]
resimSiyah = im2bw(resimOrjinal,0.9);
[/matlab]

Eşik değer sayesinde görüntü siyah zemin üzerine beyaz nesne, beyaz zemin üzerine siyah nesne olduğunu anlayamamızı sağlıyor.

[matlab]
esikdeger = graythresh(resimOrjinal);
[/matlab]

Burada amaç arkaplan ve nesne rengini her durumda uygun şekle çevirmek. Dönüş değeri round fonksiyonu ile 0 veya 1 e yakınlığına göre alınır. Eğer dönüş değeri 1 ise yani beyaz renk yoğunluktaysa o zaman renkleri değiştirerek siyah arkaplan beyaz nesneler haline döner. Dönüş değeri 0 ise  o zaman renkler olduğu gibi kalıcak. Yani zaten arkaplan siyah ve nesneler beyaz rengine sahip olduğu anlaşılır.

[matlab]
if 1==round(esikdeger)
resimSiyah=~(resimSiyah);
end
[/matlab]

Görüntü başlangıçta ne olursa olsun siyah renkli zemin üzerine beyaz renkli nesne şeklinde dönüştürüldü. Eğer varsa nesneye ait olmayan küçük pikseller (25 piksel) onları görmezden gelicek. Özellikle paintle hazırladığım bazı resimlerde bu sorun ortaya çıktığı için aşağıdaki kodu yazdım.

[matlab]
resimSiyah = bwareaopen(resimSiyah,25);
[/matlab]

Sınırları bulmak için tüm nesneler Nesneler değişkenine atanıyor. Kaç nesne varsa nesnesayısı*1 lik array oluşur. Burada her elemanda o nesnenin tüm piksel bilgileri tutulur. Örneğin resimdeki üçgen nesnesinin çevresindeki tüm pikseller Nesneler değişkenin bir değerine atanır. Diğer tüm nesnelerde böyle yapılır.

[matlab]
[Nesneler,Label] = bwboundaries(resimSiyah,’noholes’);
[/matlab]

Bulunan nesneler bastırılır. L label, köşeli parantez içindeki değerler nesnelerin dışındaki alanı yani arkaplanı renklendirme için aşağıdaki kodu yazmalıyız.

[matlab]
imshow(label2rgb(Label, @jet, [.3 .3 .3]))
[/matlab]

Bütün nesnelerin etrafı 1 piksellik şerit ile çevreleniyor. Böylece artık resimdeki nesneler belirlenmiş oldu.

[matlab]
hold on
for i = 1:length(Nesneler)
sinirlar = Nesneler{i};
plot(sinirlar(:,2), sinirlar(:,1), ‘w’, ‘LineWidth’, 1)
end
fprintf(‘Nesneler işaretlenmiştir. Toplam Nesne Sayısı=%d\n’,i)
[/matlab]

Algoritmanın Uygulanması

1.Beyaz resim üzerine renkli veya siyah objeler

Algoritma uygulandıktan sonraki şekil

Uygulamanın Çıktısı

2.Siyah zemin üzerine beyaz objeler

Algoritma uygulandıktan sonraki şekil

Uygulamanın Çıktısı

Bulent SIYAH | 18 Şubat 2012