Kontür eşleme - konturların yer değiştirmesini bulma


17

Aynı nesneye sahip iki görüntü üzerinde konturlar buldum ve bu nesnenin yer değiştirmesini ve dönüşünü bulmak istiyorum. Bu konturların döndürülmüş sınırlayıcı kutuları ve daha sonra açıları ve merkez noktaları ile denedim, ancak sınırlayıcı kutuların dönüşleri kontur dönüşünü doğru bir şekilde anlatmıyor çünkü a + 0, a + 90, a + 180 vb. Açıları için aynı. derece. Konturların dönmesini ve yer değiştirmesini bulmanın başka iyi bir yolu var mı? Belki dışbükey gövde, dışbükeylik kusurlarının kullanımı? Eşleşen konturlar hakkında OpenCv Öğrenme'yi okudum ama yardımcı olmadı. Birisi örnek verebilir mi?

Örnekler:

1 2 3 4

Örneğin pembe kareyi ve ikinci durumda kalemi tespit etmek istiyorum. Diğer örnekler bazı delikler, yıldızlar vb. İle kareler olabilir. Dediğim gibi bazı tek şey yapmak istiyorum. Herhangi bir öneri takdir çünkü mümkün olduğunca çok yöntem test etmek istiyorum.


Resim burada yardımcı olur
mirror2image

Evrensel bir işlev yapmak istiyorum. Test resmi herhangi bir şey olabilir. Dikdörtgen olarak basit şekilli eleman veya biraz daha karmaşık şekilli.
krzych

2
Her duruma tek bir yöntem sığdıramazsınız. Pratik yöntem kontrast aralığına, gürültü tahminine, arka plana ve şekle bağlıdır - pürüzsüzlük, topoloji vb.
mirror2image

Yanıtlar:


4

Kontürler arasındaki ölçek farkı konusunda endişelenmeniz mi gerekiyor? Değilse, her bir konturun sentroidini bulabilir ve birini diğerinden çıkararak yer değiştirmeyi hesaplayabilirsiniz. Ardından konturların ana eksenlerini hesaplayabilir ve aralarındaki dönüş açısını bulabilirsiniz.

Ölçeklendirme söz konusuysa, karşılık gelen ana eksenlerin oranını alarak ölçek faktörünü hesaplayabilirsiniz.


Evet ölçeği de farklı olabilir. Ben de opencv freeman zincirleri benzer bir şey düşündüm her kontur freeman zincirleri yapmak ve sonra onları karşılaştırmak ve bir şekilde çeviri bulmaya çalışıyorum, ama bunun için iyi bir algoritma anlayamıyorum.
krzych

Minimum döndürülmüş sınırlama kutusu oluşturmak ve dönüşünü ve yer değiştirmesini almakla aynıdır. Bu yaklaşımı denedim ve sonuçlar tatmin edici değil. Bu yüzden bu yöntemin hiç de iyi olmadığını düşünüyorum.
krzych

Bunun neden işe yaramadığına daha açık olabilir misiniz? Konturlar yalnızca çeviri, döndürme ve ölçekleme ile mi ilgili, yoksa başka şekillerde deforme olabilir mi? Bazı resimler gerçekten yardımcı olur. Afin olmayan dönüşümleri veya rastgele gürültüyü işlemeniz gerekiyorsa, şekil içeriğini deneyebilirsiniz. Sizi bilgilendirin, sizi bazı makalelere yönlendirebilirim.
Dima

Sadece çeviri, döndürme ve ölçekleme ile ilişkilidir, deformasyonlar farklı fotoğraflarda çok az farklı kontur algılamaya bağlıdır. Bağlam şekli? Bunu genişletebilir misiniz?
krzych

1
@kzych Görünüşe göre buradaki en büyük problem kenar algılamasında gürültü olabilir. Minimum döndürülmüş kutuyu nasıl buluyorsunuz? Bunun neden işe yaramadığından hala emin değilim. Şekil bağlamı, bir konturu temsil etmenin bir yoludur. Ayrıntılar burada: en.wikipedia.org/wiki/Shape_context
Dima

2

Ölçek veya yansıtmalı çarpıklıklar hakkında endişelenmenize gerek yoksa, zincir kodları burada yardımcı olabilir. Aynı ölçekte yaklaşık aynı şekle sahip zincir kodlarınız varsa, tek boyutlu FFT faz korelasyonu ile çeviri bulabilirsiniz http://en.wikipedia.org/wiki/Phase_correlation

Yansıtıcı çarpıklığı hesaba katmanız gerekiyorsa, konturlar yerine özellik noktaları (köşeler gibi) kullanma olasılığını da düşünebilirsiniz.


İyi zincir kodunun nasıl oluşturulacağı konusunda herhangi bir tavsiye var mı? Mayby OpenCv bir şey (bildiğim kadarıyla sadece freeman zincirleri vardır)? Şimdilik, her kontur noktasını kullanarak zincir kodları oluşturuyorum ve komşu noktaların x eksenine açı hesaplıyorum, ama belki daha iyi bir fikir var mı? Zincirlerle ilgili iyi bir makaleye referansınız varsa, takdir edilecektir.
krzych

2

Söylediğin soruda

Söylediğim gibi bazı tek şey yapmak istiyorum

ancak korkarım, soruna "evrensel" bir çözüm bulmak oldukça zor.

Ticari olarak mevcut bir desen bulma yazılımı satın alabilir ve uygulamanıza entegre edebilirsiniz, genellikle çok çeşitli uygulamalar için oldukça iyi performans gösterirler. Sadece size bir fikir vermek için bu tür bir ürünün referans kılavuzu http://www.lmi3d.com/sites/default/files/support/4.2.0.70-hexsight_user_guide.pdf

Ayrıca, belirli bir vaka için (örneğin resminizdeki kalem için) geçici bir çözüm geliştirebilirsiniz.

Aksi takdirde, hesaplama geometrisine dayanan çok temel temellerden başlayarak sorunu çok çalışabilirsiniz ( http://www.cs.sunysb.edu/~algorith/files/shape-slikeity.shtml , "kontürlerinizin" çağrıldığı ) "çokgen", aşağıdakileri okumak gibi:

M. de Berg, O. Devillers, M. Kreveld, O. Schwarzkopf ve M. Teillaud. Çeviriler altında iki dışbükey poligonun üst üste binmesinin hesaplanması. Teorik Bilgisayar Bilimi, 31: 613–628, 1998.

ve

H. Ahn, O. Cheong, C. Park, C. Shin ve A. Vigneron. Rijit hareketler altında iki düzlemsel dışbükey kümenin örtüşmesini en üst düzeye çıkarmak.Hesaplamalı Geometri: Teori ve Uygulamalar, 37: 3-15, 2007.

ve nesne tanıma yazılım araçları satan bir başka yazılım evi olan MVTec ile işbirliği yapan Markus Ulrich tarafından "Görüntülerde Bileşik Nesnelerin Hiyerarşik Gerçek Zamanlı Tanınması" ile bitiyor .

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.