实验三图像分割
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三图像分割
一、实验目的
1、了解图像分割的基本概念;
2、掌握阈值分割、边缘检测的基本分割方法;
3、对检测的目标图像分析其目标特征
二、实验内容
1、实验原理
阈值分割利用图像中要提取的目标物与其背景在灰度特性上的差异,把图像视为具有不同灰度级的两类区域的组合,选择一个合适的阈值,以确定图像中每个像素点应该属于目标区域还是背景区域,从而产生二值图像。
边缘检测是利用边缘灰度变化的一阶或二阶导数的特点,可以将边缘点检测出来。常用梯度、roberts、sobel、prewitt等算子进行检测。
图1 两种边缘点附近灰度方向导数变化规律
2、MATLAB实现
(1)在处理图像直方图的工具箱中,核心函数为imhist,其语法为:
imhist(f,n)——直接显示
f为输入图像,h为其直方图,n是形成直方图的灰度级个数(默认256)。
(2)阈值分割
BW=im2bw( I,level) ——将灰度图像、RGB图像转换为二值图像
Level为阈值(0~1),当输入图像的亮度小于level时,输出0,大于时输出1。
或不用函数。
直接编程实现。
(3)边缘检测
函数edge提供了几个导数估计器。该函数基本语法为:
[g,t]=edge(f,‘method’,parameters)
f——输入图像,g——输出图像,t——阈值。‘method’是具体用到的检测方法(sobel、prewitt、roberts、log、zerocross、canny),parameters对应不同检测方法的参数。
sobel边缘检测器
[g,t] = edge(f,'sobel',T,'dir')
T:指定阈值,dir:检测边缘首选方向(horizontal、vertical、both)
g:检测到的逻辑图像,边缘位置为1,其余位置为0。
t可选,输出参数edge函数所用阈值T。
(一般t和T参数可以不用,dir默认为both)
prewitt边缘检测器
[g,t] = edge(f,'prewitt',T,'dir')
该函数参数与sobel相同。prewitt检测器比sobel检测器在计算上简单一些,但比较容易产生一些噪声。
Robert边缘检测器
[g,t] = edge(f,'roberts',T,'dir')
该函数参数与sobel相同。
(3)二值图像特征量
a)bwperim(I,CONN)——提取对象边界像素
CONN为邻域类型,4代表四连接,8代表八连接
BW2=bwperim(BW1,CONN),返回二值图像BW1的边界图像BW2。
b)S=bwarea(BW)——返回图像面积
c)Eul=bweuler(BW,n)——返回图像的欧拉数
n为连接类型,4为四连接,8为八连接
三、实验步骤
1、读取图像rice.tif,分别用Roberts, Sobel、prewitt对图像进行边缘检测,显示
检测结果。比较三种算子处理的不同之处。
clear;
close all;
I=imread('rice.tif');
subplot(2,2,1);
imshow(I);title('原图');
[g,t] = edge(I,'roberts');
subplot(2,2,2);
imshow(g);title('roberts对图像边缘检测结果');
[g,t] = edge(I,'sobel');
subplot(2,2,3);
imshow(g);title('sobel对图像边缘检测结果');
[g,t] = edge(I,'prewitt');
subplot(2,2,4);
imshow(g);title('prewitt对图像边缘检测结果');
Roberts检测水平和垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感,无法抑制噪声的影响。
Sobel对噪声具有平滑作用,提供较为精确的边缘方向信息,但边缘定位精度不够高。
Prewitt对噪声具有平滑作用,定位精度不够高。prewitt检测器比sobel 检测器在计算上简单一些,但相对比较sobel容易产生一些噪声。
2、读取图像rice.tif,绘制直方图,双峰法阈值分割。
clear;
close all;
I=imread('rice.tif');
imshow(I);title('原图');
figure(2);
imhist(I,256);
title('直方图');
figure(3);
BW=im2bw(I,0.5);
imshow(BW);title('阈值分割二值图');
3、读取细胞图像‘cancer02.bmp’,根据相关阈值识别癌细胞。具体过程:
读取图像(imread)——转换二值图像
提取边缘(bwperim)
计算周长L(边界像素的点数)
计算细胞高度H、宽度W、面积A(bwarea)
计算圆度C=4πA / L2、
矩形度R=A/(H*W)
伸长度E=min(H,W)/max(H,W)
设定阈值Ath1=10000 Ath2=50000
Cth=0.5 Rth=0.5 Eth=0.8
进行识别:若面积大于50000,则为可疑小细胞癌细胞。
若面积小于10000,则为正常细胞。
若面积在10000-50000之间,且C大于阈值0.5,R大于0.5,E大于阈值0.8,则为癌细胞。
相关函数:
Sum(BW)
若BW为图像矩阵,每一列的所有像素求和(或所有行求和),生成一维向量。
若BW为一维向量,则对所有元素求和。
在求周长、高度、宽度时可以用。
程序:
clear
close all
f=imread('cancer02.bmp');
subplot(2,1,1)
imshow(f);title('原图像');
BW=bwperim(f,4);
subplot(2,1,2)
imshow(BW);title('图像边缘');
L=sum(sum(BW))
H=max(sum(f)/255)
f1=rot90(f);
W=max(sum(f1)/255)
A=bwarea(f)
C=4*pi*A / L^2