Scale2x是一种简单的算法,可以填充对角线,使它们在缩放后出现“粗”。
此算法需要检查是否相等:
auto const a01 = src(l, k - 1).value();
auto const a10 = src(l - 1, k).value();
auto const a11 = src(l, k).value();
auto const a12= src(l + 1, k).value();
auto const a21 = src(l, k + 1).value();
ret(2*l, 2*k).value() = a10 == a01 && a01 != a21 && a10 != a12 ? a10 : a11;
ret(2*l + 1, 2*k).value() = a01 == a12 && a01 != a21 && a10 != a12 ? a12 : a11;
ret(2*l, 2*k + 1).value() = a10 == a21 && a01 != a21 && a10 != a12 ? a10 : a11;
ret(2*l + 1, 2*k + 1).value() = a21 == a12 && a01 != a21 && a10 != a12 ? a12 : a11;
如果这些值是浮动的,这可能不是一个健壮的操作。除了用因子2^k对整数进行量化外,再加上舍入或引入公差,是否有一种更稳健的方法来实现类似的输出。也就是说,一种不平等的算法。
发布于 2022-03-26 18:33:27
我认为你触及了问题中唯一可行的答案:宽容。如果你把它变成一个函数,这并不难。
bool eq(double d1, double d2)
{
const double tolerance = 8.0;
return abs(d1-d2) <= tolerance;
}
ret(2*l, 2*k).value() = eq(a10, a01) && !eq(a01, a21) && !eq(a10, a12) ? a10 : a11;
根据彼此几乎无法区分的价值观来选择宽容。我选择了8作为普通的0-255打分。
https://stackoverflow.com/questions/71627418
复制相似问题