实验三图像分割

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档