文档视界 最新最全的文档下载
当前位置:文档视界 › 详细的图像分割之边缘检测实验报告

详细的图像分割之边缘检测实验报告

详细的图像分割之边缘检测实验报告
详细的图像分割之边缘检测实验报告

边缘检测实验报告

一、实验目的

通过课堂的学习,已经对图像分割的相关理论知识已经有了全面的了解,知道了许多图像分割的算法及算子,了解到不同的算子算法有着不同的优缺点,为了更好更直观地对图像分割进行深入理解,达到理论联系实际的目的,特制定如下的实验。

二、实验原理:

图像处理有两大类目的:1.改善像质(增强、恢复);2.图像分析:对图像内容作出描述;其一般的图像处理过程如下:

图像分割的算法有:

(1)阈值分割原理:

(,)(,)(,)E

B

L f x y T g x y L f x y T

≥?=?

(2)边缘检测:

梯度对应一阶导数,对于一个连续图像函数f(x,y):

梯度矢量定义:

梯度的幅度:

梯度的方向:

a) Roberts 算子

b) Sobel 算子

Roberts 算子

[

]

T

T

y

x

y f x f G G y x f ??

????????==?),(122)

()),((),(y x G G y x f mag y x f +=?=?)

arctan(),(x y G y x =φ()()()[]()()[]

{

}

2

122

1,,11,1,,+-++++-=j i f j i f j i f j i f j i g

c) Prewitt 算子

d) Kirsch 算子

由K 0~K 7八个方向模板组成,将K0~K7的模板算法分别与图像中的3×3区域乘,选最大一个值,作为中央像素的边缘强度

(3)区域分割

1 区域生长法 算法描述

先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相似性质的像素合并到种子像素所在的区域中。将这些新像素当作新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来。

2 分裂合并法

实际中常先把图像分成任意大小且不重叠的区域,然后再合并或分裂这些区域以满足分割的要求,即分裂合并法.一致性测度可以选择基于灰度统计特征(如同质区域中的方差),假设阈值为T ,则算法步骤为:

① 对于任一Ri ,如果 ,则将其分裂成互不重叠的四等分; ② 对相邻区域Ri 和Rj ,如果 ,则将二者合并; ③ 如果进一步的分裂或合并都不可能了,则终止算法。

(4)Hough 变换

Hough 变换是一种检测、定位直线和解析曲线的有效方法。它是把二值图变换到Hough 参数空间,在参数空间用极值点的检测来完成目标的检测。下面以直线检测为例,说明

}

,,,m ax {),(10T g g g y x g =∑∑

-=-=++=111

1)

,(),(),(k l i i l y k x f l k K y x g T R V i >)(T

R R V j i ≤)(

Hough变换的原理。

三、实验过程:

1、打开VC++6.0,利用AppWizard 向导新建基于多文档的工程文件”d emo ”,其他默认设置即可。

(x i , y i )

(x j , y j )

X

o

Y

y=p ’’

P

o

Q

q = -px j +y j

q = -px i +y i

q ’ p ’

2、新建如下的菜单资源:

图像分割Roberts算子ID_Robert

Sobel算子ID_Sobel

Prewitt算子ID_Prewitt Laplacian算子ID_Laplacian Gauss-Laplacian算

ID_Gauss_laplacian Krisch算子ID_Krisch

3、在demoDoc.h中添加如下代码:

#include "ImgCenterDib.h"

public:

ImgCenterDib *GetPDib() {

return &m_dib;

}

private:

ImgCenterDib m_dib;

4、在demoView.cpp中添加代码如下:

#include "MainFrm.h"

#include "Segment.h"

5、新建图像处理的图像分割类Segment.h和ImgCenterDib.h,代码如下:

//图像分割类的定义:

#ifndef _INSIDE_VISUAL_CPP_IMGSEGMENT

#define _INSIDE_VISUAL_CPP_IMGSEGMENT

#include "ImgCenterDib.h"

class ImgSegment:public ImgCenterDib

{

public:

//输出图像每像素位数

int m_nBitCountOut;

//输出图像位图数据指针

unsigned char * m_pImgDataOut;

//输出图像颜色表

LPRGBQUAD m_lpColorTableOut;

private:

//输出图像的宽

int m_imgWidthOut;

//输出图像的高

int m_imgHeightOut;

//输出图像颜色表长度

int m_nColorTableLengthOut;

public:

//不带参数的构造函数

ImgSegment();

//带参数的构造函数

ImgSegment(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData);

//析构函数

~ImgSegment();

//以像素为单位返回输出图像的尺寸

CSize GetDimensions();

//Roberts算子

void Roberts();

//Sobel算子

void Sobel();

//Prewitt算子

void Prewitt();

//Laplacian算子

void Laplacian();

//Krisch算子

void Krisch();

//Gauss-Laplacian算子

void GaussLaplacian();

};

#endif // _INSIDE_VISUAL_CPP_IMGSEGMENT

//ImgCenterDib类的定义:ImgCenterDib.h

#ifndef _INSIDE_VISUAL_CPP_IMGCENTERDIB

#define _INSIDE_VISUAL_CPP_IMGCENTERDIB

//ImgCenterDib类

class ImgCenterDib

{

public:

//图像数据指针

unsigned char * m_pImgData;

//图像颜色表指针

LPRGBQUAD m_lpColorTable;

//每像素占的位数

int m_nBitCount;

private:

//指向DIB的指针(包含BITMAPFILEHEADER,BITMAPINFOHEADER和颜色表)LPBYTE m_lpDib;

//逻辑调色板句柄

HPALETTE m_hPalette;

//颜色表长度(多少个表项)

int m_nColorTableLength;

protected:

//图像的宽,像素为单位

int m_imgWidth;

//图像的高,像素为单位

int m_imgHeight;

//图像信息头指针

LPBITMAPINFOHEADER m_lpBmpInfoHead;

public:

//不带参数的构造函数

ImgCenterDib();

//带参数的构造函数

ImgCenterDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData);

//析构函数

~ImgCenterDib();

//获取DIB的尺寸(宽高)

CSize GetDimensions();

//DIB读函数

BOOL Read(LPCTSTR lpszPathName);

//DIB写函数

BOOL Write(LPCTSTR lpszPathName);

//显示DIB

BOOL Draw(CDC* pDC, CPoint origin, CSize size);

//用新的数据替换DIB

void ReplaceDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData);

//计算颜色表的长度

int ComputeColorTabalLength(int nBitCount);

private:

//创建逻辑调色板

void MakePalette();

//清理空间

void Empty();

};

#endif // _INSIDE_VISUAL_CPP_IMGCENTERDIB

6、类Segment.cpp和ImgCenterDib.cpp的实现代码:

//图像分割类的实现Segment.cpp:

#include "stdafx.h"

#include "Segment.h"

