reverted to original method for colour propagation of fully clipped highlights
The "new" one was producing artifacts in some cases -- needs further investigation
This commit is contained in:
parent
65783e0216
commit
acfdf220ec
@ -415,7 +415,6 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
{ { 1.f, 0.8660254f, -0.5f }, { 1.f, -0.8660254f, -0.5f }, { 1.f, 0.f, 1.f } };
|
{ { 1.f, 0.8660254f, -0.5f }, { 1.f, -0.8660254f, -0.5f }, { 1.f, 0.f, 1.f } };
|
||||||
|
|
||||||
std::unique_ptr<PixelsMap> recovered_partial;
|
std::unique_ptr<PixelsMap> recovered_partial;
|
||||||
std::unique_ptr<PixelsMap> recovered_full;
|
|
||||||
|
|
||||||
if(settings->verbose)
|
if(settings->verbose)
|
||||||
for(int c = 0; c < 3; c++) {
|
for(int c = 0; c < 3; c++) {
|
||||||
@ -1109,16 +1108,11 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
//now correct clipped channels
|
//now correct clipped channels
|
||||||
if (pixel[0] > max_f[0] && pixel[1] > max_f[1] && pixel[2] > max_f[2]) {
|
if (pixel[0] > max_f[0] && pixel[1] > max_f[1] && pixel[2] > max_f[2]) {
|
||||||
//all channels clipped
|
//all channels clipped
|
||||||
// float Y = (0.299 * clipfix[0] + 0.587 * clipfix[1] + 0.114 * clipfix[2]);
|
float Y = (0.299 * clipfix[0] + 0.587 * clipfix[1] + 0.114 * clipfix[2]);
|
||||||
// float factor = whitept / Y;
|
float factor = whitept / Y;
|
||||||
// red[i][j] = CLIP(clipfix[0] * factor);
|
red[i][j] = CLIP(clipfix[0] * factor);
|
||||||
// green[i][j] = CLIP(clipfix[1] * factor);
|
green[i][j] = CLIP(clipfix[1] * factor);
|
||||||
// blue[i][j] = CLIP(clipfix[2] * factor);
|
blue[i][j] = CLIP(clipfix[2] * factor);
|
||||||
red[i][j] = green[i][j] = blue[i][j] = whitept;
|
|
||||||
if (!recovered_full) {
|
|
||||||
recovered_full.reset(new PixelsMap(width, height));
|
|
||||||
}
|
|
||||||
recovered_full->set(j, i);
|
|
||||||
|
|
||||||
} else {//some channels clipped
|
} else {//some channels clipped
|
||||||
float notclipped[3] = {pixel[0] <= max_f[0] ? 1.f : 0.f, pixel[1] <= max_f[1] ? 1.f : 0.f, pixel[2] <= max_f[2] ? 1.f : 0.f};
|
float notclipped[3] = {pixel[0] <= max_f[0] ? 1.f : 0.f, pixel[1] <= max_f[1] ? 1.f : 0.f, pixel[2] <= max_f[2] ? 1.f : 0.f};
|
||||||
@ -1180,27 +1174,6 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (recovered_full) {
|
|
||||||
#ifdef _OPENMP
|
|
||||||
#pragma omp parallel
|
|
||||||
#endif
|
|
||||||
gaussianBlur(color, temp, width, height, 3.f);
|
|
||||||
|
|
||||||
#ifdef _OPENMP
|
|
||||||
#pragma omp parallel for
|
|
||||||
#endif
|
|
||||||
for (int i = 0; i < height; ++i) {
|
|
||||||
for (int j = 0; j < width; ++j) {
|
|
||||||
int skip = recovered_full->skipIfZero(j, i);
|
|
||||||
if (skip) {
|
|
||||||
j += skip-1;
|
|
||||||
} else if (recovered_full->get(j, i)) {
|
|
||||||
color[i][j] = temp[i][j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user