algorithm - 寻找最佳邻居像素

标签 algorithm matlab image-processing

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

但是如果一个像素有超过 2 个相邻像素,那么我的算法就会变得困惑。例如,如图所示(顺序为 9 X 15 像素)。

enter image description here

我想沿顺时针或逆时针方向将每个边界像素与其相邻像素相切,如果您注意到第二张图像,这是有效的边界图像,如果我沿顺时针方向移动,则红色像素的相邻像素将是顺时针方向的绿色和绿色邻居为“1”,“1”的邻居为“2”,但我无法回到蓝色和棕色像素,也无法访问每个边界像素与其相邻像素的切线。

我已经了解了图的节点访问算法,您可以在其中维护队列或堆栈,但在这种情况下,我不仅想访问每个像素,而且还根据我的方向对每个像素取正切,只有右邻像素移动。

这是一个示例问题,类似的问题可能会以其他方式发生,因此我正在尝试为其生成一些通用算法。我会感谢你的帮助。谢谢。

最佳答案

就像 btilly 已经说过的。解决方案是找到像素之间的边界,而不是像素本身。我向您推荐 potrace 算法的一部分。它是一种矢量化二进制图像的算法。有趣的部分是路径的分解。下面是 Path 分解的思路:

Path following

Potrace Algorithm你可以在这里找到。

另一个算法来自 Wilhelm Burge 和 Burger 在书中 "digital image processing an algorithmic introduction using enter link description here" .在链接中,您可以看到本书的某些部分。有趣的部分是第 538 页的函数“TraceContour”。该算法按照您的想法工作并绕过“内部”像素。我发现了 Alorith 的一些解释 here , 在内部边界追踪处。您可以使用四个或八个邻居连接来执行该算法。

The connectivity

关于algorithm - 寻找最佳邻居像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27628306/

相关文章:

c# - 我将数组向左旋转 N 次的逻辑缺陷在哪里?

c++ - 从数组到TypedArray <std::complex <double >>的无限制转换?

matlab - Matlab之后学习任何编程语言的建议

image-processing - 扩张/侵 eclipse 修改内核选项

c++ - 如何使用CImg库捕获和处理图像的每一帧?

c++ - 找到两个嘈杂的光照变体图像之间的差异(直方图对齐等)

python - 从最后一个产生的对象而不是值中查找元素

java - java中如何实现递归除法

algorithm - ID3 执行什么样的搜索?

c - MATLAB 墨西哥 : retrieving a logical from a struct in MATLAB