#include "math.h"

/*********************************************************************** * 函数名称:

* ImgSegment()

*

*说明:无参数的构造函数,对成员变量进行初始化

***********************************************************************/ ImgSegment::ImgSegment()

m_pImgDataOut=NULL;//输出图像位图数据指针为空

m_lpColorTableOut=NULL;//输出图像颜色表指针为空

m_nColorTableLengthOut=0;//输出图像颜色表长度为0

m_nBitCountOut=0;//输出图像每像素位数为0

m_imgWidthOut=0;//输出图像的宽为0

m_imgHeightOut=0;//输出图像的高为0

}

/***********************************************************************

* 函数名称:

* ImgSegment()

*

*函数参数:

* CSize size -图像大小(宽、高)

* int nBitCount -每像素所占位数

* LPRGBQUAD lpColorTable -颜色表指针

* unsigned char *pImgData -位图数据指针

*

*返回值:

* 无

*

*说明:本函数为带参数的构造函数,给定位图的大小、每像素位数、颜色表

* 及位图数据,调用ImgCenterDib()对基类成员初始化,并初始化派生类的

* 数据成员

***********************************************************************/ ImgSegment::ImgSegment(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData):

ImgCenterDib(size, nBitCount, lpColorTable, pImgData)

{

m_pImgDataOut=NULL;//输出图像位图数据指针为空

m_lpColorTableOut=NULL;//输出图像颜色表指针为空

m_nColorTableLengthOut=0;//输出图像颜色表长度为0

m_nBitCountOut=0;//输出图像每像素位数为0

m_imgWidthOut=0;//输出图像的宽为0

m_imgHeightOut=0;//输出图像的高为0

}

/*********************************************************************** * 函数名称:

* ~ImgSegment()

*

*说明:析构函数,释放资源

***********************************************************************/ ImgSegment::~ImgSegment()

{

//释放输出图像位图数据缓冲区

if(m_pImgDataOut!=NULL){

delete []m_pImgDataOut;

m_pImgDataOut=NULL;

}

//释放输出图像颜色表

if(m_lpColorTableOut!=NULL){

delete []m_lpColorTableOut;

m_lpColorTableOut=NULL;

}

}

/*********************************************************************** * 函数名称:

* GetDimensions()

*

*函数参数:

* 无

*

*返回值:

* 图像的尺寸,用CSize类型表达

*

*说明:返回输出图像的宽和高

***********************************************************************/ CSize ImgSegment::GetDimensions()

{

if(m_pImgDataOut == NULL) return CSize(0, 0);

return CSize(m_imgWidthOut, m_imgHeightOut);

}

/***********************************************************************

* 函数名称:

* Roberts()

*

*函数参数:

* 无

*

*返回值:

* 无

*

*说明:Roberts边缘检测,函数将图像看作若干通道数据的合成,在不同通道上

* 完成了边缘检测,因此可同时适用于灰度和彩色图像

***********************************************************************/

void ImgSegment::Roberts()

{

//释放m_pImgDataOut指向的图像数据空间

if(m_pImgDataOut!=NULL){

delete []m_pImgDataOut;

m_pImgDataOut=NULL;

}

//释放颜色表空间

if(m_lpColorTableOut!=NULL){

delete []m_lpColorTableOut;

m_lpColorTableOut=NULL;

}

//输出图像与输入图像为同一类型

m_nBitCountOut=m_nBitCount;

//输出图像颜色表长度

m_nColorTableLengthOut=ComputeColorTabalLength(m_nBitCountOut);

//输出图像颜色表,与输入图像相同

if(m_nColorTableLengthOut!=0){

m_lpColorTableOut=new RGBQUAD[m_nColorTableLengthOut];

memcpy(m_lpColorTableOut,m_lpColorTable,sizeof(RGBQUAD)*m_nColorTableLength Out);

}

//输出图像的宽高,与输入图像相等

m_imgWidthOut=m_imgWidth;

m_imgHeightOut=m_imgHeight;

//每行像素所占字节数,输出图像与输入图像相同

int lineByte=(m_imgWidth*m_nBitCount/8+3)/4*4;

//申请输出图像缓冲区

m_pImgDataOut=new unsigned char[lineByte*m_imgHeight];

//循环变量,图像的坐标

int i,j;

//每像素占字节数,输出图像与输入图像相同

int pixelByte=m_nBitCount/8;

//循环变量,遍历像素的每个通道,比如彩色图像三个分量

int k;

//中间变量

int x, y, t;

//Roberts算子

for(i=1;i

for(j=1;j

for(k=0;k

//x方向梯度

x=*(m_pImgData+i*lineByte+j*pixelByte+k)

-*(m_pImgData+(i+1)*lineByte+j*pixelByte+k);

//y方向梯度

y=*(m_pImgData+i*lineByte+j*pixelByte+k)

-*(m_pImgData+i*lineByte+(j+1)*pixelByte+k);

t=sqrt(x*x+y*y)+0.5;

if(t>255)

t=255;

*(m_pImgDataOut+i*lineByte+j*pixelByte+k)=t;

}

}

}

}

/*********************************************************************** * 函数名称:

* Sobel()

*

*函数参数:

* 无

*

*返回值:

* 无

*

*说明:Sobel边缘检测,函数将图像看作若干通道数据的合成,在不同通道上

* 完成了边缘检测,因此可同时适用于灰度和彩色图像

***********************************************************************/

void ImgSegment::Sobel()

