Nasıl herhangi bir doğal sayı n için n farklı renkler üretmek için?

oy
35

n = 100 ki; Nasıl 100 görsel olarak ayrı renkler elde edebilirim? Bu matematiksel olarak mümkün mü?

Oluştur 24/02/2010 saat 19:09
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
4

Sen sürekli diğer 2 değerlerini tutarken HSL dönüştürmek ve daha sonra renk (H) değerleri arasında yineleme istiyorum.

Her değer için, geri RGB'ye HSL dönüştürmek .

Benim cevapları Bkz burada ve burada .

senin N çok büyük olduğunu ve bu nedenle renkler görsel olarak ayrı DEĞİLDİR Eğer o noktada aynı tonlar tümü üzerinde yeniden yineleme ve doygunluk ya da parlaklık değişir diğer bileşenleri değiştirebilir. Yani temelde kullanmak tonu değerlerinin maksimum sayıda olabilir ve bu isabet kez farklı bir doygunluk veya parlaklığa sahip yeniden başlayabilirsiniz.

Cevap 24/02/2010 saat 19:11
kaynak kullanıcı

oy
4

100 renkten çok, ama sıra seyrek HSB veya HSL boşlukta olabildiğince bunları dağıtarak bunu yapmak mümkün olabilir; RGB yapıyor muhtemelen zordur.

Örneğin, 10 farklı tonları, 4 farklı doygunluk düzeyleri ve 3 farklı parlaklık ayarlarını kullanmaya karar olabilir, yani 120 renge seni verecekti. Dikkatli doygunluk ve parlaklık değerlerini almak gerekir; İnsan gözü karmaşık ve kafa karıştırıcı sensörler bulunmaktadır. Eğer bir koni olarak renk alanını tedavi, muhtemelen her hafiflik / doygunluk seviyesinde tonlar farklı sayıda isteyeceklerdir.

İşte wikipedia bir bağlantı var HSB üzerinde girişin .

Cevap 24/02/2010 saat 19:11
kaynak kullanıcı

oy
33

Düzenle:

Bu alanda herhangi bir uzmanlığa sahip olmayan ve benim matematik becerileri oldukça ortalama. Ama birçok cevaplar burada önermek daha Geçenlerde benzer bir şey yapmaya çalıştık ve bir çözüm bulamadık çünkü bu sorunun çözümü, daha karmaşık ve ilginç görüş var.

Renk farkı

Rengin algılanması ders öznel ait olmakla birlikte, insanlar arasında önemli bir mutabakat vardır. Örneğin, tüm kırmızı, yeşil ve mavi çok farklı renkler olduğunu kabul edebilir ve hatta renk körü insanlar siyah ve beyaz çok farklı olduğunu kabul edersiniz.

RGB

Bilgisayar sistemlerinde renk en yaygın gösterimi vektörü (R, G, B) gibi basit bir mesafe fonksiyon önermektedir ki

RGB renk farkı

Aralığını ayarlamak Sağlar R , g ve b için [0, 1] ve görmek nasıl çalıştığını:

  1. Kırmızı (1, 0, 0) ve kırmızı (1, 0, 0) uzaklığını sahiptir 0 , açık olmalı
  2. Kırmızı (1, 0, 0) ve sarı (1, 1, 0) arasında bir mesafe vardır , 1 , bir mesafeden daha kısadır
  3. Kırmızı (1, 0, 0) ve mavi (0, 0, 1) olan (2) sqrt , burada akla yakındır

Çok uzak çok iyi. Sorun ancak mavi ve kırmızı aynı mesafeyi olması 1 siyahtan (0, 0, 0) görüntüye bakarken, ancak bu doğru tutun görünmüyor:

mavi ve siyah üzerine kırmızı

Ayrıca sarı (1, 1, 0) ve eflatun (1, 0, 1) her ikisi de aynı mesafeye sahip olan 1 beyazdan (1, 1, 1) , hangi mantıklı görünmüyor ya:

Beyaz üzerine sarı ve eflatun

HSV renk uzayı

Bunun için o analog ölçümlerini varsaymak güvenli olduğunu düşünüyorum HSV renk uzayı renk düzenleri aynı sorunlar var. Bu renk şemaları rengi karşılaştırmak için tasarlanmamıştır.

CIEDE2000

Neyse ki, bilim adamları zaten renkleri karşılaştırmak için iyi bir yol bulmaya çalışırken vardır. Bazı ayrıntılı yöntemler ile geldi, son bir varlık CIEDE2000

CIEDE2000

(makalede açıklanan tam formül büyük )

Bu metrik çok iyi mavi tonları ayırt etmek mümkün görünmektedir Aslında gibi, dikkate insan algısını alır. Bu yüzden bizim renk farkı fonksiyonu olarak kullanmak söyleyebilirim.

Renk Toplama Algoritma

naif çözüm

Bazı yanıtlar aşağıdaki algoritmayı önerdi

colors = []
for n in range(n):
    success=False
    while not success:
        new_color = random_color()
        for color in colors:
            if distance(color, new_color)>far_enough:
                colors.append(new_color)
                success = True
                break

Bu algoritma bazı sorunları var:

  1. renk aralığı optimal değildir. Biz on line sayılar gibi olmak renkleri hayal ederse, üç sayı optimal böyle aralıklı olacaktır:

    | Bir ----- b ----- c |

    a, b ve c hareket etmeden orada bir ek bir numara Paketleme tüm renkleri realigning açıkça daha kötüdür.

  2. Algoritma sonlandırma garanti edilmez . Yeterince listede mevcut renkleri oluşturacak hiçbir renk nedir yoksa? Döngü sonsuza kadar devam edecek

Uygun çözüm

Eh .. Bir tane yok.

