本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

码报:【j2开奖】算法可视化:把难懂的代码画进梵高的星空(2)

时间:2016-12-07 13:05来源:118图库 作者:www.wzatv.cc 点击:
其中numCandidates表示一次生成的候选采样点个数。这个参数让你以质量换取速度。numCandidates越小,算法运行速度越快。相反,numCandidates越大,算法运行速度

  其中numCandidates表示一次生成的候选采样点个数。这个参数让你以质量换取速度。numCandidates越小,算法运行速度越快。相反,numCandidates越大,算法运行速度越慢,但是采样质量越高。

  ▼distance函数是简单几何:

  function distance(a, b) {

  vardx = a[0] - b[0],

  dy = a[1] - b[1];

  return Math.sqrt(dx * dx + dy * dy);

  }

  如果你想的话,在这里可以忽略开平方(sqrt),因为它是一个单调函数,并且,它不改变最佳候选采样点的结果。

  findClosest函数返回距离当前候选采样点最近的采样点。我们可以使用暴力搜索来实现,即对每一个现有的采样点进行迭代。或者,可以让搜索加速,如利用四叉树搜索算法。暴力搜索实现简单,但非常慢(时间复杂度太高)。而加速方式要快得多,但需要做更多的工作来实现。

  谈到权衡——在决定是否使用一个算法,我们不是凭空评估它,而是将其与其他方法进行比较。作为一个实际问题,权衡实施的复杂性:需要多久来实现、维护难度,对于衡量它的性能和质量是十分有用的。

  ▼最简单的替代方法是均匀随机采样——

  function sample() {

  return [random() * width, random() * height];

  }

  它看起来是这样的:

码报:【j2开奖】算法可视化:把难懂的代码画进梵高的星空

  统一随机是相当糟糕的。存在严重的欠采样和过采样:许多样本点拥挤在一起,甚至重叠,导致大的空区域(当每次采样的候选采样点的数量被设置为1时,均匀随机采样也代表最佳候选算法的质量的下限)。

  除了通过采样点的分布规律来鉴别采样质量,我们还可以尝试通过根据最接近的样本的颜色对图像着色来在不同的采样策略下模拟视觉。这实际上是采样点的Voronoi图,其中每个单元由相关样品着色。

  通过6667个均匀随机采样后的《星夜》看起来是怎样的?

码报:【j2开奖】算法可视化:把难懂的代码画进梵高的星空

  这种方法的弊端也很明显。采样点分布不均导致每个单位在尺寸大小上变化很大,和预期的不均匀采样点分布一样。细节丢失严重是因为密集采样点(小单元)没有充分利用起来。同时,稀疏采样点(大单元)通过夸大稀有色彩(例如左下角的粉红色)引入了噪音。

  现在来看看最佳候选采样:

码报:【j2开奖】算法可视化:把难懂的代码画进梵高的星空

  好多了!虽然仍然随机放置,但单元的大小更一致。尽管样品的数量(6667)保持不变,但由于它们均匀分布,保留了更多的细节和引入了更少的噪声。如果你眯着眼睛,几乎可以弄清楚原来的笔触。

  我们可以使用Voronoi图来更直观地研究样本分布,通过根据其面积给每个单元上色。较暗的单元较大,表示稀疏采样; 较浅的单元较小,表明密集采样。最佳图案具有几乎均匀的颜色,同时保持不规则的采样位置。(显示单元面积分布的直方图也是很好的,但是Voronoi具有同时显示采样位置的优点)。

  这是同样的6667个采样点的不均匀随机采样:

码报:【j2开奖】算法可视化:把难懂的代码画进梵高的星空

  黑点是采样点之间的大空隙,可能是由于欠采样导致的视觉局部缺陷。相同数量的最佳候选样品在单元面积中表现出小得多的变化,并且因此着色更一致:

码报:【j2开奖】算法可视化:把难懂的代码画进梵高的星空

  我们能做得比最佳候选算法更好吗?是的! 我们不仅可以用不同的算法产生更好的样本分布,而且这种算法更快(线性时间)。它至少像最佳候选算法一样容易实现。这种算法甚至可以扩展到任意维度。

  这个奇迹叫做Bridson的泊松盘采样算法,它看起来像这样:

码报:【j2开奖】算法可视化:把难懂的代码画进梵高的星空

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容