{

//释放m_pImgDataOut指向的图像数据空间

if(m_pImgDataOut!=NULL){

delete []m_pImgDataOut;

m_pImgDataOut=NULL;

}

//释放颜色表空间

if(m_lpColorTableOut!=NULL){

delete []m_lpColorTableOut;

m_lpColorTableOut=NULL;

}

//输出图像与输入图像为同一类型

m_nBitCountOut=m_nBitCount;

//输出图像颜色表长度

m_nColorTableLengthOut=ComputeColorTabalLength(m_nBitCountOut);

//输出图像颜色表,与输入图像相同

if(m_nColorTableLengthOut!=0){

m_lpColorTableOut=new RGBQUAD[m_nColorTableLengthOut];

memcpy(m_lpColorTableOut,m_lpColorTable,sizeof(RGBQUAD)*m_nColorTableLength Out);

}

//输出图像的宽高,与输入图像相等

m_imgWidthOut=m_imgWidth;

m_imgHeightOut=m_imgHeight;

//每行像素所占字节数,输出图像与输入图像相同

int lineByte=(m_imgWidth*m_nBitCount/8+3)/4*4;

//申请输出图像缓冲区

m_pImgDataOut=new unsigned char[lineByte*m_imgHeight];

//循环变量,图像的坐标

int i,j;

//每像素占字节数,输出图像与输入图像相同

int pixelByte=m_nBitCount/8;

//循环变量,遍历像素的每个通道,比如彩色图像三个分量

int k;

//中间变量

int x, y, t;

//Sobel算子

for(i=1;i

for(j=1;j

for(k=0;k

//x方向梯度

x= *(m_pImgData+(i-1)*lineByte+(j+1)*pixelByte+k)

+ 2 * *(m_pImgData+i*lineByte+(j+1)*pixelByte+k)

+ *(m_pImgData+(i+1)*lineByte+(j+1)*pixelByte+k)

- *(m_pImgData+(i-1)*lineByte+(j-1)*pixelByte+k)

- 2 * *(m_pImgData+i*lineByte+(j-1)*pixelByte+k)

- *(m_pImgData+(i+1)*lineByte+(j-1)*pixelByte+k);

//y方向梯度

y= *(m_pImgData+(i-1)*lineByte+(j-1)*pixelByte+k)

+ 2 * *(m_pImgData+(i-1)*lineByte+j*pixelByte+k)

+ *(m_pImgData+(i-1)*lineByte+(j+1)*pixelByte+k)

- *(m_pImgData+(i+1)*lineByte+(j-1)*pixelByte+k)

- 2 * *(m_pImgData+(i+1)*lineByte+j*pixelByte+k)

- *(m_pImgData+(i+1)*lineByte+(j+1)*pixelByte+k);

t=sqrt(x*x+y*y)+0.5;

if(t>255)

t=255;

*(m_pImgDataOut+i*lineByte+j*pixelByte+k)=t;

}

}

}

}

/***********************************************************************

* 函数名称:

* Prewitt()

*

*函数参数:

* 无

*

*返回值:

* 无

*

*说明:Prewitt边缘检测,函数将图像看作若干通道数据的合成,在不同通道上

* 完成了边缘检测,因此可同时适用于灰度和彩色图像

***********************************************************************/

void ImgSegment::Prewitt()

