¿Existe alguna diferencia entre el valor de brillo y el valor de escala de grises en el procesamiento de imágenes? ¿O es el mismo significado pero con diferente nombre?
Datos ampliados:
La relación entre escala de grises y brillo:
Fórmula de conversión:
1. Base
Existe una fórmula psicológica famosa para convertir el color en gris:
Gris = R * 0,299+G * 0,587+B * 0,114
Algoritmo de números enteros
En aplicaciones prácticas, queremos evitar operaciones de coma flotante de baja velocidad, por lo que se necesita la aritmética de enteros.
Tenga en cuenta que los coeficientes tienen 3 dígitos de precisión, podemos escalarlos 1000 veces para implementar operaciones con números enteros:
Gris = (R * 299+G * 587+B * 114 + 500)/1000
RGB generalmente tiene una precisión de 8 bits, pero ahora tiene un zoom de 1000 veces, por lo que la operación anterior es una operación entera de 32 bits. Tenga en cuenta que la siguiente división es una división entera y debe sumar 500 para lograr el redondeo.
Precisamente porque este algoritmo requiere operaciones de 32 bits, otra variante de esta fórmula es muy popular:
Gris = (R * 3G * 59+B * 11+50 ) /100
Sin embargo, aunque la fórmula anterior es una operación de enteros de 32 bits, de acuerdo con las características de las instrucciones de multiplicación y división de enteros del sistema 80x86, la operación se puede realizar utilizando la multiplicación de enteros de 16 bits. e instrucciones de división.
En tercer lugar, algoritmo de desplazamiento de enteros
El algoritmo de enteros anterior es muy rápido, pero hay una cosa que limita la velocidad, y es la división final. El cambio es mucho más rápido que la división, por lo que los coeficientes se pueden escalar a potencias enteras de 2.
Tradicionalmente se utiliza una precisión de 16 bits y la decimosexta potencia de 2 es 65536, por lo que el coeficiente se calcula de la siguiente manera:
0,299*65536=19595,264≈19595
0.587 *65536+(0.264)=38469.632+0.264=38469.896≈38469
0.114*65536+(0.896)=7471.104+0.896=7472
Habrá un gran error en el redondeo, calculado antes Los errores en los resultados deben calcularse juntos.
El método de redondeo es el método de corte de cola:
La expresión escrita es:
gray =(R * 19595+G * 38469+B * 7472)>& gt16
Coeficiente de 2-20 dígitos de precisión:
Gris=(R*1+G*2+B*1)>& gt2
Gris=(R* 2+G* 5+B*1)>& gt三
Gris=(R*4+G*1B*2)>& gt四
Gris=( R*9+ G*19+B*4)>& gt五
Gris=(R*19+G*37+B*8)>& gt六
Gris =(R* 38+G*75+B*15)>& gt七
Gris=(R*76+G*15B*30)>& gt八
Gris=( R*153+G*30B*59)>& gt九
gris =(R * 306+G * 601+B * 117)>& gt10
gris = (R * 612+G * 1202+B * 234)>& gt11
gris =(R * 1224+G * 2405+B * 467)>& gt12
Gris= (R*2449+G*4809+B*934)>& gt13
gris =(R * 4898+G * 9618+B * 1868)>& gt14
gris = (R * 9797+G * 19235+B * 3736)>& gt15
gris = (R * 19595+G * 38469+B * 7472)>& gt16
gris = (R * 3919G * 76939+B * 14943)>& gt17
gris = (R * 78381+G * 153878+B * 29885)>& gt18
gris = (R * 156762+G * 307757+B * 59769)>& gt19
gris =(R * 313524+G * 615514+B * 119538)>& gt20
Observar arriba Las fórmulas, estas precisiones son en realidad las mismas: 3 y 4, 7 y 8, 10 y 11, 13 y 14, 19 y 20, por lo que la mejor fórmula de cálculo para operaciones de 16 bits es usar 7 bits. precisión.
Gray=(R*38+G*75+B*15)>& gt seven
De hecho, lo más interesante es la precisión de 2 dígitos, que puede ser totalmente convertido y optimizado:
gray =(R+(WORD)G<<1+B)>>2
Debido al gran error, esta fórmula nunca se utiliza en el procesamiento de imágenes (principalmente Lo más utilizado es la precisión de 16 bits). Pero para la programación de juegos, la escena cambia con frecuencia y, en general, es imposible para los usuarios observar diferencias sutiles en el color, por lo que la precisión de 2 dígitos se usa más comúnmente.
Materiales de referencia:
Enciclopedia Baidu-Valor de escala de grises
Enciclopedia Baidu-Brillo de imagen