三九宝宝网宝宝百科宝宝知识

如何用区域生长法实现图像分割

05月19日 编辑 39baobao.com

[如何用jquery插件实现生日日期选择]maxAge : 设置“年”下拉表中年的个数,这里设置为10则显示最近10年的(前提是开始“年”必须为今年2016),默认值为120。 minAge : 与maxAge相对,如果当前年为2016年,并且设置了minAge...+阅读

区域生长法图像分割是直接根据像素的相似性和连通性来对图像进行聚类的算法。基本原理是,给出若干种子点,然后依次对这些种子点进行如下操作,直到种子点集合为空:判断种子点四邻域或八邻域的像素点是否和种子点相似(灰度相似或其他测度相似),如果相似则将该点加入种子点集合,否则不作处理。

该算法原理很简单,但在数据结构的组织上却需要技巧,本文说明一种简易的数据组织方式实现该算法。

如上图所示,左图为一幅W*H大小的图像示意图,利用区域生长法图像分割算法,该图像被分割(聚类)为7块;右图为相应的数据结构,图像分割的结果属于图像空间数据,其实就是一系列的像素点坐标数组或与像素点坐标直接关联的属性数组如FLAG的数组等,这个数组的维度一定是W*H,而分割结果体现在数组元素的排列顺序:同一类别的元素连续存储。然而类别的界限无法用该数组表明,而只能用另外一个描述数组,这里我们称之为图像空间数据的“元数据”数据,这个数组的有效维度为空间数据的类别数,即7,每个元素代表的是空间数据数组中每个类别的元素个数,其实也就相应地表明了每个类别的指针位置。

我弄了个matlab区域生长法的程序可是怎么弄都有问题谁帮我改下

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%区域生长法

A0=imread('1.jpg');%读入图像

seed=[100,220];%选择起始位置

thresh=15;%相似性选择阈值

A=rgb2gray(A0);

%灰度化

A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]);

A=double(A); %将图像灰度化

B=A;

%将A赋予B

[r,c]=size(B);

%图像尺寸 r为行数,c为列数

n=r*c;

%计算图像所包含点的个数

pixel_seed=A(seed(1),seed(2));

%原图起始点灰度值

q=[seed(1) seed(2)];

%q用来装载起始位置

top=1;

%循环判断flag

M=zeros(r,c);

%建立一个与原图形同等大小的矩阵

M(seed(1),seed(2))=1;

%将起始点赋为1,其余为0

count=1;

%计数器

while top~=0

%循环结束条件

r1=q(1,1);

%起始点行位置

c1=q(1,2);

%起始点列位置

p=A(r1,c1);

%起始点灰度值

dge=0;

for i=-1:1

%周围点的循环判断

for j=-1:1

if r1+i<=r & r1+i>0 & c1+j<=c & c1+j>0

%保证在点周围范围之内

if abs(A(r1+i,c1+j)-p)<=thresh & M(r1+i,c1+j)~=1

%判定条件?

top=top+1;

%满足判定条件top加1,top为多少,则q的行数有多少行

q(top,:)=[r1+i c1+j];

%将满足判定条件的周围点的位置赋予q,q记载了满足判定的每一外点

M(r1+i,c1+j)=1;

%满足判定条件将M中相对应的点赋为1

count=count+1;

%统计满足判定条件的点个数,其实与top此时的值一样

B(r1+i,c1+j)=1;

%满足判定条件将B中相对应的点赋为1

end

if M(r1+i,c1+j)==0;

%如果M中相对应点的值为0将dge赋为1,也是说这几个点不满足条件

dge=1;

%将dge赋为1

end

else

dge=1;

%点在图像外将dge赋为1

end

end

end

%此时对周围几点判断完毕,在点在图像外或不满足判定条件则将dge赋为1,满足条件dge为0

if dge~=1

%最后判断的周围点(i=1,j=1)是否满足条件,如dge=0,满足。dge=1,不满足。

B(r1,c1)=A(seed(1),seed(2));

%将原图像起始位置灰度值赋予B

end

if count>=n

%如果满足判定条件的点个数大于等于n

top=1;

end

q=q(2:top,:);

top=top-1;

end

subplot(1,2,1),imshow(A,[]);

subplot(1,2,2),imshow(B,[]);

区域增长算法C实现

