求教单连通区域标记算法域和多连通区域标记算法域到底怎么区别

 上传我的文档
 下载
 收藏
本人资料一部分是自己原创,一部分来源于网络,若您发现侵犯您个人权利的,请留言联系我,我立马删除。
 下载此文档
正在努力加载中...
解析从单连通域到多连通域上的几个重要公式
下载积分:350
内容提示:解析从单连通域到多连通域上的几个重要公式
文档格式:PDF|
浏览次数:21|
上传日期: 15:46:23|
文档星级:
该用户还上传了这些文档
解析从单连通域到多连通域上的几个重要公式
官方公共微信C/C++ 图像处理(六)-图像の连通域查找和分别上色算法研究 - 图形/图像当前位置:& &&&C/C++ 图像处理(六)-图像の连通域查找和分别上色C/C++ 图像处理(六)-图像の连通域查找和分别上色算法研究&&网友分享于:&&浏览:0次C/C++ 图像处理(6)------图像の连通域查找和分别上色算法研究& & 本文参考自这篇文章,由于其贴出来的代码运行效率较低而且不太符合本人的想法和习惯,所以对其进行了算法的重新设计和代码的重写。
&所谓图像的连通域,指的是图像上像素点值相同或者相近的点两两相邻接所组成的一块区域。而对于邻接,有四邻接和八邻接两种,如下:
四邻接 & & & & &八邻接
&上图所示的'O'与‘X’相邻接,本文采取的是4邻接方式。
&在查找图像连通域的时候,一般都需要经过一个二值化的过程,将图像的像素值简化成非此即彼的情况,然后通过遍历图像来查找其中一个值是由几个连通域所组成的。如下图所示:
& & 该图像经过二值化处理之后,剩下两个值:黑色-&255,白色-&0,我们可以通过算法来找出其中黑色是由多少个连通域所组成,并且给各个连通域分别上色。该图也作为本文的示例图。
& & 连通域搜索算法是本文的核心,本文参照上面文章提到的二次搜索算法,提出了一个可以一次遍历出结果的算法,该算法的流程如下(单看流程可能会感觉很混乱,建议主要看代码,并以此为提纲):
& & 1.遍历图像,一旦碰到像素值不为0的像素进入第2步
& & 2.判断该像素是不是属于一个连通域,如果不属于任何已知连通域进入第3(a)步,如果属于一个已知连通域进入第3(b)步
& & 3(a).将连通域计数加1,并将该计数值赋给此像素点作为连通域的标志,同时把该值记录到一个映射关系数组的相应位置,如a[3]=3。回到第1步继续。
& & 3(b).将该像素值和其上下左右的像素值不为0的像素的值进行比较,找其中的最小值赋值给所有非零的像素作为连通域标志,并调整映射关系数组。回到第1步继续。
& & 4.经过上面的遍历,映射关系数组记录了修改过的图像的连通域信息,然而该信息比较杂乱,同一个连通域可能分别被几个值所标志,通过遍历该数组可以调整这个情况,将同一个连通域的映射值用其最小值进行标志。
& & 5.遍历图像结合映射关系数组对连通域值进行调整,经过这一步同一连通域将据有相同的像素值
& & 6.根据相同的像素值对同一连通域进行上色工作
& & 实现代码如下(为了方便使用了OPENCV,然而并没有用到其很多复杂的功能,只要稍作修改便可以用来直接处理图像的RGB数据区):
#include &time.h&
#include &opencv2/opencv.hpp&
#include &opencv2/core/core.hpp&//OpenCV包含头文件
#include &opencv2/highgui/highgui.hpp&
#include &vector&//容器头文件
int valuearray[1000] = { 0 };//记录连通域数值对应关系
class colorobj
vector&colorobj&//收集需要上色的灰度对象
bool equal255or0(int &value)//判断元素是否等于255或者0
if (value == 255 || value == 0)
void setvalue(int &value, int &minimun)//设置配对值
if (value != 0)
if (valuearray[value] & minimun)
valuearray[value] =
void compare(int &value, int &minimun)//比较大小
if (value != 0)
if (minimun &= value)
Scalar GetRandomColor()//彩色显示
uchar r = 255 * (rand() / (1.0 + RAND_MAX));
uchar g = 255 * (rand() / (1.0 + RAND_MAX));
uchar b = 255 * (rand() / (1.0 + RAND_MAX));
return cv::Scalar(b, g, r);
void main()
long time = clock();//记录计算时间
Mat Image = cv::imread(&test.bmp&, 0);//读入图像,并将图像灰度化
threshold(Image, Image, 50, 255, CV_THRESH_BINARY_INV);//二值化图像
imshow(&a&, Image);
int contourmark = 1; //连通域标志
Mat IntI//图片对象,用以将图像的像素变量从uchar转为int,以防止后面标志位大于255程序无法工作的情况
Image.convertTo(IntImage, CV_32SC1);//将图像像素变量转为int
//遍历图像,搜索连通域
for (int Y = 1; Y & IntImage.rows - 1; Y++)//遍历图像,Y为行,X为列
for (int X = 1; X & IntImage.cols - 1; X++)
if (IntImage.at&int&(Y, X) != 0)//记住这里是先行后列
//如果不属于任何一个连通域
if (equal255or0(IntImage.at&int&(Y - 1, X)) && //上方元素
equal255or0(IntImage.at&int&(Y + 1, X)) && //下方元素
equal255or0(IntImage.at&int&(Y, X - 1)) && //左方元素
equal255or0(IntImage.at&int&(Y, X + 1)))//右方元素
valuearray[contourmark] =
IntImage.at&int&(Y, X) =
if (IntImage.at&int&(Y - 1, X) == 255)
IntImage.at&int&(Y - 1, X) =
if (IntImage.at&int&(Y + 1, X) == 255)
IntImage.at&int&(Y + 1, X) =
if (IntImage.at&int&(Y, X - 1) == 255)
IntImage.at&int&(Y, X - 1) =
if (IntImage.at&int&(Y, X + 1) == 255)
IntImage.at&int&(Y, X + 1) =
contourmark++;
else//已经属于某一个连通域
int getminimum = IntImage.at&int&(Y, X);
//取得上下左右最小的标志位
compare(IntImage.at&int&(Y - 1, X), getminimum);
compare(IntImage.at&int&(Y + 1, X), getminimum);
compare(IntImage.at&int&(Y, X - 1), getminimum);
compare(IntImage.at&int&(Y, X + 1), getminimum);
//将最小的标志位赋值给目标
setvalue(IntImage.at&int&(Y, X), getminimum);
setvalue(IntImage.at&int&(Y - 1, X), getminimum);
setvalue(IntImage.at&int&(Y + 1, X), getminimum);
setvalue(IntImage.at&int&(Y, X - 1), getminimum);
setvalue(IntImage.at&int&(Y, X + 1), getminimum);
for (size_t i = 1; i & i++)//将同一个连通域的对象映射表调整好,做完这一步映射表制作完成
//printf(&%d %d\n&, i, valuearray[i]);
valuearray[i] = valuearray[valuearray[i]];
for (int Y = 1; Y & IntImage. Y++)//根据映射表对图像像素进行重新赋值
for (int X = 1; X & IntImage. X++)
if (IntImage.at&int&(Y, X) != 0)
IntImage.at&int&(Y, X) = valuearray[IntImage.at&int&(Y, X)];
for (int j = 1; j & j++)//获得需要上色的对象值
bool dopush =
for (int i = 0; i & setcolor.size(); i++)
if (setcolor[i].value == valuearray[j])
if (dopush == true)
mycolorobj.value = valuearray[j];
mycolorobj.mycolor = GetRandomColor();
setcolor.push_back(mycolorobj);
//彩色显示
Mat colorLabelI
colorLabelImg.create(IntImage.rows, IntImage.cols, CV_8UC3);
colorLabelImg = Scalar::all(255);//初始化,将待显示图片的背景设置为白色
for (int Y = 0; Y & IntImage. Y++)
for (int X = 0; X & IntImage. X++)
if (IntImage.at&int&(Y, X) != 0)
for (int i = 0; i & setcolor.size(); i++)
if (IntImage.at&int&(Y, X) == setcolor[i].value)
colorLabelImg.at&Vec3b&(Y, X)[0] = setcolor[i].mycolor[0];
colorLabelImg.at&Vec3b&(Y, X)[1] = setcolor[i].mycolor[1];
colorLabelImg.at&Vec3b&(Y, X)[2] = setcolor[i].mycolor[2];
printf(&标志位值%d\n&, contourmark);
printf(&花费时间%dms\n&, clock() - time);
imshow(&colorLabelImg&, colorLabelImg);
waitKey(0);
& & 处理的结果如下:
& & OK,大功告成,转载记得指明出处:原文地址
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有多连通域Voronoi图的算法及数据存储_论文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
您可以上传图片描述问题
联系电话:
请填写真实有效的信息,以便工作人员联系您,我们为您严格保密。
多连通域Voronoi图的算法及数据存储
||文档简介
中国最大最早的专业内容网站|
总评分0.0|
&&通​过​对​两​种​主​要​单​连​通​域​V​o​r​o​n​o​i​图​算​法​的​剖​析​,​改​进​初​始​化​算​法​和​数​据​结​构​,​得​到​便​于​工​程​应​用​的​单​连​通​域​V​o​r​o​n​o​i​算​法​,​并​将​波​阵​面​传​播​的​思​想​扩​展​应​用​到​求​多​连​通​域​的​V​o​r​o​n​o​i​图​,​形​成​新​的​多​连​通​域​问​题​算​法​,​从​而​解​决​了​工​程​中​特​别​是​分​层​制​造​技​术​中​V​o​r​o​n​o​i​图​应​用​的​一​般​性​问​题​.
试读已结束,如果需要继续阅读或下载,敬请购买
定制HR最喜欢的简历
你可能喜欢[duō lián tōng yù]
multiply connected region
医学专业英语翻译 物理专业词汇英语翻译(M) - ... ...
multiplier 倍增器
multiply connected region 多连通域
multiply periodic motion 多重周期运动 ...
基于24个网页-
multiply connected domain
翻译词典|在线词典:在中国最大翻译语料库(中国译典... ...
multiply connected region〖数〗多连通区域
multiply connected domain多连通域
To multiply five By three以三乘五 ...
基于22个网页-
multiple channel area
基于1个网页-
multi-connected domains
基于1个网页-
multiply connected domains
Multi-connected Region Graph
Multi-connected Voronoi diagram
multiple connected planar region
- 引用次数:1
参考来源 -
multiply connected region
&2,447,543篇论文数据,部分数据来源于
首先利用一组多阈值分割结果建立连通域生长树。
First, the connected region growing tree is established from a set of thresholded images with different thresholds.
本文发展的分析方法,为求解复杂多连通域的平面弹性问题提供了一条有效途径。
The method developed in this paper offers an effective method for solving the plane elastic problems on complex multiply connected region.
针对三维接触问题的特点,提出了一套网格自动划分和单元生成的方法和技术,可应用于多连通域结构。
The paper deals with an automatic grid and element generation method for three-dimensional contact problems. The method can be applied in the multi-connection area.
复平面上的一个区域B,如果在其中任作一条简单闭曲线,而曲线的内部不总属于B,就称为多连通域。
以上来源于:
$firstVoiceSent
- 来自原声例句
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!> 问题详情
指出下列不等式所确定的区域,并指明它是有界的还是无界的?是单连通域还是多连通域?
悬赏:0&答案豆
提问人:匿名网友
发布时间:
指出下列不等式所确定的区域,并指明它是有界的还是无界的?是单连通域还是多连通域?请帮忙给出正确答案和分析,谢谢!
论文写作技巧
我有更好的答案
相关考试课程
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……

我要回帖

更多关于 单连通域 的文章

 

随机推荐