Bootstrap

数字图像分割(附源代码)

❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀知识点都在学习心得❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

一、实验目的和要求

1、理解图像分割的基本概念。

2、理解图像边缘提取的基本概念。

3、掌握用阈值法和边缘提取方法进行图像分割。

二、实验内容简介

1、图像分割概述

2、边界分割技术

3、区域分割技术

三、实验步骤

1、分别采用Robert算子和Sobel算子进行图像边缘检测

Il=imread('rice.png');        %读取图像
Il=im2double(I1);                %将灰度图像数据类型转换为double
[J1,thresh]=edge(I1,roberts'); %Robert算子边缘检
[J2,thresh]=edge (I1,'sobel'); %sobel算子边缘检测
I2=imread('gantrycrane.png'); %读取图像
I2=rgb2gray(I2);                 %将彩色图像转换为灰度图像
I2=im2double(I2);                %将灰度图像数据类型转换为double
[J3,thresh]=edge(I2,roberts');%Robert算子边缘检
[J4,thresh]=edge(I2,sobel');%sobel算子边缘检测
figure; %显示图像
subplot(231);imshow(I1);title('原图')
subplot(232);imshow(J1);title('roberts边缘')
subplot(233);imshow(J2);title('sobel边缘')
subplot(234);imshow(2) :title('原图')
subplot(235);imshow(J3);title('roberts边缘')
subplot(236);imshow(J4);title('sobel边缘')

 2、分别采用Prewitt算子和拉普拉斯算子进行图像边缘检测

I=imread('cameraman.tif'); %读取图像
I=im2double(I); %将灰度图像数据类型转换为double类型
[J1,thresh]=edge(I,prewitt',[],both'); %rewitt算子进行图像边缘检视
J2=imnoise(I,gaussian',0,0.005); %添加高斯噪声
[K,thresh]=edge(J2,'log',[],2.3); %log算子进行图像边缘检测
figure; %显示图像
subplot(131):imshow(I); title('原图')
subplot(132);imshow(J1); title('prewitt边缘')
subplot(133);imshow(K); title('拉普拉斯边缘')

3、利用峰谷法实现图像tree.tif的目标分割

[X,map]=imread('trees.tif'); %读取图像
J=ind2gray(x,map); %转换为灰度图像
K=im2bw(x,map,0.4); %转换为二值图像
figure; %显示图像
subplot (121); imshow(J); title('原图的灰度图像')
subplot (122); imshow(K); title('全局阈值分割图')

4、从原来的灰度直方图上查看图像阈值,并进行分割

I = imread('cameraman.tif'); %读取图像
figure; subplot(121),imshow(I);
subplot(122),imhist(I); %显示灰度直方图
J = I > 60; %全局阈值为60,波谷大概在60
K = I > 80; %全局阈值为80
fiqure;
subplot(121),imshow(J); %显示阈值为60的
subplot(122),imshow(K); %显示阈值为80的

左边为阈值选取60的,右边为阈值选取80的,可以从裤腿上看出60的细节丰富

5、 利用迭代阈值法实现图像cameraman.tif的目标分割

I=imread('cameraman.tif');%读取图像
I=im2double(I);%将图像数据类型转换为double类型
T0=0.01;%精度
T1=(min(I(:))+max(I(:))) /2; %初始估计阈值
r1=find(I>T1);%找出比阈值大的像素
r2=find(I<=T1);%找出比阈值小的像素
T2=(mean(I(r1)) +mean(I(r2))) /2;%各个像素加和求平均,计算分割后两部分的阈值均值的均值
% while循环进行选代
while abs(T2-T1)<T0%判断迭代是否收敛
T1=T2;%如不收敛,则将分割后的均值的均值作为新的阈值进行循环计算
r1=find(I>T1);%大于阈值的部分
r2=find(I<=T1): %小于阈值的部分
T2=(mean(I(r1)) +mean(I(r2)))/2;%计算分割后两部分的阈值均值的均值
end
J=im2bw(I,T2); %将图像转换成二值图像
figure;%显示图像
subplot(121); imshow(I); title('原图')
subplot(122); imshow(J); title('选代阈值分割图')

 四、习题

1、选择一幅灰度图像,采用阈值法对图像进行分割。

I=imread('cameraman.tif');%读取图像
figure,imshow(I),title('原图');%显示图像
figure,imhist(I),title('灰度直方图);%绘制灰度图像的直方图
gray_min = 73;%分割阈值,根据直方图找到波谷
I(I < gray min) = 0;%低于阈值的置0
I(I >= gray min) = 1;%大于等于阈值的置1
figure,imshow(I,[]),title('前景背景分割图);

五、实验心得

 通过本次实验理解了图像边缘提取的基本概念。学会了用阈值法和边缘提取方法进行图像分割。

 1、边缘检测

边缘检测技术利用灰度的变化信息检测物体边缘,得到物体的轮廓,实现图像分割。边缘检测是所有基于边界的分割方法的第一步。

有噪图像的边缘提取:

噪声消除处理:使用平滑模板或中值滤波等平滑滤波方法消除噪声。

边缘提取处理: 使用拉普拉斯、索贝尔等边缘提取模板突出物体的边缘,而后做二值化处理,得到物体的边缘信息(只保留边缘)。

2、阈值分割

最简单阈值分割方法:首先对一幅灰度取值在g(min)和g(max)之间的图像确定一个灰度阈值T,图像中的每个像素的灰度值与阈值T做比较,将图像分为两类,像素灰度值大于阈值的为一类,像素灰度值小于阈值的为另一类。

阈值分割方法:单阈值分割方法:将图像分为目标和背景两种区域;多阈值分割:如果图像中有多个灰度值不同的区域,可以选择一系列阈值以将每个像素分到合适的类别中去。

(1)全局阈值:仅根据f(x,y)来选取阈值

A、峰谷法:图像的灰度直方图是图像各像素灰度值的一种统计度量;可根据灰度直方图来选取阈值;如果对双峰直方图选取双峰之间的谷所对应的灰度值作为阈值就可将目标和背景分开。优点:实现简单、运算开销小。缺点:不适用于两峰值相差极大,有宽且平谷底的图像;会受到噪声的影响。

imhist(I):显示灰度直方图

B、迭代阈值法

计算初始化阈值g0=(g(min)+g(max))/2;根据g0,将图像分为两部分,分别计算灰度值期望,取其平均值为g1:如此反复迭代,当gn-gn-1足够小时,停止迭代,取T=gn即为最终阈值。

(2)局部阈值:根据f(x,y)和g(x,y)选取阈值

3、算子特点

(1)Roberts算子:利用局部差分算子寻找边缘,边缘定位精度较高,但容易丢失一部分边缘,同时由于图像没经过平滑处理,因此不具备能抑制噪声能力。对陡峭边缘且含噪声少的图像效果较好。

(2)Sobel算子:先做加权平滑处理,再做微分运算,平滑部分的权值有些差异,对噪声具有一定的抑制能力,但不能完全排除虚假边缘。虽然这两个算子边缘定位效果不错,但检测出的边缘容易出现多像素宽度。

(3)LOG算子:先用高斯函数平滑滤波,后用Laplacian算子检测边缘,克服Laplacian算子抗噪声差的缺点,但同时也平滑掉比较尖锐的边缘,尖锐边缘无法检被测到。

4、实验中使用到的函数:

(1)构造函数

function[输出形参]=函数名([输入形参])

(2)size()函数   [m,n] = size(X)

返回矩阵X的尺寸信息, 并存储在m、n中。其中m中存储的是行数,n中存储的是列数。

(3)zeros(m,n)函数:产生m ∗ n m*nm∗n的double类型零矩阵。

(4)im2double(x):数据变为双精度,便于计算,且使计算更加准确。

(5)min():获得最小元素;max():获得最大元素

(6)abs():求数组平均值

(7)find(A):获得符合条件A的元素

(8)mean():求数组平均值

(9)bwlabel():获取连通区域

(10)myconvolve():实验二中编写的实现卷积操作的函数

(11)mysharpen():实验二中编写的根据选择的算子获取图像的边缘的函数

 完结撒花!!

❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

;