{

//释放m_pImgDataOut指向的图像数据空间

if(m_pImgDataOut!=NULL){

delete []m_pImgDataOut;

m_pImgDataOut=NULL;

}

//释放颜色表空间

if(m_lpColorTableOut!=NULL){

delete []m_lpColorTableOut;

m_lpColorTableOut=NULL;

}

//输出图像与输入图像为同一类型

m_nBitCountOut=m_nBitCount;

//输出图像颜色表长度

m_nColorTableLengthOut=ComputeColorTabalLength(m_nBitCountOut);

//输出图像颜色表,与输入图像相同

if(m_nColorTableLengthOut!=0){

m_lpColorTableOut=new RGBQUAD[m_nColorTableLengthOut];

memcpy(m_lpColorTableOut,m_lpColorTable,sizeof(RGBQUAD)*m_nColorTableLength Out);

}

//输出图像的宽高,与输入图像相等

m_imgWidthOut=m_imgWidth;

m_imgHeightOut=m_imgHeight;

实验-四-图像分割与边缘检测

实验四图像分割与边缘检测 一.实验目的及要求 1.利用MATLAB研究图像分割与边缘检测的常用算法原理; 2.掌握MATLAB图像域值分割与边缘检测函数的使用方法; 3.了解边缘检测的算法和用途,比较Sobel、Prewitt、Canny等算子边缘检测的差异。 二、实验内容 (一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。 1.图像阈值分割 clear all, close all; I = imread('cameraman.tif'); figure (1),imshow(I) figure(2); imhist(I) T=120/255; Ibw1 = im2bw(I,T); figure(3); subplot(1,2,1), imshow(Ibw1); T=graythresh(I); L = uint8(T*255) Ibw2 = im2bw(I,T); subplot(1,2,2), imshow(Ibw2);

help im2bw; help graythresh; clear all, close all; I = imread('cameraman.tif'); figure (1),imshow(I) figure(2); imhist(I) T=240/255; Ibw1 = im2bw(I,T); figure(3); subplot(1,2,1), imshow(Ibw1); T=graythresh(I); L = uint8(T*255) Ibw2 = im2bw(I,T); subplot(1,2,2), imshow(Ibw2); help im2bw; help graythresh;

实验六-图像分割教学文稿

实验六-图像分割

信息工程学院实验报告 课程名称:数字图像处理 实验项目名称:实验六图像分割实验时间:2016.12.16 班级:姓名:学号: 一、实验目的 1. 使用MatLab 软件进行图像的分割。使学生通过实验体会一些主要的分割算子对图像处理的效果,以及各种因素对分割效果的影响。 2. 要求学生能够自行评价各主要算子在无噪声条件下和噪声条件下的分割性能。能够掌握分割条件(阈值等)的选择。完成规定图像的处理并要求正确评价处理结果,能够从理论上作出合理的解释。 二、实验内容与步骤 1.边缘检测 (1)使用Roberts 算子的图像分割实验 调入并显示图像room.tif图像;使用Roberts 算子对图像进行边缘检测处理; Roberts 算子为一对模板: (a)450方向模板(b)1350方向模板 图 1 matlab 2010的Roberts算子模板 相应的矩阵为:rh = [0 1;-1 0]; rv = [1 0;0 -1];这里的rh 为45度Roberts 算子,rv 为135度Roberts 算子。分别显示处理后的45度方向和135方向的边界检测结果;用“欧几里德距离”和“街区距离”方式计算梯度的模,并显示检测结果;对于检测结果进行二值化处理,并显示处理结果。 提示:先做检测结果的直方图,参考直方图中灰度的分布尝试确定阈值;应反复调节阈值的大小,直至二值化的效果最为满意为止。 (2)使用Prewitt 算子的图像分割实验

(a)水平模型(b)垂直模板 图2. Prewitt算子模板 使用Prewitt 算子进行内容(1)中的全部步骤。 (3)使用Sobel 算子的图像分割实验 使用Sobel (a)水平模型(b)垂直模板 图3. Sobel算子模板 (4)使用LoG (拉普拉斯-高斯)算子的图像分割实验 使用LoG (拉普拉斯-高斯)算子进行内容(1)中的全部步骤。提示1:处理后可以直接显示处理结果,无须另外计算梯度的模。提示2:注意调节噪声的强度以及LoG (拉普拉斯-高斯)算子的参数,观察处理结果。 (5) 打印全部结果并进行讨论。 下面是使用sobel算子对图像进行分割的MATLAB程序 f=imread('room.tif'); [gv,t1]=edge(f,'sobel','vertical');%使用edge函数对图像f提取垂直边缘 imshow(gv) [gb,t2]=edge(f,'sobel','horizontal');%使用edge函数对图像f提取水平边缘 figure,imshow(gb) w45=[-2 -1 0;-1 0 1;0 1 2];%指定模版使用imfilter计算45度方向的边缘 g45=imfilter(double(f),w45,'replicate'); T=0.3*max(abs(g45(:))); %设定阈值 g45=g45>=T; %进行阈值处理 figure,imshow(g45); 在函数中使用'prewitt'和'roberts'的过程,类似于使用sobel边缘检测器的过程。

图像分割算法开题报告

图像分割算法开题报告 摘要:图像分割是图像处理中的一项关键技术,自20世纪70年代起一直受到人们的高度重视,并在医学、工业、军事等领域得到了广泛应用。近年来具有代表性的图像分割方法有:基于区域的分割、基于边缘的分割和基于特定理论的分割方法等。本文主要对基于自动阈值选择思想的迭代法、Otsu法、一维最大熵法、二维最大熵法、简单统计法进行研究,选取一系列运算出的阈值数据和对应的图像效果做一个分析性实验。 关键字:图像分割,阈值法,迭代法,Otsu法,最大熵值法 1 研究背景 1.1图像分割技术的机理 图像分割是将图像划分为若干互不相交的小区域的过程。小区域是某种意义下具有共同属性的像素连通集合,如物体所占的图像区域、天空区域、草地等。连通是指集合中任意两个点之间都存在着完全属于该集合的连通路径。对于离散图像而言,连通有4连通和8连通之分。图像分割有3种不同的方法,其一是将各像素划归到相应物体或区域的像素聚类方法,即区域法,其二是通过直接确定区域间的边界来实现分割的边界方法,其三是首先检测边缘像素,然后再将边缘像素连接起来构成边界的方法。 图像分割是图像理解的基础,而在理论上图像分割又依赖图像理解,两者是紧密关联的。图像分割在一般意义下十分困难的,目前的图像分割处于图像的前期处理阶段,主要针对分割对象的技术,是与问题相关的,如最常用到的利用阈值化处理进行的图像分割。 1.2数字图像分割技术存在的问题

虽然近年来对数字图像处理的研究成果越来越多,但由于图像分割本身所具有的难度,使研究没有大突破性的进展,仍然存在以下几个方面的问题。 现有的许多种算法都是针对不同的数字图像,没有一种普遍适用的分割算法。 缺乏通用的分割评价标准。对分割效果进行评判的标准尚不统一,如何对分割结果做出量化的评价是一个值得研究的问题,该量化测度应有助于视觉系统中的自动决策及评价算法的优劣,同时应考虑到均质性、对比度、紧致性、连续性、心理视觉感知等因素。 与人类视觉机理相脱节。随着对人类视觉机理的研究,人们逐渐认识到,已有方法大都与人类视觉机理相脱节,难以进行更精确的分割。寻找到具有较强的鲁棒性、实时性以及可并行性的分割方法必须充分利用人类视觉特性。 知识的利用问题。仅利用图像中表现出来的灰度和空间信息来对图像进行分割,往往会产生和人类的视觉分割不一致的情况。人类视觉分割中应用了许多图像以外的知识,在很多视觉任务中,人们往往对获得的图像已具有某种先验知识,这对于改善图像分割性能是非常重要的。试图寻找可以分割任何图像的算法目前是不现实,也是不可能的。人们的工作应放在那些实用的、特定图像分割算法的研究上,并且应充分利用某些特定图像的先验知识,力图在实际应用中达到和人类视觉分割更接近的水平。 1.3数字图像分割技术的发展趋势 从图像分割研究的历史来看,可以看到对图像分割的研究有以下几个明显的趋势。 对原有算法的不断改进。人们在大量的实验下,发现一些算法的效

图像的阈值分割及边缘检测技术

数字图像处理实验报告 题目:图像的阈值分割及边缘检测技术 班级: 姓名: 学号:

图像的阈值分割及边缘检测技术 一、实验目的 1、了解图像的分割技术,掌握图像的全局阈值分割技术并通过MATLAB实现; 2、了解图像的边缘检测,掌握梯度算子图像边缘检测方法。 二、实验内容 1、基于直方图的全局阈值图像分割方法; 2、Edge命令(roberts,perwitt,sobel,log,canny),实现边缘检测。 三、实验原理 1、全局阈值是最简单的图像分割方法。其中,直方图法的原理如下:想做出图 像的直方图,若其直方图呈双峰且有明显的谷底,则可以讲谷底点所对应的灰度值作为阈值T,然后根据该阈值进行分割,九可以讲目标从图像中分割出来。这种方法是用于目标和背景的灰度差较大且直方图有明显谷底的情况。 2、用于边缘检测的梯度算子主要有Roberts算子、Prewitt算子、Sobel算子。 这三种检测算子中,Roberts算子定位精度较高,但也易丢失部分边缘,抗噪声能力差,适用于低噪声、陡峭边缘的场合。Prewitt算子、Sobel算子首先对图像做平滑处理,因此具有一定的抑制噪声的能力,但不能排除检测结果中的虚假边缘,易出现多像素宽度。

四、实验步骤 1、全局阈值分割: ①读取一张图像; ②生成该图像的直方图; ③根据直方图双峰产生的低谷估计阈值T; ④依次读取图像各个点的像素,若大于阈值,则将像素改为255,若小于 阈值,则将该像素改为0; 实验代码如下: I=imread('cameraman.tif'); %读取一张图像 subplot(221);imshow(I); %显示该图像 subplot(222);imhist(I); %生成该图像的直方图 T=60; %根据直方图估计阈值T为60 [m,n]=size(I); %取图像的大小为【m,n】 for i=1:m %依次读取图像各个点的像素,若大于阈 值,则将像素改为255,若小于阈值, 则将该像素改为0 for j=1:n if I(i,j)>=T I(i,j)=255; else I(i,j)=0; end end

图像分割和边缘检测

岭南师范学院 课程名称数字图像处理 实验序号实验5 实验名称图像分割和边缘检测 实验地点综B207 2017年10 月14 日

四、实验过程(实验步骤、记录、数据、分析) 1.基于一阶导数的边缘算子 a=imread('y.jpg'); f=rgb2gray(a); subplot(2,2,1),imshow(f),title('原始图像'); [g1 , t1]=edge(f,'roberts',[ ], 'horizontal'); subplot(2,2,2), imshow(g1),title('Roberts'); [g2, t2]=edge(f, 'sobel',[ ], 'horizontal'); subplot(2,2,3), imshow(g2),title('Sobel'); [g3, t3]=edge(f, 'prewitt',[ ], 'horizontal'); subplot(2,2,4), imshow(g3),title('Prewitt'); 从图像结果来看,'Roberts'的边缘检测范围更加大 2、基于二阶导数的边缘算子:应用LOG算子检测边缘 a=imread('y.jpg'); f=rgb2gray(a); subplot(1,2,1),imshow(f),title('原始图像'); [g , t]=edge(f, 'log'); subplot(1,2,2),imshow(g),title('log');

3、基于约束条件的最优化检测边缘算子:应用Canny算子检测边缘a=imread('y.jpg'); f=rgb2gray(a); subplot(1,2,1),imshow(f),title('原始图像'); [g , t]=edge(f,'canny'); subplot(1,2,2),imshow(g),title('Canny');

关于图像分割算法的研究

关于图像分割算法的研究 黄斌 (福州大学物理与信息工程学院 福州 350001) 摘要:图像分割是图像处理中的一个重要问题,也是一个经典难题。因此对于图像分割的研究在过去的四十多年里一直受到人们广泛的重视,也提山了数以千计的不同算法。虽然这些算法大都在不同程度上取得了一定的成功,但是图像分割问题还远远没有解决。本文从图像分割的定义、应用等研究背景入手,深入介绍了目前各种经典的图像分割算法,并在此基础比较了各种算法的优缺点,总结了当前图像分割技术中所面临的挑战,最后展望了其未来值得努力的研究方向。 关键词:图像分割 阀值分割 边缘分割 区域分割 一、 引言 图像分割是图像从处理到分析的转变关键,也是一种基本的计算机视觉技术。通过图像的分割、目标的分离、特征的提取和参数的测量将原始图像转化为更抽象更紧凑的形式,使得更高层的分析和理解成为可能,因此它被称为连接低级视觉和高级视觉的桥梁和纽带。所谓图像分割就是要将图像表示为物理上有意义的连通区域的集合,也就是根据目标与背景的先验知识,对图像中的目标、背景进行标记、定位,然后将目标从背景或其它伪目标中分离出来[1]。 图像分割可以形式化定义如下[2]:令有序集合表示图像区域(像素点集),H 表示为具有相同性质的谓词,图像分割是把I 分割成为n 个区域记为Ri ,i=1,2,…,n ,满足: (1) 1,,,,n i i j i R I R R i j i j ===??≠ (2) (),1,2,,i i i n H R True ?== (3) () ,,,i j i j i j H R R False ?≠= 条件(1)表明分割区域要覆盖整个图像且各区域互不重叠,条件(2)表明每个区域都具有相同性质,条件(3)表明相邻的两个区域性质相异不能合并成一个区域。 自上世纪70年代起,图像分割一直受到人们的高度重视,其应用领域非常广泛,几乎出现在有关图像处理的所有领域,并涉及各种类型的图像。主要表现在: 1)医学影像分析:通过图像分割将医学图像中的不同组织分成不同的区域,以便更好的

图像分割算法研究与实现

中北大学 课程设计说明书 学生姓名:梁一才学号:10050644X30 学院:信息商务学院 专业:电子信息工程 题目:信息处理综合实践: 图像分割算法研究与实现 指导教师:陈平职称: 副教授 2013 年 12 月 15 日

中北大学 课程设计任务书 13/14 学年第一学期 学院:信息商务学院 专业:电子信息工程 学生姓名:焦晶晶学号:10050644X07 学生姓名:郑晓峰学号:10050644X22 学生姓名:梁一才学号:10050644X30 课程设计题目:信息处理综合实践: 图像分割算法研究与实现 起迄日期:2013年12月16日~2013年12月27日课程设计地点:电子信息科学与技术专业实验室指导教师:陈平 系主任:王浩全 下达任务书日期: 2013 年12月15 日

课程设计任务书 1.设计目的: 1、通过本课程设计的学习,学生将复习所学的专业知识,使课堂学习的理论知识应用于实践,通过本课程设计的实践使学生具有一定的实践操作能力; 2、掌握Matlab使用方法,能熟练运用该软件设计并完成相应的信息处理; 3、通过图像处理实践的课程设计,掌握设计图像处理软件系统的思维方法和基本开发过程。 2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等): (1)编程实现分水岭算法的图像分割; (2)编程实现区域分裂合并法; (3)对比分析两种分割算法的分割效果; (4)要求每位学生进行查阅相关资料,并写出自己的报告。注意每个学生的报告要有所侧重,写出自己所做的内容。 3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕: 每个同学独立完成自己的任务,每人写一份设计报告,在课程设计论文中写明自己设计的部分,给出设计结果。

