Her yerde kullanılan HSV renk uzayını görüyorum: izleme, insan tespiti, vb ... Merak ediyorum, neden? RGB'yi kullanmaktan daha iyi yapan bu renk alanıyla ilgili nedir?
Her yerde kullanılan HSV renk uzayını görüyorum: izleme, insan tespiti, vb ... Merak ediyorum, neden? RGB'yi kullanmaktan daha iyi yapan bu renk alanıyla ilgili nedir?
Yanıtlar:
Basit cevap, RGB'nin aksine , HSV'nin luma veya görüntü yoğunluğunu kroma veya renk bilgisinden ayırmasıdır . Bu, birçok uygulamada çok faydalıdır. Örneğin, bir renkli görüntünün histogram eşitlemesini yapmak istiyorsanız, bunu muhtemelen sadece yoğunluk bileşeninde yapmak ve renkli bileşenleri yalnız bırakmak istersiniz. Aksi takdirde çok garip renkler elde edersiniz.
Bilgisayarla görüşte, renk bileşenlerini yoğunluğa göre ışıklandırma değişikliklerine veya gölgeleri gidermek gibi çeşitli nedenlerle ayırmak istersiniz.
Bununla birlikte, HSV'nin rengi yoğunluğundan ayıran birçok renk alanından biri olduğuna dikkat edin (Bkz. YCbCr, Lab, vb.). HSV, genellikle RGB ve HSV arasında dönüştürme kodunun yaygın olarak bulunabildiği ve kolayca uygulanabildiği için kullanılır. Örneğin, MATLAB için Görüntü İşleme Araç Kutusu işlevleri rgb2hsv
ve içerir hsv2rgb
.
Renk bilgisi, genellikle HSV bilgisinden çok daha gürültülüdür.
Size bir örnek vereyim: Ben ve bazı arkadaşlar, gerçek sahne videolarındaki trafik işaretlerinin tanınmasıyla ilgili bir projeye dahil olduk (gürültü, gölgeler ve bazen tıkanma mevcut). Daha büyük bir projenin parçasıydı, bu da bize bu belirli soruna farklı yaklaşımlar denemek için zaman kazandırdı (ve daha eski yaklaşımları tekrar kullanın). Renk bazlı yaklaşımı kendim denemedim, ama ilginç bir bilgiyi hatırlıyorum: _ DURDUR işaretindeki baskın RGB bileşeni genellikle kırmızı değildi ! (çoğunlukla gölgelerden dolayı)
Bir HSV renk uzayından genellikle daha iyi bilgi alabilirsiniz . Bir kişisel deneyim örneği tekrar deneyeyim ve deneyeyim: Üzerinde gölgeli tek renkli bir düzlem görüntüsüne sahip olduğunuzu hayal edin. RGB renk alanında, gölge kısmı büyük olasılıkla gölgesiz kısımdan çok farklı özelliklere sahip olacaktır. HSV ColorSpace olarak, renk gölgesi esas etkileyecektir: Her iki yamalar bileşeni benzer olması daha olasıdır değeri , ya da belki satuation ise, bileşen renk beyaz parlaklık ve sulandırılmış-lik var olmayan (primer "renk" belirten / black) çok fazla değişmemeli.
Bu açıklamalar size sezgisel gelmiyorsa, şunu öneriyorum:
bu tür renk temsillerinin geliştirilmesinin nedenlerini deneyin ve görün : insan renginin yorumlanması görüşüne dayanarak her zaman bir şekilde
örneğin çocuklar gerçekten çok renkli değiller == değerli nesneler, rengin yoğun ve seyreltilmemiş olduğu yüksek oranda doymuş nesneleri tercih ederler.
Bunu aldıktan ve biraz sezgi geliştirdikten sonra, görüntülerle oynamalısınız: RGB ve HSV bileşenlerinde çeşitli görüntüleri açmayı deneyin
Amacınız , gölgeler, güçlü ışıklandırma, ışık yansıması içeren görüntüler için bu ayrışmalardaki bir farkı görmek ve anlamak olacaktır .
Oynamak istediğiniz belirli bir görüntü türünüz varsa, bunları ayrıştırmayı deneyin: kim bilir, belki RGB gerçekten ihtiyaçlarınız için HSV'den daha uygundur :)
Yalnızca Hue bileşenini kullanmak, algoritmayı aydınlatma değişkenlerine karşı daha az hassas hale getirir (değişmezse).
Bir başka popüler seçenek, AB kanallarının AB uzayındaki renk ve öklid mesafelerini temsil ettiği LAB renk uzayı, insanın renk algısına daha iyi uyuyor. Yine, L kanalını (Luminance) göz ardı etmek algoritmayı aydınlatma farklarına karşı daha sağlam kılar.
Görebildiğim en iyi cevap şudur: RGB, RGB'nin renk gösterme şekli ile ilgili "uygulama detayları" ile ve HSV'nin "gerçek renk" bileşenleri ile yapması gerekenlerle ilgilidir. Bunu söylemenin bir başka yolu da RGB olacaktır, bilgisayarların rengi işleme şeklidir ve HSV, insanların renkleri algılayışımızın bileşenlerini yakalamaya çalışır .
Ayrıntılı olarak anlatacağım:
Renk, elektromanyetik dalgalara dayanan bir algıdır. Bu dalgaların doğal özellikleri, örneğin yoğunluk ve frekanstır. Bir ışık dalgasının frekansını kızılötesi ila ultraviyole arasında kaydırırsak, görsel olarak gökkuşağı renkleri boyunca bir renk değişimini algılayacağız. Gökkuşağı renkleri "saf renkler" olarak kabul edilebilir, çünkü bunlar tek frekanslı dalgalarla temsil edilir.
Artık insan gözü şaşırtıcı şekilde kırmızı, yeşil ve mavi değil, üç ana ışık frekansına yanıt verebilir veya "rezonans" yapabilir. Gerçek şu ki, bu yanıt doğrusal değildir, böylece retina verilen saf rengi (ve dolaylı olarak "frekansını") üç renk bileşeninin birleşik tepkisi ile ayırt edebilir .
RGB renk alanı, yalnızca retinamızın iç çalışmalarını taklit edecek şekilde mevcuttur, böylelikle bilgisayar ekranlarında renklerin büyük bir çoğunluğu, uygun bir (bilgisayar bakış açısıyla) 24 bitlik piksel rengi ile gösterilebilir. kodlama. RGB renk uzayının, doğal renk özellikleriyle, ne de insanın renk yorumlamasıyla özde bir ilişkisi yoktur.
Örneğin, RGB uzayda (örneğin, renk gradyanlarının oluşması) kanalda gerçekleştirilen herhangi bir aritmetik işlem, çok kaba ve hatta açıkça "yanlış" sonuçlar verir. Bu nedenle renk duraklarını RGB'den diğer renk alanlarına (HLS, Lab, vb.) Dönüştürerek, enterpolasyonları uygulayarak, sonra enterpolasyondaki değerleri RGB'ye geri dönüştürerek renk haritalarının yaratılması önerilir.
Bu yardımcı olur umarım!
HSV, Ton-Doygunluk Değeri anlamına gelir. Aslında bir renk düzlemi temsili türüdür (RGB, YCbCr vb.).
Aygıttan bağımsız bir renk sunum formatıdır: HSV renk temsili, belirli renk türlerini tespit etmek için kullanışlıdır, örneğin: ten rengi, ateş rengi vb.
Matlab
RGB görüntüsünü HSV düzlemine dönüştürme işlevidir rgb2hsv('/inputimage_name')
.
Sana anlaman için bir örnek vereceğim. Bizim elimizde birçok parça hurma, arka hurma ve bunun altında. bu alanlarda farklı renk çeşitliliği görüyoruz, ancak tüm bu bölgeler için renk tonu fazla değişmiyor, bu nedenle renk tonu değeri el segmentasyonunda faydalı olabilir.
Bildiğim hiçbir şey, özellikle HSV'de YUV veya LAB ile karşılaştırıldığında, özellik çıkarımı ve aydınlatma değişmezliği veya görselleştirme için daha iyi hale getirecek kadar iyi. Sanırım konvansiyon ve süreklilik nedeniyle HSV daha yaygın kullanılanlardan biriydi: aynı renk alanını kullanıyorsanız sonuçları karşılaştırmak ve birbirleriyle iletişim kurmak daha kolay.
Bununla birlikte, HSV (RGB'nin tersine) bilgisayar vizyonunda bildiğim 2 nedenden dolayı kullanılıyor:
Diğerlerinin de belirttiği gibi, lumayı kromadan ayırmak faydalıdır. Luma, sahnede nesneye düşen ışık miktarına göre büyük ölçüde değişir. Diğer taraftan Chroma, nesnenin kendine özgü özellikleri ile daha iyi korelasyon gösterir ve düzgün beyaz dengelenmiş görüntüler için daha fazla veya daha az değişmezdir.
Bununla birlikte, HSV, HSL veya aslında renk düzleminin kutupsal parametrelere sahip herhangi bir renk uzayının bu amaç için kötü seçimler olduğunu eklemek isterim. Bunun nedeni, grey çizgisinde tekilliği ortaya koymalarıdır (hangi renk gridir?), Onları gürültüye ve beyaz dengesine karşı çok hassas hale getirirler. Ek olarak, bir kutupsal koordinat sistemindeki iki renk arasında karşılaştırma yapmak o kadar kolay değildir. Ayrıca, HSV'deki değerin veya HSL'deki hafifliğin insan tarafından algılanan hafifliğe veya başka herhangi bir fiziksel enerji ölçüsüne karşılık gelmediğine dikkat edin.
Doğrusallığı (YCbCr, YUV) koruyarak veya insan görüşünü uygun şekilde (LUV, LAB) modellerken aynı luma-kroma ayrıştırmasını sağlayan çok sayıda doğrusal renk alanı vardır. Bunlarla kromatikliklerinde Euclidean L2 normunu kullanarak iki rengi karşılaştırabilirsiniz, bu da genel olarak daha sağlam bir algoritma oluşturur.
HSV / HSL neden bu kadar sık kullanılıyor? Objektif bir cevap vermek zor. Tecrübelerime göre, çoğunlukla cehalet ve RGB-> HSV dönüşüm rutinlerinin mevcudiyetidir. Yazarları gama düzeltmeyi anlamayan kodlarla çalışmak zorunda kaldılar, farklı renk alanlarını bile. RGB'yi HSV'ye dönüştüren kod görüldükten sonra, görüntüyü modüler bir miktar olduğu gerçeğini göz ardı ederek renk tonuna göre bölümlere ayırdı. Bunun bilinçli kararların herhangi bir sebeple desteklenmediğine karar verebileceğimizi düşünüyorum.