什么是安全墙,我该如何使用它

What is a safety wall and how do I use it?

本文关键字:何使用 安全 什么      更新时间:2023-10-16

我已经搜索了"安全墙"的零答案,所以我敢肯定这不是正确的术语。我会解释自己:

正如我所读的,我正在谈论采用二维数组,并将其放在同一数组中,并在每一侧增加一个单元格,以确保保持安全,并且不算出我创建的限制。

此技术的正确术语是什么?我将如何使用它?

就像其他人所说的那样,您需要搜索"前哨"或类似"前哨控制"的东西。

当您不知道程序的尺寸或限制时,您可以使用前哨控制。例如,您正在编写一个程序,该程序正在计算级别的班级等级。但是,您不知道课堂上有多少学生。或者您插入不知道限制的数组。然后,您可以将Sentinel控件用于此作业。

让我们看这个示例

int grade;
int totalgrade = 0; 
int studentCount = 0;
std::cin >> grade;
while (grade != -1) 
{
totalgrade = totalgrade + grade;
studentCount ++;
std::cin >> grade;
} // loop until user enter -1

因此,如果您不知道从用户输入多少值,则可以使用Sentinel控件来完成此作业。您还可以阅读有关前哨的更多信息。

这些通常称为"幽灵单元",通常在数值模拟或图像处理中使用,您将内核(例如平滑或差异操作员)用于数组。它们允许您无需特殊壳边缘应用内核。

例如;假设您想平滑图像 - 您可以使用类似的内核:

0.0   0.1   0.0
0.1   0.6   0.1
0.0   0.1   0.0

您可以通过获取源图像,对于每个像素,您可以通过将内核核算在源像素上的核心来计算目标像素的值,并添加9个覆盖像素的加权贡献(0.6 *的值(0.6 *的值)源像素,加上上方,下方和侧面每个像素的值的0.1倍)。为每个像素执行此操作,最终将获得原始图像的平滑版本。

这效果很好,但是问题是"您在边界细胞上做什么?"如果/随后逻辑对于边框案例而变得复杂(这可能很棘手并且可能会降低性能),而是可以在每一侧添加1层鬼单元。

当然,您必须在运行算法之前选择单元格值。您如何选择其价值取决于您的算法。您可能会选择将它们全部设置为零,但是在平滑内核的情况下,这会使您的形象在其边界处变暗,因此这可能不是您想要的。一个更好的计划是用最近的非玻璃细胞的值填充幽灵细胞。

您还需要弄清楚需要多少个幽灵细胞,这取决于内核的大小。对于上面的3x3内核,您需要1层的幽灵细胞(要照顾可能"悬挂"边缘的内核部分)。更复杂的内核可能需要更多(5x5内核需要2层等)。

您可以Google Google"鬼单元计算"以了解更多信息(添加'计算',否则您将获得生物学结果的 lot !)