数字图像处理中的边缘检测技术

课程设计报告 设计题目:数字图像处理中的边缘检测技术学院: 专业: 班级:学号: 学生姓名: 电子邮件: 时间:年月 成绩: 指导教师:

数字图像处理中的边缘检测技术课程设计报告I 目录 1 前言:查阅相关文献资料,了解和掌握基本原理、方法和研究现状,以及实际应用的背景意义 (1) 1.1理论背景 (1) 1.2图像边缘检测技术研究的目的和意义 (1) 1.3国内外研究现状分析 (2) 1.4常用边缘检测方法的基本原理 (3) 2 小波变换和小波包的边缘检测、基于数学形态学的边缘检测法算法原理 (7) 2.1 小波边缘检测的原理 (7) 2.2 数学形态学的边缘检测方法的原理 (7) 3 算法实现部分:程序设计的流程图及其描述 (9) 3.1 小波变换的多尺度边缘检测程序设计算法流程图 (9) 3.2 数学形态学的边缘检测方法程序设计算法描述 (10) 4实验部分:对所给的原始图像进行对比实验,给出相应的实验数据和处理结果 (11) 5分析及结论:对实验结果进行分析比较,最后得出相应的结论 (15) 参考文献 (17) 附录:代码 (18)

1前言 查阅相关文献资料,了解和掌握基本原理、方法和研究现状,以及实际应用的背景意义 1.1 理论背景 图像处理就是对图像信息加工以满足人的视觉心理或应用需求的方法。图像处理方法有光学方法和电子学方法。从20世纪60年代起随着电子计算机和计算技术的不断提高和普及,数字图像处理进入了高速发展时期,而数字图像处理就是利用数字计算机或其它的硬件设备对图像信息转换而得到的电信号进行某些数学处理以提高图像的实用性。 图像处理在遥感技术,医学领域,安全领域,工业生产中有着广泛的应用,其中在医学应用中的超声、核磁共振和CT等技术,安全领域的模式识别技术,工业中的无损检测技术尤其引人注目。 计算机进行图像处理一般有两个目的:(1)产生更适合人观察和识别的图像。 (2)希望能由计算机自动识别和理解图像。数字图像的边缘检测是图像分割、目标区域的识别、区域形状提取等图像分析领域的重要基础,图像处理和分析的第一步往往就是边缘检测。 物体的边缘是以图像的局部特征不连续的形式出现的,也就是指图像局部亮度变化最显著的部分,例如灰度值的突变、颜色的突变、纹理结构的突变等,同时物体的边缘也是不同区域的分界处。图像边缘有方向和幅度两个特性,通常沿边缘的走向灰度变化平缓,垂直于边缘走向的像素灰度变化剧烈。根据灰度变化的特点,图像边缘可分为阶跃型、房顶型和凸缘型。 1.2 图像边缘检测技术研究的目的和意义 数字图像处理是伴随着计算机发展起来的一门新兴学科,随着计算机硬件、软件的高度发展,数字图像处理也在生活中的各个领域得到了广泛的应用。边缘检测技术是图像处理和计算机视觉等领域最基本的技术,如何快速、精确的提取图像边缘信息一直是国内外研究的热点,然而边缘检测也是图像处理中的一个难题。 首先要研究图像边缘检测,就要先研究图像去噪和图像锐化。前者是为了得到飞更真实的图像,排除外界的干扰,后者则是为我们的边缘检测提供图像特征更加明显的图片,即加大图像特征。两者虽然在图像处理中都有重要地位,但本次研究主要是针对图像边缘检测的研究,我们最终所要达到的目的是为了处理速