这个不是跟区域填充差不多么? 如果每次都要逐个单元扫描 不是卡死? 你可以去参考下区域填充算发 虽然那个算法也不怎么样 不过至少每次寻找新点时候 不用逐个重新扫描; 你是想做识别么?是逐个扫描一次..问题当标识好之后,,当你选择下一个种子点的时候,又要重新扫描.这样是很麻烦;你可以采用区域填充..他首先确定一个种子点 然后他由这个种子点出发.当走到一路尽头的时候就会返回 延下一个方向走..这样就避免了逐点扫描例如有这么一个方块A B C D E FG H I J K LM O P Q R ST U V W X Y假如冲 Q开始先左走 PQ关系小 则 P跟Q一样 依次走到M 每一个都标记了 当然其中也有些不符合要求 然后M开始往上走....当走到一个点发现他四周所有的位置都被标记 而退回上一个点 继续下一个方向..依次走完 这就是一个递归的方法,,而递归本质也是栈的使用(跟4皇后求法 也有点类似)...

图像分割的分割方法

灰度阈值分割 法是一种最常用的并行区域技术,它是图像分割中应用数量最多的一类。阈值分割方法实际上是输入图像f到输出图像g的如下变换: 其中,T为阈值,对于物体的图像元素g(i,j)=1,对于背景的图像元素g(i,j)=0。 由此可见,阈值分割算法的关键是确定阈值,如果能确定一个合适的阈值就可准确地将图像分割开来。阈值确定后,将阈值与像素点的灰度值逐个进行比较,而且像素分割可对各像素并行地进行,分割的结果直接给出图像区域。 阈值分割的优点是计算简单、运算效率较高、速度快。在重视运算效率的应用场合(如用于硬件实现),它得到了广泛应用。 人们发展了各种各样的阈值处理技术,包括全局阈值、自适应阈值、最佳阈值等等。 全局阈值是指整幅图像使用同一个阈值做分割处理,适用于背景和前景有明显对比的图像。它是根据整幅图像确定的:T=T(f)。但是这种方法只考虑像素本身的灰度值,一般不考虑空间特征,因而对噪声很敏感。常用的全局阈值选取方法有利用图像灰度直方图的峰谷法、最小误差法、最大类间方差法、最大熵自动阈值法以及其它一些方法。 在许多情况下,物体和背景的对比度在图像中的各处不是一样的,这时很难用一个统一的阈值将物体与背景分开。这时可以根据图像的局部特征分别采用不同的阈值进行分割。实际处理时,需要按照具体问题将图像分成若干子区域分别选择阈值,或者动态地根据一定的邻域范围选择每点处的阈值,进行图像分割。这时的阈值为自适应阈值。 阈值的选择需要根据具体问题来确定,一般通过实验来确定。对于给定的图像,可以通过分析直方图的方法确定最佳的阈值,例如当直方图明显呈现双峰情况时,可以选择两个峰值的中点作为最佳阈值。 图1(a)和(b)分别为用全局阈值和自适应阈值对经典的Lena图像进行分割的结果。 区域生长和分裂合并法是两种典型的串行区域技术,其分割过程后续步骤的处理要根据前面步骤的结果进行判断而确定。 区域生长 区域生长的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素(根据某种事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。将这些新像素当作新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来。这样一个区域就长成了。 区域生长需要选择一组能正确代表所需区域的种子像素,确定在生长过程中的相似性准则,制定让生长停止的条件或准则。相似性准则可以是灰度级、彩色、纹理、梯度等特性。选取的种子像素可以是单个像素,也可以是包含若干个像素的小区域。大部分区域生长准则使用图像的局部性质。生长准则可根据不同原则制定,而使用不同的生长准则会影响区域生长的过程。区域生长法的优点是计算简单,对于较均匀的连通目标有较好的分割效果。它的缺点是需要人为确定种子点,对噪声敏感,可能导致区域内有空洞。另外,它是一种串行算法,当目标较大时,分割速度较慢,因此在设计算法时,要尽量提高效率。 区域分裂合并 区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标提取。分裂合并差不多是区域生长的逆过程:从整个图像出发,不断分裂得到各个子区域,然后再把前景区域合并,实现目标提取。分裂合并的假设是对于一幅图像,前景区域由一些相互连通的像素组成的,因此,如果把一幅图像分裂到像素级,那么就可以判定该像素是否为前景像素。当所有像素点或者子区域完成判断以后,把前景区域或者像素合并就可得到前景目标。 在这类方法中,最常用的方法是四叉树分解法(如图3所示)。设R代表整个正方形图像区域,P代表逻辑谓词。基本分裂合并算法步骤如下:

(1)对任一个区域,如果H(Ri)=FALSE就将其分裂成不重叠的四等份;

(2)对相邻的两个区域Ri和Rj,它们也可以大小不同(即不在同一层),如果条件H(Ri∪Rj)=TRUE满足,就将它们合并起来。

(3)如果进一步的分裂或合并都不可能,则结束。 分裂合并法的关键是分裂合并准则的设计。这种方法对复杂图像的分割效果较好,但算法较复杂,计算量大,分裂还可能破坏区域的边界。 图像分割的一种重要途径是通过边缘检测,即检测灰度级或者结构具有突变的地方,表明一个区域的终结,也是另一个区域开始的地方。这种不连续性称为边缘。不同的图像灰度不同,边界处一般有明显的边缘,利用此特征可以分割图像。 图像中边缘处像素的灰度值不连续,这种不连续性可通过求导数来检测到。对于阶跃状边缘,其位置对应一阶导数的极值点,对应二阶导数的过零点(零交叉点)。因此常用微分算子进行边缘检测。常用的一阶微分算子有Roberts算子、Prewitt算子和Sobel算子,二阶微分算子有Laplace算子和Kirsh算子等。在实际中各种微分算子常用小区域模板来表示,微分运算是利用模板和图像卷积来实现。这些算子对噪声敏感,只适合于噪声较小不太复杂的图像。 由于边缘和噪声都是灰度不连续点,在频域均为高频分量,直接采用微分运算难以克服噪...

以下为关联文档:

如何用excel做函数图像绘制函数图象做教学工作的朋友们一定会遇到画函数曲线的问题吧!如果想快速准确地绘制一条函数曲线,可以借助EXCEL的图表功能,它能使你画的曲线既标准又漂亮。你一定会问,是不是...

如何用Excel语音校对功能实现数据核对单位经常用Excel来 统计分点压力数据,每次统计完成后还要对上百个中低压数据进行校对。如果用眼睛校对,很容易出差错。而使用Excel的“文本到语音”功能,让软件自动报 数据不仅...

如何用VB实现串行通信收藏推荐 1串行通讯原理 计算机一般提供了一个或多个串行端口。在标准的PC中,鼠标通常被连接到coMI端口、调制解调器可能连接到CO刑口等等。串行端口提供了计算机与外部串行...

如何用Arm汇编语言实现几个数的排序ORG 09B0H QUE: MOV R3,#50H QUE1: MOV A,R3 MOV R0,A MOV R7,#0AH CLR 00H MOV A,R0 Q12: INC R0 MOV R2,A CLR C MOV 22H,R0 CJNE A,22H,Q13 SETB C Q13: MOV A,R2 JC Q11...

EXCEL中如何用VBA实现方法/步骤如下: 1、双击打开桌面的EXCEL; 2、单击右上角的OFFICE图标,找到EXCEL选项,单击打开; 3、勾选在功能区显示“开发工具”选项卡,单击确定按钮完成修改。 4、单击菜单栏...

vb中如何用控件数组实现动画急需!Private Sub Command1_Click() Timer1.Enabled = True End Sub Private Sub Command2_Click() Timer1.Enabled = False End Sub Private Sub Command3_Click() End End Sub...

请问甲醛和高锰酸钾消毒如何用法甲醛(HCHO)其主要性状是挥发慢,刺激性强,熏蒸消毒需一定的温度及相对湿度。高锰酸钾(KMnO4)其主要性状是强氧化剂,性质稳定。消毒方法采用HCHO与KMnO4混合配置灭菌。甲醛和高锰酸钾...

如何用一台电脑实现网络隔离和安全管控如何用一台电脑实现网络隔离和安全管控,什么网管软件可以对设备能够全面管控深度管控:由于工作性质的不同,很多企业是不允许员工上外网的,一旦有需求上网查找资料,必须要在指定的...

如何用人工捕杀法防治园林害虫如何用人工捕杀法防治园林害虫,园艺基础知识是什么哪:人工捕杀成虫适用于虫体较大、有假死性和迁移速度较慢的害虫。如臭椿沟眶象成虫羽化后,捕捉上树取食、交配产卵的成虫。双...

推荐阅读
图文推荐