matlab中图像分割技术之二阈值分割

1.直方图双峰法
2.最大类间方差法
3.迭代法

阈值化图像分割是一种最基本的图像分割方法,其基本原理就是选取一个或多个处于灰度图像范围之中的灰度阈值,然后将图像中各个像素的灰度值与阈值比较,并根据比较的结果将图像中的对应像素分成两类或多类,从而把图像划分成互不重叠的区域集合,达成图像分割的目的。全局阈值分割和局部阈值分割两种。若根据分割算法常用的分割方法有图双峰法、最大类间方差法、迭代法

一、直方图双峰法

该方法依据是图像的直方图,通过对直方图进行各种分析来实现对图像的分割。图像的直方图可以看作是像素灰度值概率分布密度函数的一个近似,假设一幅图像仅包含目标和背景,那么它的直方图所代表的像素灰度值概率密度分布函数实际上就是对应目标和背景的两个单峰分布密度函数的和。图像二值化过程就是在直方图上寻找两个峰、一个谷来对一个图像进行分割,也可以通过两级函数来近似直方图。

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\4.jpg'); %读取图像
I=rgb2gray(i);
newI=im2bw(I,220/255);        %双峰法
subplot(121),
imshow(I) ;
title('原图像')
subplot(122),
imshow(newI) ;
title('双峰法')

在这里插入图片描述

二、最大类间方差法

从统计意义上讲,方差是表征数据分布不均衡的统计量,可通过阈值对这类问题进行分割。最大类间方差法以图像的灰度直方图为依据,以目标和背景的类间方差最大为阈值选取准则,综合考虑了像素邻域以及图像整体灰度分布等特征关系,以经过灰度分类的像素类群之间产生最大方差时候的灰度数值作为图像的整体分割阈值。显然,适当的阈值使得两类数据间的方差越大越好,表明该阈值的确将两类不同的问题区分开了,同时希望属于同一类问题的数据之间的方差越小越好,表明同一类问题具有一定的相似性。

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\2.jpg'); %读取图像
I=rgb2gray(i);
subplot(121),
imshow(I);
title('原始图像')
level=graythresh(I);
BW=im2bw(I, level);              %最大类间方差法分割图像
subplot(122),
imshow(BW)
title('最大类间方差法分割图像')
disp(strcat('graythresh计算灰度阈值:', num2str(uint8(level*255))))

在这里插入图片描述

三、迭代法

迭代法选取阈值的方法为:初始阈值选取为图像的平均灰度T0,然后用T0∞将图像的像素点分作两部分,计算两部分各自的平均灰度,小于T0的部分为TA,大于T0的部分为TB,求TA和TB的平均值T1,将T1作为新的全局阈值代替T0,重复以上过程,如此迭代,直至Tk收敛。具体实现时,首先根据初始开关函数将输入图逐个图像分为前景和背景,在第一遍对图像扫描结束后,平均两个积分器的值以确定一个阈值。用这个阈值控制开关再次将输入图分为前景和背景,并用做新的开关函数。如此反复迭带直到开关函数不在发生变化,此时得到的前景和背景即为最终分割结果。

  clc;                %clc的作用就是清屏幕
	clear;              %clear是删除所有的变量
	close all;          %close all是将所有打开的图片关掉。
	i=imread('E:\我的桌面\MATLAB\练习\2.jpg'); %读取图像
	f=rgb2gray(i);
	subplot(121);
    imshow(f);
    title('原始图像');
    f=double(f);                %下面进行迭代阈值二值化
    T=(min(f(:))+max(f(:)))/2;
    done=false;
    i=0;
    while ~done
        r1=find(f<=T);
        r2=find(f>T);
        Tnew=(mean(f(r1))+mean(f(r2)))/2;
        done=abs(Tnew-T)<1;
        T=Tnew;
        i=i+1;
    end
    f(r1)=0;
    f(r2)=1;
    subplot(122);
    imshow(f);
    title('迭代阈值二值化图像');

在这里插入图片描述
有时候几种方法可能取得是同一种效果。

  • 8
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值