图像分割 实验报告

实验报告 课程名称医学图像处理 实验名称图像分割 专业班级 姓名 学号 实验日期 实验地点 2015—2016学年度第 2 学期

050100150200250 图1 原图 3 阈值分割后的二值图像分析:手动阈值分割的阈值是取直方图中双峰的谷底的灰度值作为阈值,若有多个双峰谷底,则取第一个作为阈值。本题的阈值取

%例2 迭代阈值分割 f=imread('cameraman.tif'); %读入图像 subplot(1,2,1);imshow(f); %创建一个一行二列的窗口,在第一个窗口显示图像title('原始图像'); %标注标题 f=double(f); %转换位双精度 T=(min(f(:))+max(f(:)))/2; %设定初始阈值 done=false; %定义开关变量,用于控制循环次数 i=0; %迭代,初始值i=0 while~done %while ~done 是循环条件,~ 是“非”的意思,此 处done = 0; 说明是无限循环,循环体里面应该还 有循环退出条件,否则就循环到死了; r1=find(f<=T); %按前次结果对t进行二次分 r2=find(f>T); %按前次结果重新对t进行二次分 Tnew=(mean(f(r1))+mean(f(r2)))/2; %新阈值两个范围内像素平均值和的一半done=abs(Tnew-T)<1; %设定两次阈值的比较,当满足小于1时,停止循环, 1是自己指定的参数 T=Tnew; %把Tnw的值赋给T i=i+1; %执行循坏,每次都加1 end f(r1)=0; %把小于初始阈值的变成黑的 f(r2)=1; %把大于初始阈值的变成白的 subplot(1,2,2); %创建一个一行二列的窗口,在第二个窗口显示图像imshow(f); %显示图像 title('迭代阈值二值化图像'); %标注标题 图4原始图像图5迭代阈值二值化图像 分析:本题是迭代阈值二值化分割,步骤是:1.选定初始阈值,即原图大小取平均;2.用初阈值进行二值分割;3.目标灰度值平均背景都取平均;4.迭代生成阈值,直到两次阈值的灰 度变化不超过1,则稳定;5.输出迭代结果。

图像边缘检测算法体验步骤

图像边缘检测算法体验步骤 图像边缘检测算法体验步骤(Photoshop,Matlab)1. 确定你的电脑上已经安装了Photoshop和Matlab2. 使用手机或其他任何方式,获得一张彩色图像(任何格式),建议图像颜色丰富,分辨率比较高,具有比较明显的图像边界(卡通图像,风景图像,桌面图像)3. 将图像保存到一个能够找到的目录中,例如img文件夹(路径上没有汉字)4. 启动Photoshop,打开img文件夹中的图像5. 在工具箱中选择“矩形选择”工具,到图面上选择一个区域(如果分辨率比较高,建议不要太大,否则计算过程比较长)6. 点击下拉菜单【文件】-【新建】,新建一个与矩形选择框同样尺寸的Photoshop图像,不要求保存该图像7. 将该彩色图像转换为亮度图像,即点击下拉菜单【图像】-【模式】-【灰度】,如提示是否合并,选择“Yes”8. 将该单色的亮度图像另存为Windows的BMP文件,点击下拉菜单【文件】-【存储为】,在“存储为”窗口中,为该文件起一个名字,例如test1(保存为test1.bmp)9. 启动Matlab,将当期路径(Current Directory)定位到图像文件夹,例如这里的img文件夹10. 使用imread命令读入该图像,在命令行输入:>> f = imread(test1.bmp);11. 在Matlab中显示该图像,在命令行输入:>> figure, imshow(f)12. 然后,分别使用Matlab图像工具箱中的Edge函数,分别使用Sobel算法,高斯-拉普拉斯(Log)算法和Canny算法得到的边缘图像:在命令行输入:>> g_sobel = edge(f, sobel, 0.05); >> g_log = edge(f, log, 0.003, 2.25); >> g_canny = edge(f, canny, [0.04 0.10], 1.5);13 得到边缘图像计算结果后,显示这些边缘图像: >> figure, imshow(g_sobel) >> figure, imshow(g_log) >> figure, imshow(g_canny)14 可以用不同的图像做对比,后续课程解释算法后,可以变换不同的阈值,得到不同的边缘图像

北航数字图象处理实验报告

