Bir nesnenin rengini belirlemenin en doğru yolu nedir?


33

Bilgisayar vizyonu için bazı standart teknikleri (Gauss Bulanıklığı, eşikleme, Hough-Transform vb.) Kullanarak statik bir görüntüdeki (.jpeg, .png vb.) Madeni paraları algılayan bir bilgisayar programı yazdım. Belirli bir görüntüden toplanan sikkelerin oranlarını kullanarak, hangi sikkelerin hangisi olduğuna kesin olarak karar verebilirim. Bununla birlikte, güven düzeylerime eklemek ve ayrıca A tipi (yarıçap oranlarından) olduğunu düşündüğüm bir madalyonun da doğru renkte olup olmadığını belirlemek istiyorum. Sorun İngiliz paraları ve ark. (bakır, gümüş, altın), ilgili renkler (özellikle bakır ila altın) benzerdir.

Verilen bir madalyonun ortalama rengini RedGreenBlue (RGB) 'renk-alanı' ve bu rengi HueSaturationBrightness (HSB veya HSV) 'renk-alanına' dönüştüren rutinleri çıkaran bir rutine sahibim.

RGB, üç jeton rengi arasında ayrım yapmaya çalışmakla çalışmak için pek hoş değildir (örneğin ekteki [temel] resme bakın). Farklı madeni para türlerinin renkleri için aşağıdaki aralıklar ve tipik değerler var:

Not: Buradaki tipik değer, gerçek bir görüntünün “piksel biçiminde” ortalaması kullanılarak seçilmiştir.

**Copper RGB/HSB:** typicalRGB = (153, 117, 89)/(26, 0.42, 0.60).

**Silver RGB/HSB:** typicalRGB = (174, 176, 180)/(220, 0.03, 0.71).

**Gold RGB/HSB:** typicalRGB = (220, 205, 160)/(45, 0.27, 0.86) 

İlk önce belirli bir bozuk para rengi (RGB kullanarak) ve yukarıda verilen her bir bozuk para türü için tipik değerler arasındaki 'Öklid mesafesini' RGB değerlerini bir vektör olarak ele almaya çalıştım; bakır için biz olurdu:

Dcopper=((RtypeRcopper)2+(GtypeGcopper)2+(BtypeBcopper)2)

farkın en küçük değeri ( ) bize verilen madalyonun hangi tip olması gerektiğini söyler. Bu yöntem kendini çok yanlış olduğunu göstermiştir.D

Ayrıca sadece madeni paraların tonunu yukarıda verilen tiplerin tipik değerleriyle karşılaştırmayı da denedim. Her ne kadar teorik olarak bu, görüntülerin değişen parlaklık ve doygunluk seviyelerinin üstesinden gelmek için daha iyi bir 'renk alanı' sağlasa da, yeterince doğru değildi.

Soru: Renge dayalı bir madeni para türü belirlemek için en iyi yöntem nedir (statik bir görüntüden)?

Zaman ayırdığınız için çok teşekkürler.

Tipik Para Renkleri

Düzenle 1

Not: Aşağıda tartışılan tüm fikirleri denedim ve hiçbir şeyin yanında elde ettim. Aydınlatma koşullarındaki farklılık (aynı görüntü içerisinde bile) bu sorunu çok zorlaştırır ve dikkate alınmalıdır.

Düzenleme 2 (Sonucu Summery)

Cevaplarınız için teşekkür ederim. Kendi araştırmalarım (cevaplarınız ve yorumlarınız dahil), bu sorunun genel olarak keyfi aydınlatma, keyfi kamera (mobil cihaz), bozuk para rengindeki dalgalanma durumlarında (aynı tür / tür için bile) ele alınması gerektiğini vurguladı. İlk önce cilt renginin tanınmasına (çok aktif bir araştırma alanı) bir başlangıç ​​noktası olarak baktım ve sadece Kafkasyalılar için ten renginin tanınmasında bile sayısız sorun var ( şu andaki teknikleri gözden geçirmek için bu makaleye bakınız ), ve bu problemin, hepsi sürekli ve değişken kromatik özelliklere sahip olabilen üç ayrı renk nesnesi içermesi, bu bilgisayar vizyonu konusunu, buna göre sınıflandırmak ve uğraşmak için çok zor bir konu haline getirmektedir. !).

