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);
|
return std::sqrt((1.f / (std::log(1.f / maxRatio) / 2.f)) / -2.f);
|
||||||
|
Reference in New Issue
Block a user