数字图像处理实验报告 实验二图像变换实验 1.实验目的 学会对图像进行傅立叶等变换,在频谱上对图像进行分析,增进对图像频域上的感性认识,并用图像变换进行压缩。 2.实验内容 对Lena或cameraman图像进行傅立叶、离散余弦、哈达玛变换。在频域,对比他们的变换后系数矩阵的频谱情况,进一步,通过逆变换观察不同变换下的图像重建质量情况。 3. 实验要求 实验采用获取的图像,为灰度图像,该图像每象素由8比特表示。具体要求如下: (1)输入图像采用实验1所获取的图像(Lena、Cameraman); (2)对图像进行傅立叶变换、获得变换后的系数矩阵; (3)将傅立叶变换后系数矩阵的频谱用图像输出,观察频谱; (4)通过设定门限,将系数矩阵中95%的(小值)系数置为0,对图像进行反变换,获得逆变换后图像; (5)观察逆变换后图像质量,并比较原始图像与逆变后的峰值信噪比(PSNR)。 (6)对输入图像进行离散余弦、哈达玛变换,重复步骤1-5; (7)比较三种变换的频谱情况、以及逆变换后图像的质量(PSNR)。 4. 实验结果 1. DFT的源程序及结果 J=imread('10021033.bmp'); P=fft2(J); for i=0:size(P,1)-1 for j=1:size(P,2) G(i*size(P,2)+j)=P(i+1,j); end end Q=sort(G); for i=1:size(Q,2) if (i=size(Q,2)*0.95) t=Q(i); end end G(abs(G)

图像分割常用算法优缺点探析

图像分割常用算法优缺点探析 摘要图像分割是数字图像处理中的重要前期过程,是一项重要的图像分割技术,是图像处理中最基本的技术之一。本文着重介绍了图像分割的常用方法及每种方法中的常用算法,并比较了各自的优缺点,提出了一些改进建议,以期为人们在相关图像数据条件下,根据不同的应用范围选择分割算法时提供依据。 关键词图像分割算法综述 一、引言 图像分割决定了图像分析的最终成败。有效合理的图像分割能够为基于内容的图像检索、对象分析等抽象出十分有用的信息,从而使得更高层的图像理解成为可能。目前图像分割仍然是一个没有得到很好解决的问题,如何提高图像分割的质量得到国内外学者的广泛关注,仍是一个研究热点。 多年来人们对图像分割提出了不同的解释和表达,通俗易懂的定义则表述为:图像分割指的是把一幅图像分割成不同的区域,这些区域在某些图像特征,如边缘、纹理、颜色、亮度等方面是一致的或相似的。 二、几种常用的图像分割算法及其优缺点 (一)大津阈值分割法。 由Otsu于1978年提出大津阈值分割法又称为最大类间方差法。它是一种自动的非参数非监督的门限选取法。该方法的基本思路是选取的t的最佳阈值应当是使得不同类间的分离性最好。它的计算方法是首先计算基于直方图而得到的各分割特征值的发生概率,并以阈值变量t将分割特征值分为两类,然后求出每一类的类内方差及类间方差,选取使得类间方差最大,类内方差最小的t作为最佳阈值。 由于该方法计算简单,在一定条件下不受图像对比度与亮度变化的影响,被认为是阈值自动选取的最优方法。该方法的缺点在于,要求得最佳阈值,需要遍历灰度范围0—(L-1)内的所有像素并计算出方差,当计算量大时效率会很低。同时,在实际图像中,由于图像本身灰度分布以及噪声干扰等因素的影响,仅利用灰度直方

图像分割与边缘检测

实验一、图像分割与边缘检测 一、实验目的 依据边缘检测的理论,实现灰度图像一阶和二阶边缘检测方法,启发学生依据边缘特征进行图像分析与识别,提高学生图像处理与分析能力和实际动手能力。 二、实验内容 1 编程实现一阶差分边缘检测算法,包括Roberts梯度算子、Prewitt算子和Sobel算子。 2 编程实现二阶差分Laplace边缘检测算法。 3 分析与比较各种边缘检测算法的性能。 三、实验原理 1 基本原理分析(略) 2 部分源程序 1)clc all; [I,map]=imread('rice.png'); figure; subplot(3,2,1),imshow(I,map); I=double(I); [IX IY]=gradient(I); GM=sqrt(IX.*IX+IY.*IY); OUT1=GM; subplot(3,2,2);imshow(OUT1,map); OUT2=I; J=find(GM>=10); OUT2(J)=GM(J); subplot(3,2,3),imshow(OUT2,map); OUT3=I; J=find(GM>=10); OUT3(J)=255; subplot(3,2,4),imshow(OUT3,map); OUT4=I; J=find(GM<=10); OUT4(J)=255; subplot(3,2,5),imshow(OUT4,map); OUT5=I; J=find(GM>=10); OUT5(J)=255; Q=find(GM<10); OUT5(Q)=0; subplot(3,2,6),imshow(OUT5,map); 2) I = imread('coins.png'); BW1 = edge(I,'roberts'); BW2 = edge(I,'prewitt'); BW3 = edge(I,'sobel'); BW4 = edge(I,'log'); BW5 = edge(I,'canny'); figure

实验三图像分割与边缘检测

数字图像处理实验报告 学生姓名王真颖 学生学号L0902150101 指导教师梁毅雄 专业班级计算机科学与技术1501 完成日期2017年11月06日

计算机科学与技术系信息科学与工程学院

目录 实验一.................................................................................................. 错误!未定义书签。 一、实验目的.................................................................................................... 错误!未定义书签。 二、实验基本原理 ........................................................................................... 错误!未定义书签。 三、实验内容与要求....................................................................................... 错误!未定义书签。 四、实验结果与分析....................................................................................... 错误!未定义书签。实验总结............................................................................................... 错误!未定义书签。参考资料.. (3) 实验一图像分割与边缘检测 一.实验目的 1. 理解图像分割的基本概念; 2. 理解图像边缘提取的基本概念; 3. 掌握进行边缘提取的基本方法;

Matlab做图像边缘检测的多种方法

Matlab做图像边缘检测的多种方法 1、用Prewitt算子检测图像的边缘 I = imread('bacteria.BMP'); BW1 = edge(I,'prewitt',0.04); % 0.04为梯度阈值 figure(1); imshow(I); figure(2); imshow(BW1); 2、用不同σ值的LoG算子检测图像的边缘 I = imread('bacteria.BMP'); BW1 = edge(I,'log',0.003); % σ=2 imshow(BW1);title('σ=2') BW1 = edge(I,'log',0.003,3); % σ=3 figure, imshow(BW1);title('σ=3') 3、用Canny算子检测图像的边缘 I = imread('bacteria.BMP'); imshow(I); BW1 = edge(I,'canny',0.2); figure,imshow(BW1); 4、图像的阈值分割 I=imread('blood1.tif'); imhist(I); % 观察灰度直方图,灰度140处有谷,确定阈值T=140 I1=im2bw(I,140/255); % im2bw函数需要将灰度值转换到[0,1]范围内 figure,imshow(I1); 5、用水线阈值法分割图像 afm = imread('afmsurf.tif');figure, imshow(afm); se = strel('disk', 15); Itop = imtophat(afm, se); % 高帽变换 Ibot = imbothat(afm, se); % 低帽变换 figure, imshow(Itop, []); % 高帽变换,体现原始图像的灰度峰值 figure, imshow(Ibot, []); % 低帽变换,体现原始图像的灰度谷值 Ienhance = imsubtract(imadd(Itop, afm), Ibot);% 高帽图像与低帽图像相减,增强图像figure, imshow(Ienhance); Iec = imcomplement(Ienhance); % 进一步增强图像

实验二 图像分割与边缘检测