Ben çok yararlı dan Gamı Kısıtlama Yöntemi içine baktım yazı aşağıda DW tarafından. Bu, ilk bakışta görüntü ve ayrı madeni para objelerini aydınlatma koşullarından bağımsız renklere dönüştürmek için ön işleme adımı olarak ümit vericiydi. Bununla birlikte, bu teknik bile mükemmel şekilde çalışmaz (ve eşleşmek istemiyorum - eşlemeler için bir resim / histogram kitaplığı içerir) ve daha karmaşık Sinir Ağı Mimarisi metodolojileri de yoktur. Aslında bu yazıda özet olarak şöyle:

"current machine colour constancy algorithms are not good enough for colour-based 
 object recognition.".

Bu, bu konuda daha fazla güncel makale bulunmadığını söylemek değildir, ancak onları bulamıyorum ve şu anda çok aktif bir araştırma alanı gibi görünmüyor.

Cevap AVB tarafından da yararlı oldu ve ben L içine baktım A B * kısaca.

"The nonlinear relations for L*, a*, and b* are intended to mimic the nonlinear
response of the eye. Furthermore, uniform changes of components in the L*a*b* colour
space aim to correspond to uniform changes in perceived colour, so the relative 
perceptual differences between any two colours in L*a*b* can be approximated by 
treating each colour as a point in a three dimensional space."

Okuduklarımdan itibaren, cihazıma bağlı görüntüler için bu renk alanına dönüşüm zor olacaktır - ancak biraz daha fazla zamanım olduğunda bunu ayrıntılı olarak inceleyeceğim (bir çeşit uygulama için).

Bu soruna somut bir çözüm için nefesimi tutmuyorum ve L A B * denemesinden sonra madalyonun rengini göz ardı ediyorum ve mevcut geometrik algılama algoritmalarımı (doğru Elliptic Hough Transform vs.) emin olmak istiyorum.

Hepinize teşekkürler. Ve bu sorunun son notu, işte, renk tanıma özelliği olmayan yeni bir geometrik algılama algoritmasıyla aynı görüntü:

görüntü tanımını buraya girin


1
Görüntüler her zaman aynı renk arka planına sahip olacak mı? Veya görüntüye başka bir 'renk standardı' nesnesi ekleyebilir misiniz? Öyleyse, değişen aydınlatmayı ayarlamanın bir yolu vardır.
Olmazsa

2
Sadece belli ki renkli ışık değil. Güneş ışığımın, flüoresan ışığının ve akkor ışığın, gözlerimiz bir şekilde değişen renkleri algılamamamız için HSB renk eşleştirmesini bozacak kadar farklı renklere sahip olduğundan eminim.
Peter Shor

2
(+1) Soru ilginç ve zorlu. İyi bir cevapta iyi bir şansa sahip olabilmek için bazı detaylandırmalara ihtiyaç duyulduğunu hissediyorum. Hali hazırda belirtildiği gibi, kötüye pozlama konusunda sınırları var. Pratik bir çözüm için, bu sınıflandırmayı yapabilmek istediğiniz ortamlar hakkında daha ayrıntılı bilgi vermeniz gerekecektir. Hangi renkli arka planlar mümkün? Her zaman aynı sayıda jeton mu? Her zaman renkli bir resminiz olacak mı? İyi ortam aydınlatması? Bu tür özellikleri bilmek, bir çözüme doğru rehberlik sağlayabilir.
kardinal

2
Karşılaştığınız sorunun "renk sabiti" ile ilgili olduğunu düşünüyorum. Diğer arama terimleri "aydınlatıcıyı azaltmak" veya "arka planı azaltmak" olur. Görme biliminde çözülmemiş bir problemdir.
caracal

1
Güzel takipler için tekrar + 1 yapabilmeyi diliyorum! Çok ilginç şeyler.
Matt Parker,

Yanıtlar:


6

Yeni başlayanlar için iki şey.

Bir, kesinlikle RGB'de çalışmaz. Varsayılan değeriniz Lab (aka CIE L * a * b *) renk boşluğu olmalıdır. Atın L. Gibi görüntüden görünüyor akoordinat size en çok bilgi verir, ancak muhtemelen bir temel bileşen analizi yapmalıdır ave bsadece şeyler basit tutmak için, ilk (en önemli) bileşeni boyunca ve iş. Bu işe yaramazsa, 2B modele geçmeyi deneyebilirsiniz.

Sadece bir his elde etmek için a, üç sarımsı sikkede 6'nın altında STD var ve 137 ("altın"), 154 ve 162 - ayırt edici özellikleri olmalıdır.

