A. 如何判断一个区域是否是连通的 matlab
matlab函数_连通区域
1、 matlab函数bwareaopen──删除小面积对象
格式:BW2 = bwareaopen(BW,P,conn)
作用:删除二值图像BW中面积小于P的对象,默认情况下使用8邻域。
算法:
(1)Determine the connected components.
L = bwlabeln(BW, conn);
(2)Compute the area of each component.
S = regionprops(L, 'Area');
(3)Remove small objects.
bw2 = ismember(L, find([S.Area] >= P));
2、matlab函数bwarea──计算对象面积
格式:total = bwarea(BW)
作用:估计二值图像中对象的面积。
注:该面积和二值图像中对象的像素数目不一定相等。
3、matlab函数imclearborder──边界对象抑制
格式:IM2 = imclearborder(IM,conn)
作用:抑制和图像边界相连的亮对象。若IM是二值图,imclearborder将删除和图像边界相连的对象。默认情况conn=8。
注:For grayscale images, imclearborder tends to rece the overall intensity level in addition to suppressing border structures.
算法:
(1)Mask image is the input image.
(2)Marker image is zero everywhere except along the border, where it equals the mask image.
4、matlab函数bwboundaries──获取对象轮廓
格式:B = bwboundaries(BW,conn)(基本格式)
作用:获取二值图中对象的轮廓,和OpenCV中cvFindContours函数功能类似。B是一个P×1的cell数组,P为对象个数,每个cell 是Q×2的矩阵,对应于对象轮廓像素的坐标。
5、matlab函数imregionalmin──获取极小值区域
格式:BW = imregionalmin(I,conn)
作用:寻找图像I的极小值区域(regional maxima),默认情况conn=8。
Regional minima are connected components of pixels with a constant intensity value, and whose external boundary pixels all have a higher value.
6、matlab函数bwulterode──距离变换的极大值
格式:BW2 = bwulterode(BW,method,conn)
作用:终极腐蚀。寻找二值图像BW的距离变换图的区域极大值(regional maxima)。用于距离变换的距离默认为euclidean,连通性为8邻域。
7、regionprops统计被标记的区域的面积分布,显示区域总数。
函数regionprops语法规则为:STATS = regionprops(L,properties)
该函数用来测量标注矩阵L中每一个标注区域的一系列属性。
L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推。
返回值STATS是一个 长度为max(L(:))的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。
Properties可以是由逗号分割的字符串行表、包含字符 串的单元数组、单个字符串'all'或者'basic'。如果properties等于字符串'all',则表4.1中的度量数据都将被计算;如果properties等于字符串'basic',则属性:'Area','Centroid'和'BoundingBox'将被计算。表1就是所有有效的属性字符串。
表1 属性字符串行表----度量图像区域的属性或功能
'Area' 图像各个区域中像素总个数
'BoundingBox' 包含相应区域的最小矩形
'Centroid' 每个区域的质心(重心)
'MajorAxisLength' 与区域具有相同标准二阶中心矩的椭圆的长轴长度(像素意义下)
'MinorAxisLength' 与区域具有相同标准二阶中心矩的椭圆的短轴长度(像素意义下)
'Eccentricity' 与区域具有相同标准二阶中心矩的椭圆的离心率(可作为特征)
'Orientation' 与区域具有相同标准二阶中心矩的椭圆的长轴与x轴的交角(度)
'Image' 与某区域具有相同大小的逻辑矩阵
'FilledImage' 与某区域具有相同大小的填充逻辑矩阵
'FilledArea' 填充区域图像中的on像素个数
'ConvexHull' 包含某区域的最小凸多边形
'ConvexImage' 画出上述区域最小凸多边形
'ConvexArea' 填充区域凸多边形图像中的on像素个数
'EulerNumber' 几何拓扑中的一个拓扑不变量——欧拉数
'Extrema' 八方向区域极值点
'EquivDiameter' 与区域具有相同面积的圆的直径
'Solidity' 同时在区域和其最小凸多边形中的像素比例
'Extent' 同时在区域和其最小边界矩形中的像素比例
'PixelIdxList' 存储区域像素的索引下标
'PixelList' 存储上述索引对应的像素坐标
B. matlab对二值图像标记,求连通区域的周长,面积。matlab具体代码
二值图像中背景标记为0,联通域标记为1,二值图像记为a
面积的求法:
k=regionprops(a,'Area'); %k得到的是一个structure结构
S=k.Area;
周长求法:
L=length(find(bwperim(a,4)==1));
%bwperim是求图像联通域边界区,对标记边界的1进行计数。
ps:可以好好看下regionprops的用法,形态学方面的有一些很有用的处理。
C. java代码怎么实现计算图像二值连通区域的质心
一:几何距(Geometric Moments)知识与质心寻找原理
1. Image Moments是图像处理中非常有用的算法,可以用来计算区域图像的质心,方向等几何特性,同时Mpq的高阶具有旋转不变性,可以用来实现图像比较分类,正是因为Moments有这些特性,很多手绘油画效果也会基于该算法来模拟实现。它的数学表达为:
它的低阶M00,M01, M10可以用来计算质心,中心化以后M11,M02,M20可以用来计算区域的方向/角度
2. 什么是质心
就是通过该点,区域达到一种质量上的平衡状态,可能物理学上讲的比较多,简单点的说就是规则几何物体的中心,不规则的可以通过挂绳子的方法来寻找。
二:算法流程
1. 输入图像转换为二值图像
2. 通过连通组件标记算法找到所有的连通区域,并分别标记
3. 对每个连通区域运用计算几何距算法得到质心
4. 用不同颜色绘制连通区域与质心,输出处理后图像
三:算法效果
左边为原图, 右边蓝色为连通组件标记算法处理以后结果,白色点为质心
四:关键代码解析
1. 计算几何距算法代码
doublem00 = moments(pixels, width, height, 0, 0);
doublexCr = moments(pixels, width, height, 1, 0) / m00;// row
doubleyCr = moments(pixels, width, height, 0, 1) / m00;// column
return new double[]{xCr, yCr};
D. 连通区域标记算法概述
数字图像处理中,像素邻接关系主要体现在四邻域、D 邻域与八邻域三种。图像中的连通区域由相同像素值且相邻的像素组成,连通区域标记算法的任务则是给图像中所有连通区域赋予不同符号。
以图示为例,下图.a 展示原始二值图像,下图.b 根据四邻居规则标记连通区域,下图.c 则是利用八邻域规则。从图中可见,四邻域规则标记出四个独立区域,而八邻域规则则为三个。此标记算法在二值化图像上操作,旨在将感兴趣前景与背景分离,为后续图像处理提供基础。其应用领域广泛,如光学字符识别中的字符分割,医学图像处理中目标提取,视频图像中前景目标分割提取等。
连通区域标记算法分为两种常用类型:基于 Seed-Filling 的算法与基于 Two-Pass 的算法。Seed-Filling 算法只需一次遍历图像,效率较高,而 Two-Pass 算法需遍历两次,运行时间较长。本节将简要介绍 Seed-Filling 算法。
Seed-Filling 算法核心思想:选取图像中一点作为种子,依据指定邻接关系将满足条件的像素归入集合中。遍历结束后,集合内的像素点构成同一连通区域,标记为label。算法具体步骤如下:
1. 按照从左到右、从上至下的顺序遍历图像中的每个像素点。
2. 若像素点已遍历,则继续遍历,否则跳至步骤3。
3. 将该像素点设为种子,并将其加入标记为 label 的集合中,然后使用指定邻域关系将符合条件的像素压入栈中。
4. 弹出栈顶像素,将其加入集合中,同时使用邻域关系将符合条件的像素压入栈中。
5. 重复步骤4,直至栈空,此时找到一个连通区域,其类别标记为label。
6. 重复步骤2直至遍历完整幅图像。