Ⅰ 区域生长Matlab代码
我跑了下,应该改成function Output=region(image,seed,Threshold,maxv)
........
........
%堆栈的尾部指针后移一位
Start=Start+1;
end
end
end
Output = LabelImage;
end
你试试看有结果没
Ⅱ 我弄了个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,[]);
Ⅲ 图象分割有哪三种不同的途径
图象分割有三种不同的途径,其一是将各象素划归到相应物体或区域的象素聚类方法即区域法,其二是通过直接确定区域间的边界来实现分割的边界方法,其三是首先检测边缘象素再将边缘象素连接起来构成边界形成分割。早期的图像分割方法可以分为两大类。一类是边界方法,这种方法假设图像分割结果的某个子区域在原来图像中一定会有边缘存在;一类是区域方法,这种方法假设图像分割结果的某个子区域一定会有相同的性质,而不同区域的像素则没有共同的性质。这两种方法都有优点和缺点,有的学者考虑把两者结合起来进行研究。现在,随着计算机处理能力的提高,很多方法不断涌现,如基于彩色分量分割、纹理图像分割。所使用的数学工具和分析手段也是不断的扩展,从时域信号到频域信号处理,小波变换等等。
图像分割主要包括4种技术:并行边界分割技术、串行边界分割技术、并行区域分割技术和串行区域分割技术。下面是分别对每一项做简单的介绍。
Ⅳ 如何用区域生长法实现图像分割
区域生长法图像分割是直接根据像素的相似性和连通性来对图像进行聚类的算法。基本原理是,给出若干种子点,然后依次对这些种子点进行如下操作,直到种子点集合为空:判断种子点四邻域或八邻域的像素点是否和种子点相似(灰度相似或其他测度相似),如果相似则将该点加入种子点集合,否则不作处理。
该算法原理很简单,但在数据结构的组织上却需要技巧,本文介绍一种简易的数据组织方式实现该算法。
如上图所示,左图为一幅W*H大小的图像示意图,利用区域生长法图像分割算法,该图像被分割(聚类)为7块;右图为相应的数据结构,图像分割的结果属于图像空间数据,其实就是一系列的像素点坐标数组或与像素点坐标直接关联的属性数组如FLAG的数组等,这个数组的维度一定是W*H,而分割结果体现在数组元素的排列顺序:同一类别的元素连续存储。然而类别的界限无法用该数组表明,而只能用另外一个描述数组,这里我们称之为图像空间数据的“元数据”数据,这个数组的有效维度为空间数据的类别数,即7,每个元素代表的是空间数据数组中每个类别的元素个数,其实也就相应地表明了每个类别的指针位置。
Ⅳ 急!!求遗传算法图像边缘检测的matlab程序,马上就要交毕设了,谁能帮我啊我的邮箱942406137,有加分啊
http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=49464 Matlab程序:遗传算法/大津法/区域生长法/迭代法分割图像
Ⅵ matlab编写出边缘或者区域算法分割图像的程序,能给我发份吗急用,谢谢!
matlab太搞了,算子都是编好的,你直接调用。BW = edge(I,'canny'); canny算子直接调用。
下面是网上找到的canny算子边缘检测:
I = imread('lunna.jpg');
I=rgb2gray(I);
BW = edge(I,'canny');
% 以自动阈值选择法对图像进行Canny算子检测
[BW,thresh] = edge(I,'canny');
% 返回当前Canny算子边缘检测的阈值
disp('Canny算子自动选择的阈值为:')
disp(thresh)
subplot(121),imshow(BW);
title('自动阈值的Canny算子边缘检测')
BW = edge(I,'Canny',[0.2 0.5]);
% 以阈值为[0.1 0.5]对图像进行Canny算子检测
subplot(122),imshow(BW);
title('阈值为[0.1 0.5]的Canny算子边缘检测')
Ⅶ 谁有基于种子点算法的图像分割matlab代码!!急要!!!!
你指的是
区域生长图像分割算法!MATLAB数字图像处理(第2版)(张德丰,等)冈萨雷斯 图像处理matlab 等等许多matlab图像处理的书都会有区域生长的代码
Ⅷ MATLAB紧急求助!在同一幅图上面分别用边缘检测,区域生长,阀值分割3种分割算法实现图像分割。
看我的文库
http://wenku..com/view/58912bd7b14e852458fb5743.html
http://wenku..com/view/6e54a67c31b765ce0508144f.html
Ⅸ 区域生长的区域生长的优势和劣势
1. 区域生长通常能将具有相同特征的联通区域分割出来。
2. 区域生长能提供很好的边界信息和分割结果。
3. 区域生长的思想很简单,只需要若干种子点即可完成。
4. 在生长过程中的生长准则可以自由的指定。
5. 可以在同一时刻挑选多个准则。 1. 计算代价大。
2. 噪声和灰度不均一可能会导致空洞和过分割。
3. 对图像中的阴影效果往往不是很好。
对噪声问题,通常可以用一些平滑滤波器,或是diffusion滤波器做预处理来解决,所以通常噪声问题并不是很严重。所以实际上,区域生长的最严重的问题就是效率低下。
据实验,在2.4GHz的电脑上,一个512*512*343的数据,进行一次区域生长大约需要200s的时间