algorithm - Acompanhamento: "Classificando" cores de distintividade - CoreDump.pt
Acompanhamento: "Classificando" cores de distintividade
Se você é dado N maximamente cores distantes (e alguns métrica de distância associada), você pode vir acima com uma maneira de classificar essas cores em alguma ordem de modo que o primeiro M também são razoavelmente perto de ser um conjunto maximamente distinta?
Em outras palavras, dado um monte de cores distintas, chegar a uma ordenação para que eu possa usar tantas cores como eu preciso começar no início e ser razoavelmente seguro de que todos eles são distintos e que as cores próximas também são muito distintas (por exemplo, vermelho azulado não é próximo ao avermelhado azul).
Randomização é OK, mas certamente não ideal.
Esclarecimento: Dado um conjunto grande e visualmente distinta de cores (digamos 256, ou 1024), eu quero classificá-los de tal forma que quando eu uso o primeiro, digamos, 16 deles que eu recebo um subconjunto relativamente visualmente distinta de cores. Isso equivale, aproximadamente, a dizer Quero classificar esta lista de 1024 para que as cores individuais mais próximos são visualmente, o mais distantes eles estão na lista.
Publicado 04/08/2008 em 16:14 2008-08-04 16:14
N cores maximamente distantes pode ser considerado um conjunto de pontos bem distribuídos em um (cor) espaço 3-dimensional. Se você pode gerá-los a partir de uma seqüência de Halton , então qualquer prefixo (as primeiras cores M) também consiste em pontos bem distribuídos.
Respondeu 25/08/2008 em 09:44 2008-08-25 09:44 share
fonte usuário palm3D
Parece percepção é importante para você, nesse caso, você pode querer considerar trabalhando com um espaço de cor perceptual, como YUV, YCbCr ou Lab. Toda vez que eu usei aqueles, que me deram resultados muito melhores do que sozinho sRGB.
Convertendo de e para sRGB pode ser uma dor, mas no seu caso poderia realmente fazer o algoritmo mais simples e como um bônus que vai trabalhar principalmente para estores cor também!
Respondeu 12/08/2008 em 13:33 2008-08-12 13:33 share
Este problema é chamado de quantização cor, e tem muitos algoritmos bem conhecidos: http://en.wikipedia.org/wiki/Color_quantization Sei que as pessoas que implementaram a abordagem octree para um bom efeito.
Respondeu 12/08/2008 em 13:11 2008-08-12 13:11 share
Isso também me parece algum tipo de gráfico de resistência em que você tenta mapear o caminho de menor resistência. Se você inverter os requisitos, caminho de resistência máxima, talvez pudesse ser usado para produzir um conjunto que desde o início produz o máximo de diferença que você vá, e no final começa a voltar para valores mais próximos dos outros.
Por exemplo, aqui está uma maneira de talvez fazer o que quiser.
Calcule a distância (ref seu outro post ) de cada cor para todas as outras cores
Somar as distâncias para cada cor, isto dá-lhe uma indicação para o quão longe esta cor é de todas as outras cores no total
Ordenar a lista pela distância, indo para baixo
Isso, ao que parece, produzir uma lista que começa com a cor que está mais longe de todas as outras cores, e depois ir para baixo, cores para o final da lista seria mais perto de outras cores em geral.
Edit: Lendo sua resposta ao meu primeiro post, sobre a subdivisão espacial, que não se encaixam exatamente a descrição acima, desde cores perto de outras cores iria cair para o fundo da lista, mas vamos dizer que você tem um conjunto de cores em algum lugar, em menos uma das cores de esse cluster seria localizado perto do início da lista, e seria a única que geralmente era mais distante de todas as outras cores no total. Se isso faz sentido.
Respondeu 04/08/2008 em 16:38 2008-08-04 16:38 share
Você poderia apenas classificar as cores candidatos com base na máxima distanciada do mínimo distância para qualquer uma das cores de índice.
Usando distância cor euclidiana:
Embora você pode substituí-lo com o que quiser. Ele só precisa de uma rotina de distância de cor.
Respondeu 03/09/2012 em 21:50 2012-09-03 21:50 share
fonte usuário Tatarize
Comece com duas listas. CandidateColors, que inicialmente contém suas cores distintas e SortedColors, que é inicialmente vazio.
Escolha qualquer cor e eliminar dos CandidateColors e colocá-lo em SortedColors. Esta é a primeira cor e será o mais comum, por isso é um bom lugar para escolher uma cor que jives bem com a sua aplicação.
Para cada cor em CandidateColors calcular a distância total. A distância total é a soma da distância do CandidateColor para cada uma das cores em SortedColors.
Remover a cor com a maior distância total de CandidateColors e adicioná-lo ao final de SortedColors.
Se CandidateColors não está vazio, volte para o passo 3.
Este algoritmo guloso deve dar-lhe bons resultados.
Respondeu 21/11/2008 em 10:29 2008-11-21 10:29 share
fonte usuário user4891
Se eu estou entendendo a pergunta corretamente, você deseja obter o subconjunto de M cores com a maior distância média entre as cores, dada alguma função distância d .
Dito de outra forma, considerando-se o conjunto inicial de N cores como um gráfico grande, sem direção em que todas as cores são conectados, você quer encontrar o caminho mais longo que visita quaisquer M nós.
Resolvendo problemas NP-completos gráfico é muito além de mim Eu estou com medo, mas você pode tentar executar uma simulação física simples:
Gerar M pontos aleatórios no espaço de cor
Calcular a distância entre cada ponto
Calcular vectores de repulsão para cada ponto que vai mover-lo longe de todos os outros pontos (utilizando 1 / ( distância ^ 2) como a magnitude do vector)
Somar os vectores de repulsão para cada ponto
Actualizar a posição de cada ponto de acordo com os vectores de repulsão somados
Restringir qualquer fora de coordenadas ligados (tal como luminosidade indo negativo ou superior a um)
Repetir do passo 2 até que os pontos estabilizar
Para cada ponto, selecione a cor mais próxima do conjunto original de N
Está longe de ser eficiente, mas para pequenas M pode ser eficiente o suficiente, e ele lhe dará perto os melhores resultados.
Se a sua função distância cor é simples, pode haver uma maneira mais determinista de gerar o subconjunto ideal.
Respondeu 16/10/2008 em 18:11 2008-10-16 18:11 share
fonte usuário Richard Poole
Você pode dividir-los em formato RGB HEX para que você possa comparar o R ​​com R da de uma cor diferente, mesmo com o G e B.
Mesmo formato HTML
Assim, a única coisa que você precisa decidir é o quão perto você quer as cores eo que é uma diferença aceitável para os segmentos de ser considerado diferente.
Respondeu 04/08/2008 em 16:31 2008-08-04 16:31 share
Quer dizer que a partir de um conjunto de cores N, você precisa escolher M cores, onde M <N, tal que M é a melhor representação das cores N no espaço M?
Como um exemplo melhor, reduzir a true-color (espaço de cor de 24 bits) para um espaço de cor mapeada 8-bit (GIF?).
Existem algoritmos de quantização para isso, como o Bairro espacial Adaptive algoritmo usado pelo ImageMagic.
Esses algoritmos geralmente não basta escolher as cores existentes no espaço de origem, mas cria novas cores no espaço-alvo que mais se assemelham as cores de origem. Como um exemplo simplificado, se você tem 3 cores da imagem original onde dois são vermelho (com diferente intensidade ou matizes azulados etc.) eo terceiro é azul, ea necessidade de reduzir a duas cores, a imagem-alvo pode ter uma cor vermelha que é uma espécie de média dos dois vermelha original + a cor azul da imagem original.