当前位置:首页 » 《随便一记》 » 正文

图像处理之阈值分割[全局阈值、Otsu阈值和迭代式阈值分割]

25 人参与  2023年05月08日 16:17  分类 : 《随便一记》  评论

点击全文阅读


一、阈值分割基本定义

阈值分割技术是最经典和流行的图像分割方法之一,也是最简单的一种图像分割方法。此技术关键在于寻找适当的灰度阈值,通常是根据图像的灰度直方图来选取。它是用一个或几个阈值将图像的灰度级分为几个部分,认为属于同一个部分的像素是同一个物体。它不仅可以极大的压缩数据量,而且也大大简化了图像信息的分析和处理步骤。阈值分割技术特别适用于目标和背景处于不同灰度级范围的图像。该方法的最大特点是计算简单,在重视运算效率的应用场合中得到了广泛的应用。

二、全局阈值分割

1、基本原理

可以通过全局的信息,例如整个图像的灰度直方图。如果在整个图像中只使用一个阈值,则这种方法叫做全局阈值法,整个图像分成两个区域,即目标对象( 黑色)和背景对象(白色)。全局阈值将整个图像的灰度阈值设置为常数。

对于物体和背景对比较明显的图像,其灰度直方图为双峰形状,可以选择两峰之间的波谷对应的像素值作为全局阙值,将图像分割为目标对象和背景。其公式如下:
在这里插入图片描述

其中f(x,y)为点(x,y)的像素值,g(x,y) 为分割后的图像,T为全局阈值,通常通过直方图来获取全局阈值

2、matlab实现

(1)实现代码:

% 采用全局阈值对图像进行分割close all;clear all;clc;I=imread('rice.png');[width,height]=size(I);for i=1:width      % 双重for循环逐个像素进行比较计算    for j=1:height        if(I(i,j)>130)            K(i,j)=1;% 将大于全局阈值的像素点置为1(白色)        else            K(i,j)=0;% 将小于等于全局阈值的像素点置为0(黑色)        end    endendsubplot(131),imshow(I);title('原始图像');subplot(132),imhist(I);title('原始图像直方图');subplot(133),imshow(K);title('全局阈值分割后的图像');

(2)实现效果:
在这里插入图片描述
二、Otsu阈值分割

1、基本原理

最大类间方差法,又称为Otsu算法,该算法是在灰度直方图的基础上采用最小二乘法原理推导出来的,具有统计意义上的最佳分割。它的基本原理是以最佳阈值将图像的灰度值分割成两部分,使两部分之间的方差最大,即具有最大的分离性

设f(x,)为图像IxN的位置(x,y)处的灰度值,灰度级为L,则f(x,y)属于[0,L-1].若灰度级i的所有像素个数为f,则第i级灰度出现的概率为:
在这里插入图片描述
将图像中的像素按灰度级用阈值t划分为两类,即背景C0和目标C1。背景CO的灰度级为0 ~ t-1,目标C1的灰度级为t ~ L-1。背景C0和目标C1对应的像素分别为:{f(x,y)<1}和{f(x,y)>=t}。
在这里插入图片描述
在这里插入图片描述

在MATLAB软件中,函数graythresh()采用Otsu算法获取全局阈值,获取全局阈值后,可以采用函数im2bw()进行图像分割

2、matlab实现

(1)实现代码:

