Capture sharpening: xtrans auto radius calculation bugfix
This commit is contained in:
@@ -488,87 +488,6 @@ float calcRadiusXtrans(const float * const *rawData, int W, int H, float lowerLi
|
||||
}
|
||||
}
|
||||
}
|
||||
const float valtl = rawData[row][col];
|
||||
const float valtr = rawData[row][col + 1];
|
||||
const float valbl = rawData[row + 1][col];
|
||||
const float valbr = rawData[row + 1][col + 1];
|
||||
if (valtl > 1.f) {
|
||||
const float maxValtltr = std::max(valtl, valtr);
|
||||
if (valtr > 1.f && maxValtltr > lowerLimit) {
|
||||
const float minVal = std::min(valtl, valtr);
|
||||
if (UNLIKELY(maxValtltr > maxRatio * minVal)) {
|
||||
bool clipped = false;
|
||||
if (maxValtltr == valtl) { // check for influence by clipped green in neighborhood
|
||||
if (rtengine::max(rawData[row - 1][col - 1], valtr, valbl, valbr) >= upperLimit) {
|
||||
clipped = true;
|
||||
}
|
||||
} else { // check for influence by clipped green in neighborhood
|
||||
if (rtengine::max(rawData[row - 1][col + 2], valtl, valbl, valbr) >= upperLimit) {
|
||||
clipped = true;
|
||||
}
|
||||
}
|
||||
if (!clipped) {
|
||||
maxRatio = maxValtltr / minVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
const float maxValtlbl = std::max(valtl, valbl);
|
||||
if (valbl > 1.f && maxValtlbl > lowerLimit) {
|
||||
const float minVal = std::min(valtl, valbl);
|
||||
if (UNLIKELY(maxValtlbl > maxRatio * minVal)) {
|
||||
bool clipped = false;
|
||||
if (maxValtlbl == valtl) { // check for influence by clipped green in neighborhood
|
||||
if (rtengine::max(rawData[row - 1][col - 1], valtr, valbl, valbr) >= upperLimit) {
|
||||
clipped = true;
|
||||
}
|
||||
} else { // check for influence by clipped green in neighborhood
|
||||
if (rtengine::max(valtl, valtr, rawData[row + 2][col - 1], valbr) >= upperLimit) {
|
||||
clipped = true;
|
||||
}
|
||||
}
|
||||
if (!clipped) {
|
||||
maxRatio = maxValtlbl / minVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (valbr > 1.f) {
|
||||
const float maxValblbr = std::max(valbl, valbr);
|
||||
if (valbl > 1.f && maxValblbr > lowerLimit) {
|
||||
const float minVal = std::min(valbl, valbr);
|
||||
if (UNLIKELY(maxValblbr > maxRatio * minVal)) {
|
||||
bool clipped = false;
|
||||
if (maxValblbr == valbr) { // check for influence by clipped green in neighborhood
|
||||
if (rtengine::max(valtl, valtr, valbl, rawData[row + 2][col + 2]) >= upperLimit) {
|
||||
clipped = true;
|
||||
}
|
||||
} else { // check for influence by clipped green in neighborhood
|
||||
if (rtengine::max(valtl, valtr, rawData[row + 2][col - 1], valbr) >= upperLimit) {
|
||||
clipped = true;
|
||||
}
|
||||
}
|
||||
if (!clipped) {
|
||||
maxRatio = maxValblbr / minVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
const float maxValtrbr = std::max(valtr, valbr);
|
||||
if (valtr > 1.f && maxValtrbr > lowerLimit) {
|
||||
const float minVal = std::min(valtr, valbr);
|
||||
if (UNLIKELY(maxValtrbr > maxRatio * minVal)) {
|
||||
if (maxValtrbr == valbr) { // check for influence by clipped green in neighborhood
|
||||
if (rtengine::max(valtl, valtr, valbl, rawData[row + 2][col + 2]) >= upperLimit) {
|
||||
continue;
|
||||
}
|
||||
} else { // check for influence by clipped green in neighborhood
|
||||
if (rtengine::max(rawData[row - 1][col + 2], valtl, valbl, valbr) >= upperLimit) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
maxRatio = maxValtrbr / minVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return std::sqrt((1.f / (std::log(1.f / maxRatio) / 2.f)) / -2.f);
|
||||
|
Reference in New Issue
Block a user