当前位置: 首页 > 面试题库 >

二值图像连通域搜索

益思博
2023-03-14
本文向大家介绍二值图像连通域搜索相关面试题,主要包含被问及二值图像连通域搜索时的应答技巧和注意事项,需要的朋友参考一下

matlab中连通区域标记函数bwlabel中的算法,一次遍历图像,并记下每一行(或列)中连续的团(run)和标记的等价对,然后通过等价对对原来的图像进行重新标记。

创建RUN(团)结构体,包含(纵坐标、横坐标开始、横坐标结束、标记号) 开始逐行扫描图像,寻找所有的团,将他们放到一个二维数组vector< vector >中,以下为每一行的操作。 当遇到一个255时,创建一个团的对象,标记纵坐标和横坐标的开始。 从开始点向右寻找,直到遇到0或者这行结束,则标记为这个团的横坐标结束。 将该行的RUN push到对应的位置。回到步骤2.1. 对众多的团进行分析,对团进行标记且得到等价对,创建一个vector< pair<int, int> >用于存放所有的等价对。 遍历所有相邻行。 若该行为第一行,则直接进行标记。 对于相邻行,遍历该行的所有RUN,对于每一个RUN,遍历上一行的所有RUN(超出范围即停止循环)。 若上一行中没有与该行RUN邻接,则创建新的标记。 若上一行只有一个与该RUN邻接,则沿用相邻RUN的标记。 若上一行有多个与该RUN邻接,则使用这多个RUN中最小的标记,并创建多个等价对。 消除等价对,可使用并查集,使得所有的团都拥有自己的祖先。 假设标记从0开始,到1000结束。标记对为类似的(0,10).(10,39)。 创建一个prev[1000]数组,初始化值为-1,记录该标记的上一级领导。初始prev[10]=0,prev[39]=10。初始化所有的等价对。 遍历所有的等价对,修改每一级的上一级领导为最上层领导。 修改每个团中的标记为最上层领导的标记。 代码见 github

https://github.com/liqiang311/snippets/blob/master/%E4%BA%8C%E5%80%BC%E5%9B%BE%E5%83%8F%E8%BF%9E%E9%80%9A%E5%9F%9F%E9%97%AE%E9%A2%98.cpp

开源库cvBlob中使用的标记算法,它通过定位连通区域的内外轮廓来标记整个图像,这个算法的核心是轮廓的搜索算法

TODO:轮廓跟踪算法

 

 类似资料:
  • 本文向大家介绍彩色图像、灰度图像、二值图像和索引图像区别?相关面试题,主要包含被问及彩色图像、灰度图像、二值图像和索引图像区别?时的应答技巧和注意事项,需要的朋友参考一下 彩色图像:RGB图像。灰度图像:0-255像素值。二值图像:0和1,用于掩膜图像。 索引图像:在灰度图像中,自定义调色板,自定义输出256种颜色值。

  • 目标 在本教程中,您将学习简单二值化,自适应二值化,Otsu 二值化等。 你会学到这些函数:cv2.threshold,cv2.adaptiveThreshold 等。 简单二值化 简单二值化是很直截了当的一种方法。如果像素值大于阈值,则分配一个值(可以是白色),否则分配另一个值(可以是黑色)。使用的函数是cv2.threshold。第一个参数是源图像,这应该是灰度图像。第二个参数是用于分类像素值

  • 从原始图像中我们可以看到,我的ROI是白色的棉花圈在红色的边界中。当我分割这幅图像时,我得到了如图所示的二值图像。我们注意到,与原始图像相比,二值图像中存在一些缺失区域。因此,我要计算ROI的原始图像的像素数和二值图像中白点的像素数。这样我就可以计算ROI的实际像素和实际分割的像素数量的差异。 谢谢你。

  • 有哪些可能的方法来计算图像中非白色区域/灰色/黑色斑块的表面积?我尝试了来获取形状,在轮廓上迭代,并使用和求出总面积和周长,但结果似乎与图像无关。 我也尝试在轮廓之前添加一个精明的边缘检测,但似乎仍然不太好用。 只是一个额外的上下文,我想使用表面积作为一个ML模型的特性)。

  • 我有一个图像与红色,绿色,蓝色通道和图像的二进制版本。 我只想从彩色图像中选择二进制为1的像素。 我知道这应该适用于,甚至适用于,但由于我对Matlab还很陌生,即使在阅读了函数的文档之后,我也搞不清楚如何做到这一点。

  • 我用java编写了一个实用的二叉搜索树,除了一个关键的函数,搜索。我使用的逻辑是,我将检查根是否为空,然后我要搜索的术语是否等于根(所以返回根)或>根(所以搜索右子树)或 使用printlns查看正在发生的事情,我发现如果值在那里,它将通过正确的if语句(包括将BNode n设置为找到的值),但随后由于某种原因将再次通过方法(返回null)。 这个方法唯一起作用的时候是在搜索根节点的时候,这对我来