
Iniciado por
_GUI_
Nuevo esquema para el modo 2: en subexposición (f<1) es idéntico al modo 1 que ya preservaba tono; en sobreexposición (f>1) éste sí que preserva tono siempre:
Pues esto es lo implementado (no he subido aún esa versión):
Código:
case 2:
// Exposure correction with highlight preservation, HSV luminosity
if(verbose) printf("with highlight preservation: : HSV luminosity\n");
if(exposure>1){
K1=32768/exposure;
K2=65535-K1;
for(i=0;i<height*width;i++){
Y=MAX((float)image[i][0],MAX((float)image[i][1],(float)image[i][2])); // HSV luminosity
exposure2=MIN(exposure,65535.0/Y);
image[i][0]=CLIP((float)image[i][0]*exposure2); // R
image[i][1]=CLIP((float)image[i][1]*exposure2); // G (mixed)
image[i][2]=CLIP((float)image[i][2]*exposure2); // B
}
}else{
EV=log(exposure)/log(2.0);
for(i=0;i<height*width;i++){
Y=0.299*(float)image[i][0]+0.587*(float)image[i][1]+0.114*(float)image[i][2]; // CIE luminosity
if(Y<32768){
image[i][0]=CLIP((float)image[i][0]*exposure); // R
image[i][1]=CLIP((float)image[i][1]*exposure); // G (mixed)
image[i][2]=CLIP((float)image[i][2]*exposure); // B
}else{
exposure2=powF(2,-2*EV*(Y/65535.0-1));
image[i][0]=CLIP((float)image[i][0]*exposure2); // R
image[i][1]=CLIP((float)image[i][1]*exposure2); // G (mixed)
image[i][2]=CLIP((float)image[i][2]*exposure2); // B
}
}
}
break;

Iniciado por
_GUI_
Debería impedir la "posterización" del pétalo de las 14:00h.
Pues lo veo casi peor. O lo he implementado mal o lo has puesto mal, o no entiendo lo que pretendías. La de la izquierda es la nueva. Las dos con los mismos parámetros (+1 modo 2):

Actualizo también el ejemplo de arriba con la flor "nueva" en grande, como versión "Modo 2 experimental". Por cierto, si subo aún más la exposición (+3, por ejemplo) las hojas se vuelven mucho más amarillas en el modo 2 que en el modo 1.
Un saludo:
Marcadores