Yüzey tespiti


9

Bir görüntüden geniş bir alan griyi (beyazdan siyaha) nasıl segmentlere ayırır? (Bunu opencv'de biliyorsanız, opencv'de ne yapacağınızı söyleyerek cevap verebilirsiniz). Örneğin bu resim verildi:

resim açıklamasını buraya girin

Bunun geniş bir gri alan olduğunu ve diğerlerinden açıkça ayırt edilebilir olduğunu görüyorsunuz. Bu alanın herhangi bir gri tonu varsa ve gerçek zamanlı çalışması gerekiyorsa bunu nasıl segmentlere ayırabilirsiniz .

Şimdiden teşekkürler.


Açıkça ayırt edilebilir birkaç gri alan görüyorum. İstediğiniz sonucu gösterebilir misiniz?
Dr. belisarius

istediğim sonuç, sağ üst ve sol köşelerin koordinatları ve orta gri dikdörtgenin sol alt köşesinin koordinatı
Olivier_s_j

Bize çevre ve işlemeniz gereken görüntülerdeki potansiyel fark hakkında başka bir şey söyleyebilir misiniz? Hedef her zaman görüntünün ortasına yakın mı olacak? Muhtemelen aynı boyutta başka gri dikdörtgenler olacak mı? Ya aynı gri tonu olarak görünürlerse? Onu tanımlamak için kullanabileceğimiz başka şeyler var mı? Her zaman üstte küçük "T" şekli olacak mı?
justis

Merhaba, Hedef her zaman görüntünün ortasına yakın olmayacak. Hedef her zaman bir çeşit dikdörtgen olacaktır. (Sadece bir duvar da olabilir). Birden çok dikdörtgen varsa, bunlar da algılanmalıdır, ancak bunlar büyük olmalıdır. Küçük alanlar atılabilir. Hepsi aynı tür gri olarak ortaya çıkarsa, hepsi tespit edilmelidir, ancak bunun gerçekleşme şansı çok azdır. Tespit edilebilen tek gerçek özellik, bir yüzeyin tüm yüzey üzerinde aynı griye (az ya da çok) sahip olması ve bir dikdörtgen olmasıdır. Her seferinde küçük bir T şekli olmayacak
Olivier_s_j

Yanıtlar:


9

Havza Algoritması veya grafik kesimlerini kullanarak gri alanın makul bir segmentasyonunu elde edersiniz . Havza opencv'de mevcuttur, ancak grafik kesimleri henüz yoktur. (BTW Bu Kinect'ten bir derinlik haritası mı?)


1
Opencv'deki havza işlevi, girdi olarak 8 bit 3 kanallı bir görüntüye ihtiyaç duyuyordu. Derinlik haritam 8 bitlik bir resim. bunu nasıl çözeceğimize dair bir fikri olan?
Olivier_s_j

/ * görüntü özelliklerini al / width = src-> width; yükseklik = src-> yükseklik; / gri tonlamalı sürüm için yeni görüntü oluştur * / IplImage * dst = cvCreateImage (cvSize (genişlik, yükseklik), IPL_DEPTH_8U, 1); cvCvtColor (src, dst, CV_RGB2GRAY);
nav

Başka bir soru, sadece başka bir görüntüde (sadece opencv bir örnek) çalışma havza fonksiyon var. Ancak renkli bir görüntü ve ikili bir görüntü ile başlarlar. Sadece 1 resmim var ... grascale resmim. Maskenin ne olması gerektiği hakkında bir fikir (ikinci giriş değişkeni)?
Olivier_s_j

4

Mathematica'da şöyle bir şey yapabilirsiniz:

Colorize[MorphologicalComponents[
  ColorNegate@
   Erosion[Dilation[
     DeleteSmallComponents[
      Erosion[Binarize[
        GradientFilter[
         ColorConvert[Import@"http://i.stack.imgur.com/XdnaW.png", 
          "RGB"], 2], .015], 1], 100], 2], 2]], 
 ColorFunction -> "ThermometerColors"]

resim açıklamasını buraya girin

Muhtemelen bu kodu herhangi bir görüntü işleme kütüphanesine çevirebilirsiniz.


Merhaba, güzel görünüyor. Ama benim matematikselim yok. Ama sanırım bu resmin gri tonlamasına göre eşik kullandınız mı? Belki kodunuzla ilgili biraz bilgi verebilir misiniz? Thx
Olivier_s_j

1
@Ojt Her komut için bir açıklama için " reference.wolfram.com/mathematica/ref/xxx.html " bölümünü okuyabilirsiniz . Örneğin reference.wolfram.com/mathematica/ref/…
Dr. belisarius

Tamam önerdiğin gibi yaptım. Ancak Binarize'i belirli bir değerle eşiklemek için kullandığınız anlaşılıyor. Benim durumumda bu mümkün değil. Geniş alanlar farklı gri tonlarına sahip olabileceğinden. (Örneğin orta yüzey çok açık gri olabilir). Ve sonra eşik işe yaramaz.
Olivier_s_j
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.