% 采用Ostu算法进行图像分割close all;clear all;clc;I=imread('coins.png');I=im2double(I);% 函数graythresh()采用Ostu算法获取图像(既可以是灰度也可以RGB)的最优阈值,调用格式为level=graythresh(I),level大小介于[0,1之间T=graythresh(I);J=im2bw(I,T);subplot(121),imshow(I);title('原始图像');subplot(122),imshow(J);title('Otsu阈值分割后的图像');

(2)实现效果:
在这里插入图片描述
四、迭代式阈值分割

1、基本原理

迭代阈值法是阈值法图像分割中比较有效的方法,通过迭代的方法来求出分割的最佳阅值,具有一定的自适应性。迭代法阈值分割的步骤如下:

(1) 设定参数T0,并选择一个初始的估计阈值T1。

(2)用阈值T分割图像。将图像分成两部分: G1 是由灰度值大于T1的像素组成,G2是由灰度值小于或等于T1的像素组成。

(3)计算G1和G2中所有像素的平均灰度值u1和u2,以及新的阈值T2 =(u1+u2)/2。

(4)如果|T2-T1|<T0,则推出T2即为最优阈值;否则,将T2赋值给T1,并重复步骤(2) ~ (4) ,直到获取最优阈值。

2、matlab实现

(1)实现代码:

% 采用迭代式阈值进行图像分割close all;clear all;clc;I=imread('cameraman.tif');I=im2double(I);% 第一步:设置参数T0,并选择一个初始的估计阈值T1(取图像I像素值的最小值和最大值的平均值)T0=0.01;T1=(min(I(:))+max(I(:)))/2;% 第二步:用阈值T1分割图像.将图像分成两部分:r1由灰度值大于T1的像素组成,r2是由灰度小于或等于T1的像素组成r1=find(I>T1);% find函数返回素有非零元素的位置r2=find(I<=T1);% 第三步:计算r1和r2中所有像素的平均灰度值h1和h2以及新的阈值T2=(h1+h2)/2T2=(mean(I(r1))+mean(I(r2)))/2;% 第四步:若|T2-T1|<T0,则推出T2即为最优阈值;否则,将T2赋值给T1,并重复步骤2-4直到获取最优阈值if abs(T2-T1)<T0    J=imbinarize(I,T2);  % 使用imbinarize函数进行图像分割else    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=imbinarize(I,T2);  % 使用imbinarize函数进行图像分割endsubplot(121),imshow(I);title('原始图像');subplot(122),imshow(J);title('迭代式阈值分割后的图像');

(2)实现效果:
在这里插入图片描述

注意:除了以上三种阈值分割方法,还有其他方法比如自适应阈值分割(局部阈值分割)、最大熵阈值分割等等。但是我发现自适应阈值分割和最大熵阈值分割基本都是用C++或Python实现,还没有找到合适的使用matlab实现的代码。如果以后有机会,再回来补充吧!

由于刚刚开始学习图像处理,对于很多知识理解不到位。如有错误,恳请指正,任重而道远,慢慢加油!


点击全文阅读


本文链接:http://zhangshiyu.com/post/61583.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 京圈佛子破戒后,我改嫁京圈纨绔(沈墨渊,白晶晶)
  • 前世被闺蜜害死,重生后我让她从太子妃变疯女苏婉儿,清歌完本_前世被闺蜜害死,重生后我让她从太子妃变疯女(苏婉儿,清歌)
  • 全书浏览七零军嫂太彪悍,带三宝上军区离婚(沈清落,陈桂花,陆有为)_七零军嫂太彪悍,带三宝上军区离婚(沈清落,陈桂花,陆有为)全书结局
  • 今天也没变成昨天(周扬陈默)全书免费_(周扬陈默)今天也没变成昨天后续(周扬陈默)
  • 重生后,秦总非要父以子贵(许沐晴,秦越泽)全书浏览_重生后,秦总非要父以子贵全书浏览
  • 他嫌弃我喝两块钱豆浆上不了台面,我结婚后他又哭又闹全书万照,白青青在线
  • 昭然若梦前尘烬列表_昭然若梦前尘烬(温昭然方池雲)
  • 导师借我股票账号,我倒欠五十万(孟潇潇,宁薇)_导师借我股票账号,我倒欠五十万孟潇潇,宁薇
  • 拒绝把外卖券给舍友,竹马送我到迪拜捡垃圾(周钰泽,蒋清清,思源)全书浏览_拒绝把外卖券给舍友,竹马送我到迪拜捡垃圾全书浏览
  • 我的人生,你已出局(程森凌古楚文)_我的人生,你已出局程森凌古楚文
  • 穿书成病娇女配,睁眼就签下离婚协议书(朱楼)_穿书成病娇女配,睁眼就签下离婚协议书
  • 老婆逼我给白月光捐肾,我死后她悔疯了(宋逸晨沈墨白)全书浏览_老婆逼我给白月光捐肾,我死后她悔疯了全书浏览

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1