首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成类Scale2x结果但对浮点值具有鲁棒性的算法。

生成类Scale2x结果但对浮点值具有鲁棒性的算法。
EN

Stack Overflow用户
提问于 2022-03-26 10:54:57
回答 1查看 27关注 0票数 0

Scale2x是一种简单的算法,可以填充对角线,使它们在缩放后出现“粗”。

此算法需要检查是否相等:

代码语言:javascript
运行
复制
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对整数进行量化外,再加上舍入或引入公差,是否有一种更稳健的方法来实现类似的输出。也就是说,一种不平等的算法。

EN

回答 1

Stack Overflow用户

发布于 2022-03-26 18:33:27

我认为你触及了问题中唯一可行的答案:宽容。如果你把它变成一个函数,这并不难。

代码语言:javascript
运行
复制
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打分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71627418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档