matlab静态图像分割与边缘检测与图像压缩与编码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号14102500892

光电图像处理实验报告

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

作者肖剑洪专业电子科学与技术学院物理与电子学院指导老师王晓明

完成时间2013.12.2

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

一、实验目的

1.学习常用的图像分割与边缘检测方法,并通过实验使学生体会一些主要的分割算子对图像处理的效果,以及各种因素对分割效果的影响;

2.观察图像分割的结果,产生对所讲述理论知识的直观认识,加深对图像分割与边缘检测相关理论知识的理解。

3.掌握常用图象分割及边缘检测方法的算法设计及编程实现;

4.学会使用MATLAB软件中关于图像分割与边缘检测的函数;

二、实验设备

联想图像处理工作站

三、实验内容及要求

1.自己编写M-function实现图像阈值分割算法,要求该程序能对256级灰度图像进行处理,显示处理前、后图像;

2.自己编写M-function实现利用Sobel算子进行图像边缘检测的算法,并对图像进行检测,显示原图像、处理后的图像。

3.调用Matlab自带的图像处理函数,用不同的算子对图像进行分割、边缘检测,比较结果。

4.结合以上实验内容,使用ICETECK-DM642-IDK-M实验系统进行相应的动态视频图像分割及边缘检测,观察结果。

四、实验原理

1.图像分割

图像分割是将图像划分成若干个互不相交的小区域的过程,小区域是某种意义下具有共同属性的像素的连通集合。图像分割有三种不同的途径:区域法、边界法、边缘法。最常用的是灰度阈值化处理进行的图像分割:

(,)(,)255

(,)f x y T g x y f x y T

⎧<⎪=⎨

≥⎪⎩

域值T 的选取直接影响分割的效果! (1)直方图双峰域值选择 (2)迭代域值选择

迭代思想:选择一个初始估计值,通过某种策略不断改进(调制)新的估计值,直到满足给定的准则。 迭代步骤:

⑴选择一个初值估计值T ,一般为最大灰度值和最小灰度值的中间值; ⑵使用域值T 分割图像,得到两组像素G1(>=T)和G2(

⑸重复步骤2~4,直到新域值的改变量小于预先定义的参数e 。 (3)最大类间方差法(Otsu ) 思想:

⑴将图像中目标和背景看作分属不同类别的像素组成;

⑵判别分析法的目标是确定域值使分属不同类别的像素的类间方差最大。 1.边缘检测

灰度或结构等信息的突变出称为边缘,在空间域借助微分算子通过卷积来完成,而空域的微分在离散数字图像可以采用差分来近似。

基于一阶导数的边缘检测算子有Robert 算子、Sobel 算子、Prewitt 算子等,基于二阶导数的边缘检测算子有Laplace 算子,LOG 算子是一种改进的方式。Sobel 算子为一对模板:

五、实验步骤

1.根据实验内容的要求在MATLAB 软件中编写相应程序;

1)灰度阈值分割实验(使用迭代阈值选择方法)

2)使用Sobel 算子的边缘检测实验

3)调用Matlab已有的图像处理函数,对图像进行分割和边缘检测

a.调用边缘检测函数edge,并与自己编写的函数运行结果进行比较;

b.用其他边缘检测算子和分割方法对图像进行处理,并对结果进行比较。2.调试运行程序,并记录结果。

3.结合以上实验内容,使用ICETECK-DM642-IDK-M实验系统进行相应的动态视频图像增强处理,观察结果。

4.完成实验报告。

六、实验程序清单和实验结果及分析

1.图像分割

clear all, close all;

H= imread('f:/1.jpg');

I=rgb2gray(H);

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);

(2)迭代域值选择

clc;clear all;

H=imread('f:/1.jpg');

I=rgb2gray(H);

I=double(I)/255;

k1=(max(max(I))+min(min(I)))/2;

[rows cols]=size(I);

count1=0;

count2=0;

for i=1:rows

for j=1:cols

if I(i,j)

count1=count1+1;

G1(count1).I=I(i,j);

else

count2=count2+1;

G2(count2).I=I(i,j);

end

end

end

k2=(mean(mean([G1.I]))+mean(mean([G2.I])))/2; while(abs(k2-k1)>(5/255))

k1=k2;

count1=0;

count2=0;

for i=1:rows

for j=1:cols

if I(i,j)

count1=count1+1;

G1(count1).I=I(i,j);

else

count2=count2+1;

G2(count2).I=I(i,j);

相关文档
最新文档