İkincisi, aydınlatma sorunu. Burada probleminizi dikkatlice tanımlamanız gerekecektir. Yakın renkleri herhangi bir aydınlatma altında ve herhangi bir bağlamda ayırt etmek istiyorsanız - bu şekilde değil, yine de yapamazsınız. Yalnızca parlaklıktaki yerel değişimlerden endişe ediyorsanız, Lab çoğunlukla bununla ilgilenecektir. Hem gün ışığı altında hem de akkor ışık altında çalışabilmek istiyorsanız, örnek görüntünüzdeki gibi tek tip beyaz arka plan sağlayabiliyor musunuz? Genel olarak, aydınlatma koşullarınız nelerdir?

Ayrıca, resminiz oldukça ucuz bir kamerayla çekilmiş. Muhtemelen renkleri oldukça fena bozan bir çeşit otomatik beyaz dengesi özelliğine sahiptir - mümkünse kapatın. Aynı zamanda, görüntü ya bir noktada YCbCr'de kodlanmış gibi görünüyor (bir video kamera ise çok olur) ya da benzer bir JPG türevinde; renk bilgisi ciddi şekilde örneklenmiştir. Sizin durumunuzda aslında iyi olabilir - bu, kameranın sizin için renk kanallarında biraz kınama yaptığı anlamına geliyor. Öte yandan, muhtemelen bir noktada renk bilgilerinin de parlaklıktan daha güçlü bir şekilde ölçüldüğü anlamına gelir - bu o kadar iyi değil. Buradaki en önemli şey - kamera önemlidir ve ne yapacağınız, kullanacağınız kameraya bağlı olmalıdır.

Burada bir şey anlam ifade etmiyorsa - yorum bırakın.


Cevabınız için teşekkürler. Yukarıdakilerin hiçbirini sağlayamıyorum. Bu, bir düğmeyi tıklatarak (ve çok hızlı bir şekilde!) Madeni paraları saran bir mobil uygulamadır. Bu nedenle, aydınlatma çılgınca değişebilir ve tutarlı bir arka plan da yoktur. Madeni para tiplerinin bu şekilde renkle sınıflandırılmasının (belirttiğiniz gibi) mümkün olmadığını düşünüyorum. Ancak, L A B * 'nın kullanımına cevap vermenizi seviyorum ve teklif edilen en iyi cevap olduğuna inanıyorum. Bunun ışığında cevabınız ve ödülünüz var. Tekrar teşekkürler.
MoonKnight

6

Beyin fırtınası ruhunda, deneyebileceğiniz bazı fikirleri paylaşacağım:

  1. Daha fazla Hue deneyin? Görünüşe göre Hue, en azından burada gösterdiğin tek örnekte, bakır ve altın arasında olmasa da, gümüş ve bakır / altın arasında oldukça iyi bir ayrımcı sağladı. Gümüşü bakır / altından ayırt etmenin uygulanabilir bir özellik olup olmadığını görmek için Hue'yu daha ayrıntılı olarak kullandınız mı?

    Manuel olarak etiketlediğiniz bir grup örnek görüntüyü toplayarak ve her görüntüdeki her bir madalyonun Tonunu hesaplayarak başlayabilirim. O zaman Hue'yu ayırt etmek için makul bir yol gibi görünüp görünmediğini görmek için histogramlarını deneyebilirsiniz. Ayrıca, burada sunduğunuz gibi bir kaç örnek için her madalyonun ortalama Tonuna bakmayı deneyebilirim. Ayrıca Doygunluğu da deneyebilirsiniz, çünkü bu yardımcı olabilir gibi görünüyordu.

    Bu başarısız olursa, neyi denediğinizi göstermek için sorunuzu düzenlemek ve bunun neden zor olduğunu ya da nerede başarısız olduğunu tam olarak göstermek için bazı örnekler vermek isteyebilirsiniz.

  2. Diğer renk uzayları? Benzer şekilde, rg kromitesine dönüşmeyi deneyebilir ve daha sonra sonucun gümüşü bakır / altından ayırmada yardımcı olup olmadığını görmek için deneyebilirsiniz . Bu, aydınlatma varyasyonunu ayarlamak için yardımcı olabilir, bu yüzden denemeye değer olabilir.

  3. nnn

    npnnonp,oToT(p)oiT(pi)TT(x)=x+c(mod360)c

  4. CRRC

    CθRθRθC(x,y)D(x,y)=Rθ(x,y)C(x,y)RθCL2(x,y)D(x,y)2θ0.25θ

    L2L2RC

    Sağlamlık için, her bir madeni para için (aslında, her bir madalyonun her bir tarafı) birden fazla farklı referans resminiz olabilir ve en iyi eşleşmeyi bulmak için tüm referans resimlerini deneyebilirsiniz.

    CR

  5. ff(r)rfCCfRR

    fg(r)=f(r)μμgCgR

    f

    fC

    CCf

  6. Renk tutarlılığı için görsel algoritmalara bakın. Bilgisayar vizyonu topluluğu, bilinmeyen bir aydınlatma kaynağını düzeltme sorunu olan renk dengesini inceledi ; bakınız, örneğin, bu genel bakış . Bu problem için türetilmiş algoritmalardan bazılarını keşfedebilirsiniz; aydınlatma kaynağını çıkarmaya çalışırlar ve daha sonra, referansı aydınlatma kaynağı ile birlikte çekilmiş resmi elde etmek için elde edeceğiniz görüntüyü türetmek için düzeltirler.

  7. CRC

