求MATLAB图像分割源程序 最好简单点带说明的
1个回答
展开全部
区域生长法:
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,[]);
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,[]);
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询