当前位置: 首页 > 知识库问答 >
问题:

寻找最佳邻域像素

曹自怡
2023-03-14

我正在尝试在MATLAB中对图像中的一个物体进行形状分析(特别是)。为此,我找到了边界像素。对于每个边界像素,我使用8邻域理论计算它的邻域。现在我正在计算一个点与它的唯一邻居的切线(取决于我如何选择顺时针或其他方式)。如果每个像素正好有两个邻居,我的算法就能正常工作。对于本图所示的形状(顺序为9 X 15像素)。

但如果一个像素的邻域超过2个,那么我的算法就会混乱。例如,如(顺序为9 X 15像素)所示。

我想在顺时针或逆时针方向上获取每个边界像素与其相邻像素的切线,如果你注意到第二个图像,这是有效的边界像素,如果我在顺时针方向上移动,那么红色像素的相邻像素将是绿色的,而在顺时针方向上绿色的相邻像素将是“1”,“1”的相邻像素是“2”,但是我不能返回到蓝色和棕色像素,我不能访问和获取每个边界像素与其相邻像素的切线。

我已经学习了graph的节点访问算法,在这些算法中,您可以维护队列或堆栈,但在这种情况下,我不仅要访问每个像素,而且还要根据我移动的方向,取每个像素与右邻居像素的切线。

这是一个示例问题,类似的问题可以以其他方式出现,所以我试图为它生成一些通用算法。我会很感激你的帮助。谢谢你。

共有1个答案

伯建安
2023-03-14

就像btilly说的。解决方法是找到像素之间的边界,而不是像素本身。我向你推荐一部分potrace算法。这是一种二值图像矢量化算法。有趣的部分是对路径的分解。下面是路径分解的思想:

Potrace算法可以在这里找到。

另一种算法来自Wilhelm Burge和Burger在“Digital image processing A algorithmic introduction using enter link description Here”一书在链接中你可以看到这本书的某些部分。interisting部分是第538页的函数“traceContour”。这个算法就像你想的那样工作,在“内部”像素周围行走。我在这里找到了一些浮石的解释,在内部边界追踪处。您可以使用四个或八个相邻连接来执行该算法。

 类似资料:
  • 我正在为游戏开发AI,我想使用MinMax算法和Alpha-Beta修剪。 我对它的工作原理有一个粗略的想法,但我仍然无法从头开始编写代码,所以我花了最近两天的时间在网上寻找某种伪代码。 我的问题是,我在网上找到的每个伪代码似乎都是基于找到最佳移动的值,而我需要返回最佳移动本身而不是数字。 我现在的代码是基于这个伪代码(源代码) 如您所见,这段代码返回一个数字,我想这是使一切正常工作所必需的(因为

  • 将上面SELECT的输出(id)传递给DELETE 提前谢了。

  • 让我们假设我有一个酒店索引,就像ElesticSearch网站上的示例一样。除了得到与给定短语匹配的酒店之外,我还想检查用户是否被允许看到“建议”。像只为某一客户服务的旅馆之类的东西。我添加了一个用于保存组/权限的新字段,作为一个简单的字符串用于测试。我想完成的是按组过滤。 映射如下所示: 并附上下列文件: 在https://github.com/elasticsearch/elasticsear

  • 我对微服务还是一个新手,有一些基本的架构问题现在还无法解决。我使用Quarkus框架和标准扩展(如quarkus-resteasy和quarkus-rest-client)来实现。 这两个服务都是作为Maven项目创建的。根据教程,我发现正确的方法是在项目中声明一个接口(这里称为),如下所示 然后通过@inject将此接口集成到服务中,这导致了以下示例性服务。 我使在端口8181上本地运行,并在项

  • 下面是寻找最小跳跃次数的算法谜题。发布了详细的问题声明和两个代码版本来解决这个问题。我做了测试,似乎两个版本都可以工作,我的第二个版本是版本一代码的优化版本,这使得我从开始,而不是持续增加,这可以通过不迭代所有的插槽来节省时间数组。 我的问题是,想知道我的第二个版本代码是否100%正确?如果有人发现任何逻辑问题,请指出。 问题陈述 给定一个非负整数数组,您最初位于数组的第一个索引处。 数组中的每个

  • 如何在数据集中找到几个最小值中的第一个?我希望至少2大于最小值。 例如, 我想将df['value'][0]或者简单地说(0.6)标识为这个数组中的第一个最小值。然后将df[‘值’][4]或(2.8)确定为至少比第一个确定的最小值(0.6)大2的值。 这适用于其他数据集,但在最小值为第一个时不适用。 理想的输出是: 正如评论中建议的那样,循环将是更好的方法。