阮玉祥
162210807121
姓名
学号
成绩
江苏科技大学
数字图像处理本科生课程论文
论文题目: 图像分割方法的分析与比较
完成时间: 2019 年 05 月 28 日
所在专业:
软件工程
所在年级:
2016 级
图像分割方法的分析与比较
摘要
随着电脑以及网络的普及,市场对于计算机有关的产品的需求越来越大。巨大的利
益之下,人们投入巨量的精力在计算机技术的应用上。而近几年人工智能技术大热,越
来越多的公司财团参与到人工智能的开发中去。机器人的功能不再仅仅是扫地那么简单
了,目前有的机器人能够踢足球,有的能猜拳,有的甚至能开车(轮式移动机器人)。
那么这些机器人通过摄像头来获取外部的信息,所有捕获到的信息都是一帧一帧的图像,
这些图像都是真实的场景几乎都是非常复杂的包含的信息非常的多,这就使得图像的处
理变得很困难。那么在进行图像处理之前可以将其先进行分割,将一张复杂的图像分割
成许多简单的图像。
本文主要是研究不同的图像分割的方法及其效果的比较。目前图像的分割方法中
主要有阀值分割法,基于边缘检测的分割法,基于区域分割法。而本文主要研究验证了
阀值分割法中的局部阀值分割与全局阀值分割,基于边缘检测的分割法中的 roberts 算
子、sobel 算子以及 canny 算子和基于区域分割法中的区域生长法。
关键词: 图像分割;阀值分割;边缘检测;区域分割 ;
目录
一、主流图像分割方法的介绍…………………………………………1
1.1 阀值分割法……………………………………………………………1
1.2 基于边缘检测法………………………………………………………1
1.2 基于区域分割法………………………………………………………2
二、不同分割方法的 matlab 实现及其比较 …………………………2
2.1 基于阀值分割法的图像分割……………………………………………2
2.1.1 局部阀值分割……………………………………………………2
2.1.2 全局部阀值分割…………………………………………………7
2.2 基于边缘检测的图像分割………………………………………………9
2.3 基于区域分割法的图像分割……………………………………………12
2.3.1 区域生长法………………………………………………………12
三、总结…………………………………………………………………16
3.1 实验总结…………………………………………………………………16
3.2 心得体会…………………………………………………………………16
参考文献…………………………………………………………………16
一、 主流图像分割方法的介绍
图像分割是图像处理中非常基础也是非常关键的一项技术应用。但是目前并没有任
何一项图像分割技术是能够对所有的图像进行分割。由于不同图像的属性不同以及所预
期的分割的效果也不竟相同,造成了如今众多分割技术并存的现象。
下面将从主要的三大类分割方法介绍:阀值分割法、边缘检测法和区域法分割法。
1.1 阈值分割方法
阈值分割法分为全局阈值法和局部阈值分割法。
局部阈值分割法是将原始图像划分成较小的图像, 并对每个子图像选取相应的阈
值。 在阈值分割后, 相邻子图像之间的边界处可能产生灰度级的不连续性,因此需用
平滑技术进行排除。局部阈值法常用的方法有灰度差直方图法、 微分直方图法。
局部阈值分割法虽然能改善分割效果, 但存在以下几个缺点:
①每幅子图像的尺寸不能太小, 否则统计出的结果无意义。
②程序并不是人,并不能做出灵活的判断。当一幅图像的子图正好落在背景区域或
几乎完全属于背景或目标时,直方图为单峰和南宁进行分割。
③局部阈值法对每一幅子图像都要进行统计,速度慢,难以适应实时性的要求。
④当目标被分在不同子块时,分割结果存在块状效应,即分割的效果很不好。
全局阈值分割方法在图像处理中应用比较多, 它在整幅图像内采用固定的阈值分
割图像。经典的阈值选取以灰度直方图为处理对象。根据阈值选择方法的不同,可以分
为模态方法、 迭代式阈值选择等方法。 这些方法都是以图像的直方图为研究对象来确
定分割的阈值的。 另外还有类间方差阈值分割法、 二维最大熵分割法、模糊阈值分割
法以及共生矩阵分割法等等。
全局阀值分割法的处理算法简单,对于目标和背景都有明显的分离、直方图呈双峰
的图像效果良好,但是对于图像的质量要求比较高。一些图像由于光照不均匀、噪声干
扰大等原因是的直方图的分布不呈双份的图下个,二值化效果明显变差,故而是的图像
分割处理的效果很差。
1.2 基于边缘检测法
边缘检测法是一种处理不连续性图像的分割技术。 它主要时通过检测图像灰度级
或者结构具有突变的地方,这些突变的点是一个区域的结束也是另一个区域开始的地方
即这些点就是图像的边缘的一部分。边缘是一条曲折的线,以上仅仅是找出了这条线中
的一些点,所以还要对图像进行进一步的处理,即对图像再进行边界闭合处理,边界闭
合是根据像素梯度的幅度及梯度方向满足规定的条件将边缘素连接起来, 就有可能得
1
到闭合的边界。按照处理技术可以分为并行边缘检测技术和串行边缘检测技术。 检测
过程中可以通过空域微分算子来完成卷积。 这些微分算子包括、Sobel 梯度算子、
Prewitt 梯度算子、综合正交算子等。这些方法主要是对检测图像中灰度的变化, 图
像边缘是灰度突变的地方。
同时基于边缘的分割方法经常遇到的几个问题:
①图像噪声和背景对于图像分割的影响较大。
②不是边界的地方出现边缘点。
③是边界的地方缺少边缘点。
1.3 基于区域分割法
区域分割法主要包括:区域生长和分裂合并法,其分割过程后续步骤的处理要根据
前面步骤的结果进行判断而确定。
区域生长法是根据预先规定好的指标,提取图像中相互连接区域的方法,它是利用
区域一致性准则对目标进行分割。 规定的指标包括图像的灰度信息, 边缘,某种特性。
区域生长法一般都会放在一系列过程中使用, 不会单独使用。
区域生长法主要的缺陷是, 每一个需要提取的区域, 都必须先给出种子点, 然
后提取出和种子一样,符合规定的指标的区域, 这样有多少区域就必须给出多少个种
子数。 这种方法对噪声也很敏感, 会造成分割区域不连续。 相反的,局部且大量的
噪声会使原本来分开的区域连接起来。
二、不同分割方法的 matlab 实现及其比较
2.1 阀值分割法
2.1.1 局部阀值分割法
实现思路:
所采用的局部分割法是将一幅图下先划分成 N 个长宽均为 block_size(自定义的值)
大小的块,在每个块中使用迭代法取一个阀值对块进行分割处理,即进行了 N 次阀值分
割,然后再将这些分割后的块再进行拼接成一幅图片。
代码实现:
clear all;
close all;
clc;
2
original_image=imread('D:/test3.jpg');
%获取原图
gray_image=rgb2gray(original_image);%将原图转换为灰度图
gray_image2=double(gray_image);%将灰度图中的值转换为 double 型
[m,n]=size(gray_image2);
%m,n 分别为原图的长和宽
result=zeros(m,n);
%初始化 result 矩阵
block_size=input('Block size=');%在命令行中键入不同大小的分块
for i=1:block_size:m
for
j=1:block_size:n
% 以 上 两 行 是 将 整 个 图 像 分 割 成
block_size*block_size 大小的区域
if ((i+block_size)>m)&&((j+block_size)>n) %如果分割剩下来区域的长和宽都
不足自定义的长度大小
block=gray_image2(i:end,j:end); %将剩下的部分作为一块
elseif ((i+block_size)>m)&&((j+block_size)<=n) %如果分割剩下来的区域的长
大于自定义长度而宽不足自定义的长度
block=gray_image2(i:end,j:j+block_size-1); %将剩下的长*block_size 作为一
个块,然后再进行划分
elseif ((i+block_size)<=m)&&((j+block_size)>n) %如果剩下来的区域的长小于
自定义长度而宽大于自定义的长度
block=gray_image2(i:i+block_size-1,j:end);将 block_size*剩下的宽作为一块,
然后再进行划分
else
block=gray_image2(i:i+block_size-1,j:j+block_size-1); % 将 图 像 划 分 出
block_size*block_size 作为一块
end
t=mean(block(:));
%求出这个块的均值
t_org=t;
%将均值赋给 t_org
is_done=false;
%定义一个标记,初始值为 false
count=0;
while ~is_done
%利用迭代法算出该块的阈值
r1=find(block<=t);
%找出 block 块中值小于等于均值的像素,并将其位置返
回给 r1
r2=find(block>t);
%找出 block 块中大于均值的像素,并将其位置返回给 r2
temp1=mean(block(r1)); %temp1 为 block 中大于整体均值的像素值的平均值
if isnan(temp1);
%如果 temp1 的值非数字
temp1=0;
end
%将 temp1 赋值为 0
3
temp2=mean(block(r2)); %temp2 为 block 块中小于整体均值的像素值的平均值
if isnan(temp2)
%如果 temp2 的值非数字
temp2=0;
end
%将 temp2 赋值为 0
t_new=(temp1+temp2)/2; %t_new 即新的整体块的均值为 temp1 和 temp2 的均值
is_done=abs(t_new-t)<1;%如果新的整体均值与之前的整体均值的差值的绝对值
小于 1 则
t=t_new;
count=count+1;
if count>=1000
%将 t_new 赋给 t
%计数自增
Error='Error:Cannot find the ideal threshold.';
return
end
end
block(r1)=255; %将大于均值的像素的灰度值设置为 255,即为要分割出的物体
block(r2)=0;%将小于均值的像素的灰度值设置为 0,即背景
if ((i+block_size)>m)&&((j+block_size)>n)
%将划分的块在拼接起来
result(i:end,j:end)=block;
elseif ((i+block_size)>m)&&((j+block_size)<=n)
result(i:end,j:j+block_size-1)=block;
elseif ((i+block_size)<=m)&&((j+block_size)>n)
result(i:i+block_size-1,j:end)=block;
else
result(i:i+block_size-1,j:j+block_size-1)=block;
end
end
end
result=uint8(result);
subplot(1,2,1); imshow(gray_image); title('原图的灰度图');
%展示原图的
灰度图
subplot(1,2,2); imshow(result);
title('分割后的图像');
%展示使用局
部分割法分割得出的图像
结果展示:
⑴将原图进行局部阀值分割
4
I 块的大小为 20*20
II 所分的块的大小为 10*10
⑵为了凸显局部阀值法的特点,在原有的图像上添加了模拟乘性噪声与椒盐噪声。然后
再对图像进行区域阀值分割。
添加代码:
original_image2=imnoise(original_image,'speckle',0.02); %模拟方差为 0.02 的乘
性噪声
original_image2=imnoise(original_image2,'salt&pepper',0.04;% 模 拟 叠 加 密 度 为
0.04 的椒盐噪声结果:
5