Cevap 24/02/2010 saat 19:17
kaynak kullanıcı

oy
2

Eğer değil bir Sorunuzun cevabı, ancak, n maksimum değere sahiptir ve uygulama izin veriyorsa, böyle bir renk önceden tanımlanmış listesini kullanabilirsiniz:

http://en.wikipedia.org/wiki/List_of_colors

Bir avantajı renk körlüğü olan kişiler için bir araç ipucu olarak bir insanca okunabilir renk adını gösterilebilir olmasıdır.

Cevap 24/02/2010 saat 19:31
kaynak kullanıcı

oy
1

Yeni başlayanlar için, RGB alanını kullanmayın; Bu sorun için bir kötü renk alanını bulmak zordur. (Eğer görüntü için veya baskı için ya siyah yakın ya da beyaz yakınında ayırt edilemez renklerin büyük numaralarına sahip renkleri kullanıyor olmanıza bağlı.)

Eğer Lab alanı kullanırsanız, renklerin görsel yakınlığını (baskı ve görüntüleme için sırasıyla) ölçmek için algısal renk modelleri (CIE 1996? 2000 CIE) vardır.

Sen bir kere renkleri hesaplamak için gidiyoruz demek ve sonucu depolamak ya da anında recomputed gerekiyorsa (ve bu durumda o deterministik ya da olmamak varsa) yoktur. Açıkçası iyi bir set oluşturmak için nasıl herhangi bir tartışma olduğunu bağlı olacaktır.

Ben eşit renk alanı eksenlerini bölünmesi tavsiye ediyor olsa da (8 içine söylemek) ve başlangıç ​​noktaları olarak bu kullanarak çok daha etkili herhangi bir rasgele işlemi daha olacaktır. Kesinlikle sadece komşularıyla herhangi bir noktanın karşılaştırmak gerekir (ve onlar sette zaten görünür olmaları gerekir) size karşılaştırmaların çok sayıda kazandıracak.

Cevap 24/02/2010 saat 20:19
kaynak kullanıcı

oy
34

Evet. ayrı tanımlama biz söylemek istediğini maksimum ayrı renkler mümkün olduğunca diğer tüm renklerden olan renkler derken sonra bir renk alana erteleyerek bir ürünüdür. Ama cevabı değişmez renk alanı değiştirmek için gitmiyor beri. Ve insan gözü ve nasıl insan gözü ile daha iyi uyan CIE-lab dE2000 renk mesafesi gibi renk sert tüm hesaplamaları yineleme yapar bkz şey uygulayan, ancak statik bir liste kolaylaştırır. İşte 128 girdileri var.

private static final String[] indexcolors = new String[]{
        "#000000", "#FFFF00", "#1CE6FF", "#FF34FF", "#FF4A46", "#008941", "#006FA6", "#A30059",
        "#FFDBE5", "#7A4900", "#0000A6", "#63FFAC", "#B79762", "#004D43", "#8FB0FF", "#997D87",
        "#5A0007", "#809693", "#FEFFE6", "#1B4400", "#4FC601", "#3B5DFF", "#4A3B53", "#FF2F80",
        "#61615A", "#BA0900", "#6B7900", "#00C2A0", "#FFAA92", "#FF90C9", "#B903AA", "#D16100",
        "#DDEFFF", "#000035", "#7B4F4B", "#A1C299", "#300018", "#0AA6D8", "#013349", "#00846F",
        "#372101", "#FFB500", "#C2FFED", "#A079BF", "#CC0744", "#C0B9B2", "#C2FF99", "#001E09",
        "#00489C", "#6F0062", "#0CBD66", "#EEC3FF", "#456D75", "#B77B68", "#7A87A1", "#788D66",
        "#885578", "#FAD09F", "#FF8A9A", "#D157A0", "#BEC459", "#456648", "#0086ED", "#886F4C",

        "#34362D", "#B4A8BD", "#00A6AA", "#452C2C", "#636375", "#A3C8C9", "#FF913F", "#938A81",
        "#575329", "#00FECF", "#B05B6F", "#8CD0FF", "#3B9700", "#04F757", "#C8A1A1", "#1E6E00",
        "#7900D7", "#A77500", "#6367A9", "#A05837", "#6B002C", "#772600", "#D790FF", "#9B9700",
        "#549E79", "#FFF69F", "#201625", "#72418F", "#BC23FF", "#99ADC0", "#3A2465", "#922329",
        "#5B4534", "#FDE8DC", "#404E55", "#0089A3", "#CB7E98", "#A4E804", "#324E72", "#6A3A4C",
        "#83AB58", "#001C1E", "#D1F7CE", "#004B28", "#C8D0F6", "#A3A489", "#806C66", "#222800",
        "#BF5650", "#E83000", "#66796D", "#DA007C", "#FF1A59", "#8ADBB4", "#1E0200", "#5B4E51",
        "#C895C5", "#320033", "#FF6832", "#66E1D3", "#CFCDAC", "#D0AC94", "#7ED379", "#012C58"
};

İşte bir görüntü olarak 256 ilk.

Maksimum uzaklık

(Soldan sağa) (yukarıdan alt). her bir renk ColorSpace içinde mümkün olduğunca eşit uzaklıkta olmasını sağlamış eğer birkaç farklı renkleri elde etmek mümkün olabilir. Bu arama tablosu yerine başlangıcında N oluşturulması ve daha sonra renk aralığını haritalama daha önceki tüm renk itibaren maksimum tat her ek renk alır. Yani evet, kaba kuvvet ve yüksek düzeyde renk dsitance algoritması ve hazırsınız renkleri kendiniz bu aynı seti yapmak. Bir iki gün boyunca.

Cevap 30/11/2013 saat 09:18
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more