Matlab程序遗传算法大津法区域生长法迭代法分割图像
- 格式:doc
- 大小:22.00 KB
- 文档页数:2
大津法matlab大津法是一种图像二值化的方法,它能够自动确定合适的阈值进行图像的二值化处理。
以下是在Matlab中实现大津法的步骤:Step 1:读入待处理的灰度图像。
Step 2:计算图像的直方图。
Step 3:初始化最佳阈值为0,最大类间方差为0。
Step 4:计算每个可能的阈值的类间方差。
Step 5:找到使类间方差最大化的阈值。
Step 6:使用最佳阈值将图像二值化。
Matlab代码实现:% Step 1:读入待处理的灰度图像I = imread('image.jpg'); % 读入图像Igray = rgb2gray(I); % 将图像转化为灰度图% Step 2:计算图像的直方图counts = imhist(Igray); % 计算灰度直方图% Step 3:初始化最佳阈值为0,最大类间方差为0bestT = 0; % 最佳阈值maxVar = 0; % 最大类间方差% Step 4:计算每个可能的阈值的类间方差totalPixels = numel(Igray); % 总像素数for threshold = 1:255% 计算类1(低灰度)的像素个数和概率counts1 = sum(counts(1:threshold));p1 = counts1 / totalPixels;% 计算类2(高灰度)的像素个数和概率counts2 = sum(counts(threshold+1:end));p2 = counts2 / totalPixels;% 计算类1和类2的均值mean1 = sum((0:threshold-1) .* counts(1:threshold)) / counts1;mean2 = sum((threshold:255) .*counts(threshold+1:end)) / counts2;% 计算类间方差varB = p1 * p2 * (mean1 - mean2)^2;% 更新最佳阈值和最大类间方差if varB > maxVarmaxVar = varB;bestT = threshold;endend% Step 5:找到使类间方差最大化的阈值% Step 6:使用最佳阈值将图像二值化Ibinary = imbinarize(Igray, bestT/255); % 将图像二值化imshow(Ibinary); % 显示处理后的图像以上就是在Matlab中实现大津法的步骤和代码实现。
matlab区域⽣长算法⽣成⼆值图像边界区域function ret=growseed()%=====区域⽣长算法========%input :⼆值图像数据%output:边界点⼆值图像数据global I;global M;global N;global Y;global T;global newy;global newx;%==边界点x,y坐标%获取多张图⽚的⼆值数据tempI=draw(); %tempI 36*45*numbertotalcount=length(tempI(1,1,:));wide=length(tempI(:,1,1));%36high=length(tempI(1,:,1));%45result=zeros(wide,high,count);for k=1:countI=tempI(:,:,k);% figure,imshow(I),title('原始图像')I=double(I);[M,N]=size(I);[seedx,seedy]=searchseed(I);Y=zeros(M,N); %作⼀个全零与原图像等⼤的图像矩阵Y,作为输出图像矩阵T=zeros(M,N);%标记点。
newx=0;newy=0;calseed(seedx,seedy);figure,imshow(Y);% if k>1&&k<count% result(:,:,k)=Y;% figure,imshow(Y);% else% result(:,:,k)=T;% % imshow(T);% % figure,imshow(T);% endendret=result;endfunction calseed(seedx,seedy)global M;global N;global Y;global I;global newx;global newy;global T;for i = -1 : 1for j = -1 : 1newseedx = seedx + i;newseedy = seedy+ j;%⽣长准则:判断⽣长点8邻域内像素的各⾃灰度值是否与⽣长点所在像素灰度值相等if newseedx> 0 && newseedx <= M && newseedy > 0 && newseedy <= N &&T(newseedx,newseedy)==0&&I(newseedx,newseedy)==1 T(newseedx,newseedy)=1;if isequal(newseedx,newseedy)==1calseed(newseedx,newseedy);elseY(newx,newy)=1;%set边界点值为1endendendendendfunction ret=isequal(x,y)%====判断点的领域是否相等%===输⼊1个点的x,y坐标%==返回1 相等global I;global newx;global newy;global M;global N;ret=1;tag=0;for i = -1 : 1if tag==0for j = -1 : 1if x+i> 0 && x+i <= M && y+j > 0 && y+j <= Nif I( x+i,y+j)==0ret=0;tag=1;newx=x+i;newy=y+j;endendendendendendfunction [x,y]=searchseed(I)%=========寻找种⼦点===== %Input:⼀张⼆值数据的图⽚%Output:返回种⼦点的x,y坐标%======求数据为1的质⼼==== [M,N]=size(I);corx=0;cory=0;count=0;for i=1:Mfor j=1:Nif I(i,j)==1corx=corx+i;cory=cory+j;count=count+1;endendendx=round(corx/count);y=round(cory/count);end处理结果。
matlab 分割算法-回复Matlab 分割算法Matlab 是一种强大的数值计算和科学与工程数据分析的编程环境。
在这个环境中,有许多用于图像处理和计算机视觉的函数和工具箱。
分割算法是其中一个关键方面,它可以在图像中识别和提取出感兴趣的部分。
分割算法的基本目标是将图像分成若干个区域,每个区域内的像素具有相似的特征,例如颜色、纹理或灰度。
这个过程有助于图像理解、对象识别和跟踪,以及更高级的计算机视觉任务。
在Matlab 中,有几种常用的图像分割算法,例如阈值法、区域生长法和基于边缘的算法。
下面将一步一步详细介绍这些算法的原理和实现步骤。
1. 阈值法:阈值法是最简单的图像分割方法之一。
它基于像素灰度值的阈值来将图像分为两个区域:一个是小于或等于阈值的区域,另一个是大于阈值的区域。
在Matlab 中,这个算法可以使用`imbinarize` 函数来实现。
首先需要选择合适的阈值,可以通过Otsu 自适应阈值法或试验法来确定。
2. 区域生长法:区域生长法是基于像素相似性的图像分割方法。
它从一个或多个种子像素开始,通过选择相邻像素并比较其与当前区域的相似度来逐步扩展区域。
这个算法在Matlab 中可以使用`regiongrowing` 函数来实现。
首先需要选择适当的种子点,并设定相似度的判别条件。
3. 基于边缘的算法:基于边缘的算法是利用图像中物体边缘的特征进行分割的方法。
常见的基于边缘的算法包括Canny 边缘检测算法和边缘检测器。
在Matlab 中,可以使用`edge` 函数来检测边缘,然后使用`imfill` 函数填充边缘内的区域,从而实现分割。
除了这些基本的算法,Matlab 中还有其他更高级的图像分割算法可供选择,如基于图的分割、基于聚类的分割和基于深度学习的分割。
其中,基于深度学习的分割算法如U-Net 和Mask R-CNN 在近年来非常受关注。
总结起来,Matlab 提供了丰富的图像分割算法和工具,可以根据具体需求选择合适的方法。
Matlab实现区域生长算法(南京航空航天大学机电学院机械工程系,南京2016年11月1日)摘要:图像分割不仅是图像处理领域的一个经典的研究主题,也是图像处理技术的热点和焦点。
随着计算机处理技术的发展,图像分割算法引起研究人员越来越多的关注。
本文提出了基于传统的种子区域生长算法的基础上形成一种新的图像自动分割区域的方法。
算法的实现主要基于Matlab编程实现。
关键词:图像分割,种子区域生长算法,Matlab一、引言区域生长是一种古老的图像分割方法,最早的区域生长图像分割方法是由Levine等人提出的。
该方法一般有两种方式,一种是先给定图像中要分割的目标物体内的一个小块或者说种子区域(seed point),再在种子区域基础上不断将其周围的像素点以一定的规则加入其中,达到最终将代表该物体的所有像素点结合成一个区域的目的;另一种是先将图像分割成很多的一致性较强,如区域内像素灰度值相同的小区域,再按一定的规则将小区域融合成大区域,达到分割图像的目的,典型的区域生长法如T. C. Pong等人提出的基于小面(facet)模型的区域生长法,区域生长法固有的缺点是往往会造成过度分割,即将图像分割成过多的区域。
区域生长是一种串行区域分割的图像分割方法,其优点是基本思想相对简单,通常能将具有相同特征的联通区域分割出来,并能提供很好的边界信息和分割结果。
在没有先验知识可以利用时,可以取得最佳的性能,可以用来分割比较复杂的图像,如自然景物。
但是,区域生长法是一种迭代的方法,空间和时间开销都比较大,噪声和灰度不均匀可能会导致空洞和过分割,并在对图像中的阴影效果处理上往往不是很好。
区域生长的基本思想是将具有相似性质的像素集合起来构成区域。
具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素具有相同或相似性质的像素(根据某种事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。
用MATLAB实现遗传算法程序一、本文概述遗传算法(Genetic Algorithms,GA)是一种模拟自然界生物进化过程的优化搜索算法,它通过模拟自然选择和遗传学机制,如选择、交叉、变异等,来寻找问题的最优解。
由于其全局搜索能力强、鲁棒性好以及易于实现并行化等优点,遗传算法在多个领域得到了广泛的应用,包括函数优化、机器学习、神经网络训练、组合优化等。
本文旨在介绍如何使用MATLAB实现遗传算法程序。
MATLAB作为一种强大的数学计算和编程工具,具有直观易用的图形界面和丰富的函数库,非常适合用于遗传算法的实现。
我们将从基本的遗传算法原理出发,逐步介绍如何在MATLAB中编写遗传算法程序,包括如何定义问题、编码、初始化种群、选择操作、交叉操作和变异操作等。
通过本文的学习,读者将能够掌握遗传算法的基本原理和MATLAB编程技巧,学会如何使用MATLAB实现遗传算法程序,并能够在实际问题中应用遗传算法求解最优解。
二、遗传算法基础遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和遗传学机制的优化搜索算法。
它借鉴了生物进化中的遗传、交叉、变异等机制,通过模拟这些自然过程来寻找问题的最优解。
遗传算法的核心思想是将问题的解表示为“染色体”,即一组编码,然后通过模拟自然选择、交叉和变异等过程,逐步迭代搜索出最优解。
在遗传算法中,通常将问题的解表示为一个二进制字符串,每个字符串代表一个个体(Individual)。
每个个体都有一定的适应度(Fitness),适应度越高的个体在下一代中生存下来的概率越大。
通过选择(Selection)、交叉(Crossover)和变异(Mutation)等操作,生成新一代的个体,并重复这一过程,直到找到满足条件的最优解或达到预定的迭代次数。
选择操作是根据个体的适应度,选择出适应度较高的个体作为父母,参与下一代的生成。
常见的选择算法有轮盘赌选择(Roulette Wheel Selection)、锦标赛选择(Tournament Selection)等。
本文使用matlab编了一个程序,实现区域生长。
具体思路是这样的:从灰度图像中取一点作为种子(其实程序略微修改就可实现多个种子点生长,但个人觉得不是很必要),记为P(i,j)。
然后,按P点的上->右->下->左->上……的顺序一层一层地生长出去。
没一层距离P的距离分别记为a,b,c,d,没生长一次,a,b,c,d的值加1,并在下一层生长前判断是否到达图像边界(注意是边界不是边缘),直到生长完成。
话不多说,具体程序如下:%区域生长法分割图像。
每轮生长都是由上到下,从左到右map1=imread('picturename.jpg');[m,n,dep]=size(map1); %行,列,深度值A=zeros(m,n);%灰度化for i=1:mfor j=1:nA(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);endend%灰度化完成,输出灰度图figure(1)imshow(A,[])title('原始灰度图像')B=zeros(m,n); %存储输出图像fprintf('请取一个目标点,结束后回车\n')[x1,y1]=getpts; %获得区域生长起始点i=round(x1); %横坐标取整j=round(y1); %纵坐标取整seed=A(i,j)B(i,j)=255; %种子点提取T=input('请输入生长阈值T(0<T<255)\n')a=1;b=1;c=1;d=1; %四个方向的计数器h=0;while a<i||b<=n-j||c<=m-i||d<j %有一侧没到边界,继续生长%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%以下为上侧生长程序while a<i %a<i,只执行一次(用break来保证)mina=max(j-a,1);maxa=min(j+a,n); %找出两侧端点,此时只需考虑列for k=mina:maxaif k==mina %若为左端点if B(i-a+1,k)==255||B(i-a+1,k+1)==255 %且下或右下存在种子,进行下面的判断if abs(A(i-a,k)-seed)<TB(i-a,k)=255;elseB(i-a,k)=0;endendelse if k==maxa %若为右端点if B(i-a,k-1)==255||B(i-a+1,k-1)==255||B(i-a+1,k)==255 %且左或左下或下存在种子,进行下面的判断if abs(A(i-a,k)-seed)<TB(i-a,k)=255;elseB(i-a,k)=0;endendelse %k不为端点,则需检测左、左下、下和右下ifB(i-a,k-1)==255||B(i-a+1,k-1)==255||B(i-a+1,k)==255||B(i-a+1,k+1)==255 %左下、下或右下存在种子,则进行下面的判断if abs(A(i-a,k)-seed)<TB(i-a,k)=255;elseB(i-a,k)=0;endendendendenda=a+1;break;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%上侧完成一次生长,以下为右侧生长程序while b<=n-jminb=max(i-b,1);maxb=min(i+b,m); %找出两侧端点,此时则只需考虑行for k=minb:maxbif k==minb %若为上端点if B(k,j+b-1)==255||B(k+1,j+b-1)==255 %且左或左下存在种子,进行下面的判断if abs(A(k,j+b)-seed)<TB(k,j+b)=255;elseB(k,j+b)=0;endendelse if k==maxb %若为下端点if B(k-1,j+b)==255||B(k-1,j+b-1)==255||B(k,j+b-1)==255 %且左或左上或上存在种子,进行下面的判断if abs(A(k,j+b)-seed)<TB(k,j+b)=255;elseB(k,j+b)=0;endendelse %k不为端点,则需检测上、左上、左和左下ifB(k-1,j+b)==255||B(k-1,j+b-1)==255||B(k,j+b-1)==255||B(k+1,j+b-1)==255 %左下、下或右下存在种子,则进行下面的判断if abs(A(k,j+b)-seed)<TB(k,j+b)=255;elseB(k,j+b)=0;endendendendendb=b+1;break;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%右侧完成一次生长,以下为下侧生长程序while c<=m-i %a<i,只执行一次(用break来保证)minc=max(j-c,1);maxc=min(j+c,n); %找出两侧端点,此时只需考虑列for k=minc:maxcif k==mina %若为左端点if B(i+c-1,k)==255||B(i+c-1,k+1)==255 %且上或右上存在种子,进行下面的判断if abs(A(i+c,k)-seed)<TB(i+c-1,k)=255;elseB(i+c-1,k)=0;endendelse if k==maxc %若为右端点if B(i+c,k-1)==255||B(i+c-1,k-1)==255||B(i+c-1,k)==255 %且左或左上或上存在种子,进行下面的判断if abs(A(i+c,k)-seed)<TB(i+c,k)=255;elseB(i+c,k)=0;endendelse %k不为端点,则需检测左、左上、上和右上ifB(i+c,k-1)==255||B(i+c-1,k-1)==255||B(i+c-1,k)==255||B(i+c-1,k+1)==255 %左、左上、上或右上存在种子,则进行下面的判断if abs(A(i+c,k)-seed)<TB(i+c,k)=255;elseB(i+c,k)=0;endendendendendc=c+1;break;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%下侧完成一次生长,以下为左侧生长程序while d<jmind=max(i-d,1);maxd=min(i+d,m); %找出两侧端点,此时则只需考虑行for k=mind:maxdif k==mind %若为上端点if B(k,j-d+1)==255||B(k+1,j-d+1)==255 %且右或右下存在种子,进行下面的判断if abs(A(k,j-d)-seed)<TB(k,j-d)=255;elseB(k,j-d)=0;endendelse if k==maxd %若为下端点if B(k-1,j-d)==255||B(k-1,j-d+1)==255||B(k,j-d+1)==255 %且上或右上或右存在种子,进行下面的判断if abs(A(k,j-d)-seed)<TB(k,j-d)=255;elseB(k,j-d)=0;endendelse %k不为端点,则需检测上、右上、右和右下ifB(k-1,j-d)==255||B(k-1,j-d+1)==255||B(k,j-d+1)==255||B(k+1,j-d+1)==255 %上、右上、右或右下存在种子,则进行下面的判断if abs(A(k,j-d)-seed)<TB(k,j-d)=255;elseB(k,j-d)=0;endendendendendd=d+1;break;endh=h+1;endfigure(2)imshow(B,[])title('区域生长分割后图像') 教你如何用WORD文档(2012-06-27 192246)转载▼标签:杂谈1. 问:WORD 里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同?答:分节,每节可以设置不同的页眉。
Matlab程序:遗传算法/大津法/区域生长法/迭代法分割图像区域生长的图像分割程序image=imread('mri1.bmp');I=rgb2gray(image);figure,imshow(I),title('原始图像')I=double(I);[M,N]=size(I);[y,x]=getpts; %获得区域生长起始点x1=round(x); %横坐标取整y1=round(y); %纵坐标取整seed=I(x1,y1); %将生长起始点灰度值存入seed中Y=zeros(M,N); %作一个全零与原图像等大的图像矩阵Y,作为输出图像矩阵Y(x1,y1)=1; %将Y中与所取点相对应位置的点设置为白场sum=seed; %储存符合区域生长条件的点的灰度值的和suit=1; %储存符合区域生长条件的点的个数count=1; %记录每次判断一点周围八点符合条件的新点的数目threshold=15; %域值while count>0s=0; %记录判断一点周围八点时,符合条件的新点的灰度值之和count=0;for i=1:Mfor j=1:Nif Y(i,j)==1if (i-1)>0 && (i+1)<(M+1) && (j-1)>0 && (j+1)<(N+1) %判断此点是否为图像边界上的点for u= -1:1 %判断点周围八点是否符合域值条件for v= -1:1 %u,v为偏移量if Y(i+u,j+v)==0 & abs(I(i+u,j+v)-seed)<=threshold& 1/(1+1/15*abs(I(i+u,j+v)-seed))>0.8%判断是否未存在于输出矩阵Y,并且为符合域值条件的点Y(i+u,j+v)=1; %符合以上两条件即将其在Y中与之位置对应的点设置为白场count=count+1;s=s+I(i+u,j+v); %此点的灰度之加入s中endendendendendendendsuit=suit+count; %将n 加入符合点数计数器中sum=sum+s; %将s加入符合点的灰度值总合中seed=sum/suit; %计算新的灰度平均值endfigure,imshow(Y),title('分割后图像')。
第八章使用MATLAB遗传算法工具最新发布的MA TLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。
使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。
本章8.1节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。
8.1 遗传算法与直接搜索工具箱概述本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。
8.1.1 工具箱的特点GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MA TLAB数值计算环境的性能。
遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。
这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。
所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。
使用语句type function_name就可以看到这些函数的MATLAB代码。
我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。
工具箱函数可以通过图形界面或MA TLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。
遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。
遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。
Matlab中的自然图像分割与图像提取技术详解自然图像分割和图像提取是数字图像处理中的重要技术之一,它可以从复杂的自然图像中提取出感兴趣的目标或者区域,为后续的图像处理和分析提供有力的支持和基础。
在本文中,我们将详细介绍在Matlab中实现自然图像分割和图像提取的方法和技巧。
一、图像预处理在进行图像分割和提取之前,需要对原始图像进行一系列预处理操作。
首先,我们需要载入图像并将其转换为灰度图像。
可以通过Matlab中的imread函数读取图像,然后利用rgb2gray函数将图像转换为灰度图像。
接着,我们可以对图像进行平滑处理,以去除噪声。
Matlab中提供了多种平滑滤波器,如高斯滤波、中值滤波等,可以根据具体情况选择适合的滤波器。
二、阈值分割阈值分割是最常用的一种图像分割方法,它通过将图像中的像素根据其灰度值与预设的阈值进行比较,将其分为不同的区域或者目标。
在Matlab中,可以利用函数imbinarize实现简单的阈值分割。
该函数可以根据用户设定的阈值将灰度图像二值化,生成二值图像。
用户可以通过调整阈值的大小,从而获得不同的分割效果。
三、基于边缘的分割基于边缘的分割方法是另一种常用的图像分割技术,它通过检测图像中的边缘信息来实现分割。
在Matlab中,可以利用一系列边缘检测算法来提取图像中的边缘信息,如Sobel算子、Canny算子等。
这些算法可以对图像进行梯度计算,然后根据梯度的变化来检测边缘。
通过对边缘进行二值化和分割,可以得到图像中的目标或者区域。
四、区域生长算法区域生长算法是一种基于像素相似性的图像提取技术,它通过选择合适的种子点和生长准则,将与种子点相似的像素逐步加入到同一区域中,从而实现图像提取。
在Matlab中,可以利用regiongrowing函数实现简单的区域生长算法。
该函数需要用户提供种子点的坐标和生长准则,可以得到图像中与种子点相似的区域。
五、基于聚类的图像分割聚类是一种常用的无监督学习方法,它的目标是将数据集划分为若干个子集,其中子集内的数据点相似度较高,而子集之间的相似度较低。
Matlab程序:遗传算法/大津法/区域生长法/迭代法分割图像
区域生长的图像分割程序
image=imread('mri1.bmp');
I=rgb2gray(image);
figure,imshow(I),title('原始图像')
I=double(I);
[M,N]=size(I);
[y,x]=getpts; %获得区域生长起始点
x1=round(x); %横坐标取整
y1=round(y); %纵坐标取整
seed=I(x1,y1); %将生长起始点灰度值存入seed中
Y=zeros(M,N); %作一个全零与原图像等大的图像矩阵Y,作为输出图像矩阵
Y(x1,y1)=1; %将Y中与所取点相对应位置的点设置为白场
sum=seed; %储存符合区域生长条件的点的灰度值的和
suit=1; %储存符合区域生长条件的点的个数
count=1; %记录每次判断一点周围八点符合条件的新点的数目threshold=15; %域值
while count>0
s=0; %记录判断一点周围八点时,符合条件的新点的灰度值之和
count=0;
for i=1:M
for j=1:N
if Y(i,j)==1
if (i-1)>0 && (i+1)<(M+1) && (j-1)>0 && (j+1)<(N+1) %判断此点是否为图像边界上的点
for u= -1:1 %判断点周围八点是否符合域值条件
for v= -1:1 %u,v为偏移量
if Y(i+u,j+v)==0 & abs(I(i+u,j+v)-seed)<=threshold& 1/(1+1/15*abs(I(i+u,j+v)-seed))>0.8%判断是否未存在于输出矩阵Y,并且为符合域值条件的点
Y(i+u,j+v)=1; %符合以上两条件即将其在Y中与之位置对应的点设置为白场
count=count+1;
s=s+I(i+u,j+v); %此点的灰度之加入s中
end
end
end
end
end
end
end
suit=suit+count; %将n 加入符合点数计数器中
sum=sum+s; %将s加入符合点的灰度值总合中
seed=sum/suit; %计算新的灰度平均值
end
figure,imshow(Y),title('分割后图像')。