【问题标题】:How to calculate what percentage of a pixel is within the bounds of a shape如何计算像素在形状范围内的百分比
【发布时间】:2019-04-01 23:14:29
【问题描述】:

我有一个二维网格,其中像素中心位于两条半网格线的交点处,如下所示。

我还有一个在这个网格上绘制的形状。在我的例子中,形状是一个字形,并由段描述。每个段都有一个起点、终点和一些偏离曲线的点。这些段可以是二次曲线或直线。重要的是我可以知道构成形状轮廓的点和功能。

决定哪些像素应该打开的规则很简单:如果像素的中心位于形状轮廓内,则打开该像素。下图显示了应用此规则的示例。

现在我面临的问题与抗锯齿有关。我想做的是计算给定像素的面积在轮廓内的百分比。例如,在上图中,我在形状内大约 15% 的像素周围绘制了一个红色正方形。

这样做的目的是让我可以将像素只打开 15%,从而为最终的光栅图像获得一些更清晰的边缘。

虽然我能够找到用于确定给定点是否落在多边形内的算法 (ray casting),但我无法找到有关此类问题的任何信息。

有人可以指点我一些算法来实现这一点吗?如果我以错误的方式解决这个问题,也请告诉我!

【问题讨论】:

  • 最简单的方法可能是超级采样:不仅要检查像素中心,还要检查像素中的一大堆点。如果要精确,则必须计算形状和像素区域的交集。这可能会变得很棘手。
  • @NicoSchertler 像超级采样这样的技术正是我想要的。这是我阅读该主题的一个很好的起点。谢谢!

标签: graphics antialiasing typography rasterizing


【解决方案1】:

这听起来像是 X、Y 问题。

您正在寻求一种计算像素覆盖百分比的方法,但根据您的问题,听起来您想要做的是反锯齿多边形。

如果您只使用单色 2D 形状(即红色、蓝色、洋红色...正方形、线条、曲线...),一个非常简单的解决方案是创建您的图像并随后模糊结果。

这会自动为您提供一个平滑的轮廓,并且很容易用多种语言实现。

【讨论】:

  • 我认为这绝对不是一个糟糕的解决方案,它可能在大多数情况下都可以工作。但是我可以想象像素的模糊会导致错误值的情况,例如仅与轮廓重叠一小部分但被完全打开的像素包围的像素。
  • 我的建议是,尝试一下,大约需要 15 分钟来实现,例如可以使用 OpenCV。看看它是否适合您的目的,然后再决定。不要让最好的人成为好人的敌人。
猜你喜欢
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多