实验二图像分割与边缘检测 一.实验目的及要求 1.利用MATLAB研究图像分割与边缘检测的常用算法原理; 2.掌握MATLAB图像域值分割与边缘检测函数的使用方法; 3.了解边缘检测的算法和用途,比较Sobel、Prewitt、Canny等算子边缘检测的差异。 二、实验内容 (一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。 1.图像阈值分割 clear all, close all; I = imread('rice.tif'); figure (1),imshow(I) figure(2); imhist(I) T=120/255; Ibw1 = im2bw(I,T); %选择阈值T=120/255对图像二值化; figure(3); subplot(1,2,1), imshow(Ibw1); T=graythresh(I); %采用Otsu方法计算最优阈值T对图像二值化; L = uint8(T*255) Ibw2 = im2bw(I,T); subplot(1,2,2), imshow(Ibw2); help im2bw; help graythresh; (令T取不同值,重做上述试验,观察试验结果) 以下是程序执行结果: Comand窗口: L = 125 IM2BW Convert image to binary image by thresholding. IM2BW produces binary images from indexed, intensity, or RGB images. To do this, it converts the input image to grayscale format (if it is not already an intensity image), and then converts this grayscale image to binary by thresholding. The output binary image BW has values of 0 (black) for all pixels

实验三 图像的边缘检测

实验三图像的边缘检测 一、实验目的与要求 1、了解图像边缘提取的基本概念; 2、了解进行边缘提取的基本方法; 3、编程实现对所给图像的边缘进行提取。 二、知识点 1、边缘检测的思想和原理 图像理解是图像处理的一个重要分支,研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。边缘检测实际上就是检测图像特征发生变化的位置。 由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。边缘检测的方法大多数是基于方向导数掩模求卷积的方法。导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。

一阶导数是最简单的导数算子,它们分别求出了灰度在x和y方向上的变化率,而方向上的灰度变化率可以用相应公式进行计算;对于数字图像,应该采用差分运算代替求导,差分公式参考相关教材。 2、常用的梯度算子 (1)Roberts Cross算子,它的2个2 X2模板如图3所示。 图3 Robert Cross算子模板 (2)Prewitt 算子,它的2个3×3模板如图4所示。 图4 Prewitt算子模板 (3)Sobel 算子,它的2个3×3模板如图5所示。 图3 Sobel算子模板 3、高斯拉普拉斯(LoG)算法 高斯拉普拉斯(LoG)算法是一种二阶边缘检测方法。它通过寻找图像灰度值中二阶微分中的过零点(Zero Crossing)来检测边缘点。其原理为,灰度

图像分割实验报告汇总

图像分割实验报告 一、实验目的 1. 掌握图像分割的基本思想,了解其分割技术及其计算策略; 2. 学会从图像处理到分析的关键步骤,掌握图像分割过程; 3. 了解图像分割的意义,进一步加深对图像分析和理解; 4. 掌握基本分割方法:迭代分割和OTSU图像分割,并编程实现。 二、实验原理 (一)迭代阈值分割选取的基本思路是:首先根据图像中物体的灰度分布情况,选取一个近似阈值作为初始阈值,一个较好的方法就是将图像的灰度均值作为初始阈值,然后通过分割图像和修改阈值的迭代过程获得认可的最佳阈值。迭代式阈值选取过程可描述如下: 1. 计算初始化阈值g0=(g max+g min) ; 2 2. 根据g0,将图像分为两部分,分别计算灰度值期望,取其平均值为g1; 3. 如此反复迭代,当|g n-g n?1|足够小时,停止迭代,取T=g n即为最终阈值。 (二)OTSU图像分割(最大类间方差法)是一种自适应的阈值确定的方法,是按图像的灰度特性,将图像分成背景和目标两部分。背景和目标之间的类间方差越大,说明构成图像的两部分的差别

越大, 当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。以最佳门限将图像灰度直方图分割成两部分,使两部分类间方差取最大值,即分离性最大。OTSU阈值选取过程可描述如下: 1.记T为目标与背景的分割阈值,目标点数占图像比例为w1,平均灰度为u1;背景点数占图像比例为w2,平均灰度为u1; 2.图像的总平均灰度为:u=w1*u1+w2*u2; 3.目标和背景图象的方差:g=w1*(u1-u)*(u1-u)+w1*(u2-u)*(u2-u)=w1*w2*(u1-u2)*(u1-u2); 4.当方差g最大时,可以认为此时前景和背景差异最大,此时的灰度T是最佳阈值。 二、实验内容 1. 利用C++编程实现迭代阈值图像分割算法; 2. 利用C++编程实现OTSU动态阈值图像分割算法。 三、实验框图

kmeans图像分割算法

he = imread('f:\3.jpg'); % 读入图像 imshow(he), title('H&E image'); text(size(he,2),size(he,1)+15,... 'Image courtesy of Alan Partin, Johns Hopkins University', ... 'FontSize',7,'HorizontalAlignment','right'); cform = makecform('srgb2lab'); % 色彩空间转换 lab_he = applycform(he,cform); ab = double(lab_he(:,:,2:3)); % 数据类型转换 nrows = size(ab,1); % 求矩阵尺寸 ncols = size(ab,2); % 求矩阵尺寸 ab = reshape(ab,nrows*ncols,2); % 矩阵形状变换 nColors = 3; % 重复聚类3次,以避免局部最小值 [cluster_idx cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ... 'Replicates',3); pixel_labels = reshape(cluster_idx,nrows,ncols); % 矩阵形状改变 imshow(pixel_labels,[]); % 显示图像 title('image labeled by cluster index'); % 设置图像标题 segmented_images = cell(1,3); % 细胞型数组 rgb_label = repmat(pixel_labels,[1 1 3]); % 矩阵平铺 for k = 1:nColors color = he; color(rgb_label ~= k) = 0;

图像边缘检测及提取,分水岭算法

1.几种算子图像边缘提取: 程序代码如下: 运行结果: 原图为一堆苹果(彩图),各算子处理后的边缘提取图:

分水岭算法实现: a.直接对图像进行分水岭算法处理 代码如下:(原图还是上题一堆苹果) 运行结果如右图: 很明显,属于过度分割了。下面有改进算法: b.改进算法代码如下: 实现包括下列步骤: (1)读图像。读入图像 (2)对比度最大化。注意到图像中有许多彼此连通的 不同大小的对象。为使通过watershed变换找到的低 谷数目最小,我们使感兴趣的对象的对比度达到最 大。对比度增强的一个常用的技术是综合应用top— hat和bottom—hat变换。 top—hat变换定义为原图像和它的开之差。图像的 开是一与特定结构元素匹配的图像前景部分的集合。 bottom—hat变换定义为在原图像和它的闭之间的 差。图像的闭是一与特定结构元素匹配的图像背景 的集合。 通用的结构元素是正方形,长方形,圆盘,菱 形,球和线。既然图像中我们感兴趣的目标对象看 起来像圆盘,我们用strel函数建立一个半径为15个 像素的圆盘形结构元素。这个圆盘尺度是图像中的 目标对象的平均半径的一个估计。 (3)图像相加减。为使目标对象与分隔它们的间隙之 间的对比达到最大,用“原图top—hat图像+bottom —hat图像”得到增强的结果图。 ( 4)转换感兴趣的对象。调用watershed变换找出图像 的亮度”低谷”,把imcomplement作用 增强过的图像上,将感兴趣的目标对象转换为亮度低谷,得到增强图的补图。 (5)检测亮度低谷。对所得补图运用imextendedmin函数检测低于某特别阈值的所有亮度低谷。

相关文档
相关文档 最新文档