MATLAB'da görüntü kenarlığı ile kesişen nesne sayısını sayma


9

Çeşitli işaretlere sahip bir RGB resmim var. Ana amacım görüntü sınırları ile temas halinde olan işaretleri saymak.

Yaklaşım ve problem

Görüntüyü yükleyerek başladım [Şek. 1], sonra gri tonlamaya dönüştürdü ve biraz gürültüden kurtulmak için bir medyan filtre uyguladı [Şek. 2]. Sonra 0,2 eşiği ile ikilileştirdim, bu da Şekil 3 ile sonuçlandı. Şu anda ikilileştirilmiş görüntümü aldım, ancak sorun aynı işarete ait bazı parçaların tek bir yerine çeşitli bölgelerde görünmesidir. Şimdi amacım aynı nesneye ait bölgeleri birleştirmek, böylece bwlabelgörüntüde kaç işaret olduğunu saymak imclearborderve sınırdakilerden kurtulmak için kullanabilir ve bwlabelaradaki farkı elde etmek için tekrar kullanabilirim iki.

Benim yaklaşımım kullanmaktı bwmorph, Dilateonları doldurmaya çalışın nesneleri dilate ve imfill, holes. Ancak sorun şu ki, eğer onları az miktarda genişletirsem [Şek. 4], imfillonları doldurmuyor gibi görünüyor, eğer onları büyük miktarda genişletirsem [Şekil 5] tüm nesneler birleşmeye başlar :(

kod

img=im2double(imread('image.png')); figure, imshow(img) 
img_gray=rgb2gray(img); imshow(img_gray);                                 
img_mediana=medfilt2(img_gray, [3 3]); figure, imshow(img_mediana);       
img_bin=im2bw(img_mediana, 0.2); imshow(img_bin)
img_dilate=bwmorph(img_bin, 'Dilate', 10); imshow(img_dilate)
img_fill=imfill(img_dilate, 'Holes'); figure, imshow(img_fill)

Rakamlar

Şekil 1 :

Şekil 1 http://dl.dropbox.com/u/5272012/1.png

Şekil 2 :

şekil 2 http://dl.dropbox.com/u/5272012/2.png

Şekil 3 :

şekil 3 http://dl.dropbox.com/u/5272012/3.png

Şekil 4 :

şekil 4 http://dl.dropbox.com/u/5272012/4.png

Şekil 5 :

şekil 5 http://dl.dropbox.com/u/5272012/5.png


Benim sorum tam olarak bu işaretin bozulduğunu söyleyen şey nedir? Çıktıyı gerçekten nasıl koymak istersiniz? Yani - sadece kesilen tüm işaretleri Renklendirmek istiyor musunuz? ya da gerçekten her bir işareti listelemek ve kesme / dolu olarak sınıflandırmak istiyor musunuz?
Dipan Mehta

Yanıtlar:


3

Bence dilatasyon erozyonu çok temel araçlardır. Bu tür kararlar vermek için çok güçlü bir bilgi tabanınız ve oldukça iyi bir giriş imajınız var.

İşte benim görüşüm:

  1. Şekil 1'den 3'e kadar gösterdiğiniz makul bir başarı göz önüne alındığında, bireysel işaretleri tanımlayabilir ve segmentlere ayırabilirsiniz.

  2. Önceden işaretler bildiğinizi varsayarsak, desen eşleştirme yapmak için iyi bir hızlı algoritmalar uygulayabilirsiniz. Kesin desenlerin bilinmemesi durumunda, sadece desenin dış şeklini tanımlayabilirsiniz.

  3. Sınıflandırmaya dayanarak, her bir eşleşen desenin centroidini ve ilgili genişliği ve yüksekliğini her zaman tanımlayabilirsiniz. Centroid X, Y pozisyonu sınıra çok yakınsa - yanicentrÖbend(x)<0 veya centrÖbend(x)>benmbirgewbendth-shbirpewbendth kenar dışında, benzer şekilde Y ekseni için de başvurabilirsiniz.

  4. Sadece kenarda ne olduğu konusunda endişelendiğiniz göz önüne alındığında - sadece her kenarla başlamalı ve orada desen eşleştirmeye başlamalısınız. Kısmi desen / şekli eşleştirmeye başlayın ve kısmi desen / şekil nesnenin kenarda kesildiği IS ile eşleşiyorsa .

Sorunu iyi bir şekilde formüle etmenize yardımcı olabilecek bazı referanslar.

Bu makale, uğraştığınız İşaretler / jetonlarla ilgili birçok temel bilgiyi anlamak için çok iyidir.

Anil K. Jain ve Aditya Vailaya Şekil Tabanlı Erişim: Ticari Marka Görüntü Veritabanlarıyla Bir Vaka Çalışması Örüntü tanıma 1998, cilt. 31, no9, sayfa 1369-1390

Kısmi veya tıkalı şekil / desen eşleşmesi ile ilgilenen birçok araştırma öğesi vardır.

Eli Saber, Yaowu Xu, A. Murat Tekalp Kısmi eşleşen güdümlü resim etiketlemesi için alt matris eşleşmesi ile kısmi şekil tanıma Örüntü Tanıma 38 (2005) 1560-1573

Bu yaklaşımı kullanırsanız, bu yanıtı daha spesifik sorgular için genişletir.


Hey! Desen eşleştirmeyi kullanamıyorum çünkü bu çok uzun zaman alacak ve çok fazla hesaplama çalışması alacak. Ayrıca nesnelerin ölçeği (işaretler) değişken olabilir (profesör bize işaretlerin ölçeğinin +% 30'dan% -30'a kadar olabileceği rastgele görüntüler verir, bu yüzden bir desen eşleşmesi işe yaramaz. . bu olayı çözmek için sipariş
Rui Trovisco

@RuiTrovisco Bunu anlıyorum. Bu yüzden yazdım - geri bildiriminize dayanarak cevabı geliştirirdim. Sorunuzla ilgili bazı yorumlar yazdım. Lütfen oraya geri dönün.
Dipan Mehta

1

İşte aradığınız şeyin tam tersini gösteren küçük bir ilham kaynağı.

Şek3 ile başlayın.

% Find background
labels = bwlabel(~fig3);
[n,idx] = hist(labels(:),0:max(labels(:)));
[bgrSize bgrLableIdx] = max(n);
bgr = (labels == idx(bgrLableIdx));
bgr = imopen(bgr,strel('disk',3));

% Remove border objects and cleanup
borderCleared = imclearborder(~bgr);
borderCleared = imopen(borderCleared,strel('disk',3));

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.