algorithm - por - reconocimiento de imagenes python
¿Cuál es el mejor algoritmo para encontrar el color más cercano en una matriz a otro color? (3)
Tengo un color (RGB) que se lee desde un sensor. También tengo una lista de colores "conocidos", cada uno emparejado con un nombre de cadena.
¿Cuál sería la mejor manera (es decir, comportarse como un humano que elige colores) para sacar el nombre del color más cercano de esta lista?
He intentado una distancia cartesiana más corta con RGB, pero eso hace que el gris sea más cercano al verde que al negro o al blanco.
En lugar de utilizar RGB, intente usar un modelo de color HSL (Tono, Saturación, Luminosidad) o HSV (Tono, Saturación y Valor) . Luego experimente con diferentes elementos de sesgo, por ejemplo, el tono es más importante que la luminancia cuando calcula la distancia.
Jon Skeet tiene razón. Debe utilizar un sistema con Hue como componente en lugar de RGB si le preocupa que el componente de color de la coincidencia sea demasiado diferente. HSL o HSV funcionarán bien para este propósito.
Luego debes jugar con la fórmula de la distancia para ponderar el tono hasta que estés satisfecho con los resultados. Tenga en cuenta que encontrará que el problema es en realidad esencialmente insoluble a menos que tenga una gran cantidad de colores para igualar o sus colores de entrada se limiten a un pequeño rango de valores posibles. Esto se debe a que, aunque parezca que puedes fijar el color que quieras a uno de 8 (rojo, naranja amarillo, verde, azul, violeta, blanco y negro) o uno de 16, en realidad encontrarás que tu algoritmo siempre encontrará lo que parecen ser coincidencias obviamente incorrectas porque con 3 ejes de movimiento (tono, saturación, valor o rojo, verde, azul), hay muchos más colores "básicos" de los que podría pensar a primera vista.
Pensaría que si trata los colores como coordenadas RGB en 3 espacios y calcula la distancia desde los valores muestreados a los conocidos, podría determinar la coincidencia más cercana. Probablemente también intente escalar RGB según la sensibilidad del ojo (es decir, Y = 0.3 * R + 0.59 * G + 0.11 * B) obtendría el mejor resultado