matlab图像分割
中 国 地 质 大 学
课程设计
课程名称 数字图像处理
教师姓名 傅华明
学生姓名
学生学号
学生班级
数字图像处理报告
—基于matlab实现图像分割 1.实验要求:
采用简单区域扩张法对下图实施图像的区域分割。自行选定起始种子像素灰及灰度间隔度。
2.实验原理:
以图像的某个像素为生长点,比较相邻像素的特征,将特征相似的相邻像素合并为同一区域;以合并的像素为生长点,继续重复以上操作,最终形成具有相似特征的像素的最大连通集合。该法称简单区域扩张发。
基于区域灰度差的
主要有以下几个步骤:
(1)对图像进行逐行扫描,找出尚没有归属的像素;
(2)以该像素为中心检查它的邻域像素,如果灰度差小于预先确定的邻域,直到区域不能进一步扩张;
(3)以新合并的像素为中心,重复步骤(2),检查新像素的邻域,直到区域不能进一步扩张;
(4)返回到步骤(1),继续扫描直到不能发现没有归属的像素,则结束整个生长过程。
3.实验代码:
function OutImage = Region_Grow(Image, x,y, threshold)
%区域增长程序
%Image ---待分割的图像
%x----种子点的x坐标
%y----种子点的y坐标
%threshold-----阈值
I = double(Image);
[m, n] = size(I);
flag = zeros(m, n); %标记矩阵,记住哪些点走过,哪些点没有走过 total_num = m * n;
Qx = zeros(1, total_num);
Qy = zeros(1, total_num);
last = 1; first = 1; %置为空队列
Qx(1, 1) = x;
Qy(1, 1) = y;
flag(x, y) = 1;
while(last >= first) %队列不为空
fx = Qx(1, first);
fy = Qy(1, first);
%==========fx-1, fy-1==============
if ( ((fx - 1)>0) & ((fx - 1)<=m) & ((fy - 1)>0) & ((fy - 1)<=n))
if ( ((I(x,y) - I(fx-1, fy-1))<=threshold) & (flag(fx-1, fy-1) == 0) )
flag(fx-1, fy-1) = 1;
last = last + 1;
Qx(1, last) = fx -1;
Qy(1, last) = fy -1;
end
end
%==========fx, fy-1==============
if ( ((fy - 1)>0) )
if ( ((I(x,y) - I(fx, fy-1))<=threshold) & (flag(fx, fy-1) == 0) )
flag(fx, fy-1) = 1;
last = last + 1;
Qx(1, last) = fx ;
Qy(1, last) = fy -1;
end
end
%==========fx+1, fy-1==============
if ( ((fx + 1)<=m) & ((fy - 1)>0) )
if ( ((I(x,y) - I(fx+1, fy-1))<=threshold) & (flag(fx+1, fy-1) == 0) )
flag(fx+1, fy-1) = 1;
last = last + 1;
Qx(1, last) = fx +1;
Qy(1, last) = fy -1;
end
end
%==========fx+1, fy==============
if ( ((fx + 1)<=m) )
if ( ((I(x,y) - I(fx+1, fy))<=threshold) & (flag(fx+1, fy) == 0) )
flag(fx+1, fy) = 1;
last = last + 1;
Qx(1, last) = fx + 1;
Qy(1, last) = fy;
end
End
clear;
close all;
I=imread('p5-06.tif');
imshow(I);
%imview(I);
% segmentation_regiongrowth(I,350,600,100)
OutImage=Region_Grow(I,230,190,30);
figure,imshow(OutImage );
4.运行结果:
通过上机进行图像分割,我对图像分割的原理有了进一步的理解。运行结果较好的实现
了图像分割。