Bunlardan herhangi birinin çalışma şansı olup olmadığını bilmiyorum, ama deneyebileceğiniz bazı fikirler.


3

İlginç problem ve iyi iş.

Ortalama yerine medyan renk değerlerini kullanmayı deneyin. Bu, parlaklık ve doygunluk nedeniyle aşan değerlere karşı daha sağlam olacaktır. Üçünün yerine RGB bileşenlerinden sadece birini kullanmayı deneyin. Renkleri en iyi ayırt eden bileşeni seçin. Size piksel dağılımının özellikleri hakkında bir fikir vermek için piksel değerlerinin histogramlarını (örneğin RGB bileşenlerinden biri) çizmeyi deneyebilirsiniz. Bu hemen açık olmayan bir çözüm önerebilir. Herhangi bir kalıbı takip edip etmediklerini görmek için RGB bileşenlerini 3B alanda çizmeyi deneyin; örneğin, RGB bileşenlerinin doğrusal bir kombinasyonunun tek bir diziden daha iyi bir sınıflandırıcı olabileceğini belirten bir çizgiye yakın olabilirler.


Medyan ile iyi bir bağırma, aslında bunu da kodladım ve bu da doğru rengi belirleme açısından zayıf. Histogram yaklaşımı ile hesaplama giderinin bilincindeyim; 2D'de pikseller arasında dolaşmaya başlar başlamaz şarjlara maruz kalacağım! Asla-hiç-olmayan, herhangi bir korelasyon kurmak için böyle bir şey (belirttiğiniz gibi) koyarak bana değer olabilir. RGB bileşenleri için her türlü grafiği ürettim ve değişen aydınlatma koşullarından (farklı yerlerde fotoğraf çekmenin bir sonucu olarak) RGB değerleri üç jeton tipi için de büyük ölçüde üst üste gelebilir.
MoonKnight

Ayrıca, belirli bir madeni para tipine ait bir renk uzay noktasının arka olasılığını tahmin etmek için bir model takmaya baktım. Gauss karışım modellemesine de baktım, ancak henüz bu kadar ileriye gitmedim. Başka (biraz keyfi, fakat daha basit) bir yaklaşım hakkında da bilgi aldım ve bu en yakın komşu enterpolasyonu gibi bir şey kullanmak. Zaman ayırdığınız için teşekkürler.
MoonKnight

1
Tamamen farklı bir pistte, madeni paralar arasındaki diğer bir fark, ön / arkadaki tasarımdır (bazıları bir tarafta aynı tasarıma sahip olsa da) Tasarım desenleri kümesini jeton pikselleriyle çapraz ilişkilendirme (ya da karşılıklı bilgiyi kullanma) hakkında ne düşünüyorsunuz? Hangi parayı aradığınızı belirlemek için. Oranların, piksel renginin ve bu tasarım uyuşumunun birleşimi sayesinde muhtemelen yanlış keşif oranını azaltabilirsiniz.
martino

Bunu düşündüm - ama bu mevcut tanıma yazılımının çok fazla soruyor ve sıfırdan yazmak için büyük bir iş olurdu (OCR ??). Ayrıca böyle bir uygulamanın bakım kabusu haline gelmesine neden olan madeni paraların grafiklerinde çok büyük farklılıklar vardır. Daha sonra bir oyun oynayacağım - ne bulduğumu rapor edeceğim. Tekrar teşekkürler.
MoonKnight

Neden aşağı oy? Cevapla ilgili bir sorun varsa, belirtmek faydalı olacaktır - bir tane göremiyorum
martino
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.