Merge pull request #7259 from Lawrence37/raw-dehaze-bad-pixels

Raw dehaze negative values fix
This commit is contained in:
Lawrence37 2025-01-16 22:20:40 -08:00 committed by GitHub
commit d6059979d5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2695,9 +2695,9 @@ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, con
getMinValsXtrans(rawData);
}
//
reddeha = minVals[0];
greendeha = minVals[1];
bluedeha = minVals[2];
reddeha = minVals[0] == std::numeric_limits<float>::max() ? 0.f : minVals[0];
greendeha = minVals[1] == std::numeric_limits<float>::max() ? 0.f : minVals[1];
bluedeha = minVals[2] == std::numeric_limits<float>::max() ? 0.f : minVals[2];
if (riFlatFile && W == riFlatFile->get_width() && H == riFlatFile->get_height()) {
processFlatField(raw, riFlatFile, rawData, black);
} // flatfield
@ -8409,17 +8409,31 @@ void RawImageSource::getMinValsXtrans(const array2D<float> &rawData) {
float m5 = minVals[c5];
int col = 0;
for (; col < W - 5; col += 6) {
if (LIKELY(rawData[row][col] >= cb0)) {
m0 = rtengine::min(m0, rawData[row][col] - cb0);
}
if (LIKELY(rawData[row][col + 1] >= cb1)) {
m1 = rtengine::min(m1, rawData[row][col + 1] - cb1);
}
if (LIKELY(rawData[row][col + 2] >= cb2)) {
m2 = rtengine::min(m2, rawData[row][col + 2] - cb2);
}
if (LIKELY(rawData[row][col + 3] >= cb3)) {
m3 = rtengine::min(m3, rawData[row][col + 3] - cb3);
}
if (LIKELY(rawData[row][col + 4] >= cb4)) {
m4 = rtengine::min(m4, rawData[row][col + 4] - cb4);
}
if (LIKELY(rawData[row][col + 5] >= cb5)) {
m5 = rtengine::min(m5, rawData[row][col + 5] - cb5);
}
}
for (; col < W; ++col) {
const int c = ri->XTRANSFC(row,col);
if (LIKELY(rawData[row][col] >= c_black[c])) {
minVals[c] = rtengine::min(minVals[c], rawData[row][col] - c_black[c]);
}
}
minVals[c0] = rtengine::min(m0, minVals[c0]);
minVals[c1] = rtengine::min(m1, minVals[c1]);
minVals[c2] = rtengine::min(m2, minVals[c2]);
@ -8545,10 +8559,14 @@ BENCHFUN
float m1 = minVals[c1];
int col = 0;
for (; col < W - 1; col += 2) {
if (LIKELY(rawData[row][col] >= cb0)) {
m0 = rtengine::min(m0, rawData[row][col] - cb0);
}
if (LIKELY(rawData[row][col + 1] >= cb1)) {
m1 = rtengine::min(m1, rawData[row][col + 1] - cb1);
}
if (col < W) {
}
if (col < W && LIKELY(rawData[row][col] >= cb0)) {
m0 = rtengine::min(m0, rawData[row][col] - cb0);
}
minVals[c0] = m0;
@ -8567,14 +8585,14 @@ BENCHFUN
float m1 = minVals[c1];
int col = 0;
for (; col < W - 1; col += 2) {
if (LIKELY(rawData[row][col] > 0.f)) {
if (LIKELY(rawData[row][col] >= cb0 && rawData[row][col] > 0.f)) {
m0 = rtengine::min(m0, rawData[row][col] - cb0);
}
if (LIKELY(rawData[row][col + 1] > 0.f)) {
if (LIKELY(rawData[row][col + 1] >= cb1 && rawData[row][col + 1] > 0.f)) {
m1 = rtengine::min(m1, rawData[row][col + 1] - cb1);
}
}
if (col < W && LIKELY(rawData[row][col] > 0.f)) {
if (col < W && LIKELY(rawData[row][col] >= cb0 && rawData[row][col] > 0.f)) {
m0 = rtengine::min(m0, rawData[row][col] - cb0);
}
minVals[c0] = m0;