Color propagation highlight reconstruction causes crash on some files, fixes #2928
This commit is contained in:
parent
929c0ad1b3
commit
20839d3a4a
@ -847,21 +847,22 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
green[i][j] = clipfix[1] * factor;
|
green[i][j] = clipfix[1] * factor;
|
||||||
blue[i][j] = clipfix[2] * factor;
|
blue[i][j] = clipfix[2] * factor;
|
||||||
} else {//some channels clipped
|
} else {//some channels clipped
|
||||||
|
const float eps = 0.0001f;
|
||||||
int notclipped[3] = {pixel[0] < max_f[0] ? 1 : 0, pixel[1] < max_f[1] ? 1 : 0, pixel[2] < max_f[2] ? 1 : 0};
|
int notclipped[3] = {pixel[0] < max_f[0] ? 1 : 0, pixel[1] < max_f[1] ? 1 : 0, pixel[2] < max_f[2] ? 1 : 0};
|
||||||
|
|
||||||
if (notclipped[0] == 0) { //red clipped
|
if (notclipped[0] == 0) { //red clipped
|
||||||
red[i][j] = max(red[i][j], (clipfix[0] * ((notclipped[1] * pixel[1] + notclipped[2] * pixel[2]) /
|
red[i][j] = max(red[i][j], (clipfix[0] * ((notclipped[1] * pixel[1] + notclipped[2] * pixel[2]) /
|
||||||
(notclipped[1] * clipfix[1] + notclipped[2] * clipfix[2]))));
|
(notclipped[1] * clipfix[1] + notclipped[2] * clipfix[2] + eps))));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notclipped[1] == 0) { //green clipped
|
if (notclipped[1] == 0) { //green clipped
|
||||||
green[i][j] = max(green[i][j], (clipfix[1] * ((notclipped[2] * pixel[2] + notclipped[0] * pixel[0]) /
|
green[i][j] = max(green[i][j], (clipfix[1] * ((notclipped[2] * pixel[2] + notclipped[0] * pixel[0]) /
|
||||||
(notclipped[2] * clipfix[2] + notclipped[0] * clipfix[0]))));
|
(notclipped[2] * clipfix[2] + notclipped[0] * clipfix[0] + eps))));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notclipped[2] == 0) { //blue clipped
|
if (notclipped[2] == 0) { //blue clipped
|
||||||
blue[i][j] = max(blue[i][j], (clipfix[2] * ((notclipped[0] * pixel[0] + notclipped[1] * pixel[1]) /
|
blue[i][j] = max(blue[i][j], (clipfix[2] * ((notclipped[0] * pixel[0] + notclipped[1] * pixel[1]) /
|
||||||
(notclipped[0] * clipfix[0] + notclipped[1] * clipfix[1]))));
|
(notclipped[0] * clipfix[0] + notclipped[1] * clipfix[1] + eps))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -950,7 +950,7 @@ int RawImageSource::interpolateBadPixelsXtrans( PixelsMap &bitmapBads )
|
|||||||
* (Taken from Emil Martinec idea)
|
* (Taken from Emil Martinec idea)
|
||||||
* (Optimized by Ingo Weyrich 2013 and 2015)
|
* (Optimized by Ingo Weyrich 2013 and 2015)
|
||||||
*/
|
*/
|
||||||
int RawImageSource::findHotDeadPixels( PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels )
|
SSEFUNCTION int RawImageSource::findHotDeadPixels( PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels )
|
||||||
{
|
{
|
||||||
float varthresh = (20.0 * (thresh / 100.0) + 1.0 ) / 24.f;
|
float varthresh = (20.0 * (thresh / 100.0) + 1.0 ) / 24.f;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user