大津算法的matlab实现

这篇具有很好参考价值的文章主要介绍了大津算法的matlab实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大津算法详解

一、算法功能

​ 图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。

​ 大津算法也称最大类间差法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。

二、图像的简单分类

​ 一般而言,图像分为彩色图,灰度图,二值图。在计算机处理中,一般将图片作为一个包含多个通道的像素矩阵来处理。若将图片长度计为m,图片宽度计为n,有如下:

​ 彩色图:有R,G,B三原色。三个通道,每个通道的矩阵大小为图片大小。矩阵大小为m×n×3

​ 灰度图:只有一个颜色通道,值域为0-255,矩阵大小为m×n

​ 二值图:只有一个颜色通道,值域为0或1,矩阵大小为m×n

三、大津分割算法

​ 大津算法目标为从所有的像素值中寻找类间方差最大的像素值,将其作为分割的界限,即阈值。使得比该阈值小的像素值为0,其余为1。

1.类间方差
      ω0=N0/ (M×N)             (1)
      ω1=N1/ (M×N)             (2)
    N0+N1=M×N                (3)
    ω0+ω1=1                (4)
    μ=ω0*μ0+ω1*μ1            (5)
    g=ω0(μ0-μ)^2+ω1(μ1-μ)^2  (6)
将式(5)代入式(6),得到等价公式:
    g=ω0ω1(μ0-μ1)^2              %类间方差方差 
2.求类间方差最大值对应的像素值

​ 首先,从图片的像素点中寻找出像素最大值与像素最小值。我们要遍历的灰度值便在这最大值与最小值之间。

Max = max(Imag(:));               % 最大值
Min = min(Imag(:));               % 最小值
T = Min:Max;                     % 灰度值范围

​ 其次,遍历这些灰度值,按照公式计算前景比例,背景比例,前景灰度平均值,背景灰度平均值。并按照这些参数计算方差。

for i = 1 : length(T)
TK = T(i);
iFg = 0;          % 前景
iBg = 0;          % 背景
FgSum = 0;    % 前景总数
BgSum = 0;    % 背景总数
W1=Imag>TK;
WK1=W1.*Imag;
iFg1=sum(W1(:));%求前景比例
iBg1=imagSize-iFg1;
FgSum1=sum(WK1(:));
BgSum1=sum(Imag(:))-FgSum1;

w0 = iFg1/imagSize;      % 前景比例
w1 = iBg1/imagSize;     % 背景比例
u0 = FgSum1/iFg1;         % 前景灰度平均值
u1 = BgSum1/iBg1;        % 背景灰度平均值
Tval(i) = w0*w1*(u0 - u1)*(u0 - u1);     % 计算方差
end

​ 得到方差矩阵后,寻找最大下标对应的像素值即为阈值。(部分代码参考(52条消息) MATLAB图像处理——大津阈值分割(附代码)_HNU_刘yuan的博客-CSDN博客_大津阈值,对其进行了优化)

[~, flag] = max(Tval);             % 最大值下标
TValue = T(flag);
3.根据得到的阈值进行图像分割
BW = im2bw(I, T/255);%转为二值图像
4.结果展示

大津算法的matlab实现文章来源地址https://www.toymoban.com/news/detail-480528.html

四、完整代码

clear; clc;
F=imread('SF.jpg');%彩图
I=rgb2gray(F);%灰度图
subplot(2, 2, 1)
imshow(I);
xlabel('(a) 灰度图');

T = OTSU(double(I));     %使用大津法计算阈值
disp(['大津法计算灰度阈值:', num2str(T)])
BW = im2bw(I, T/255);%转为二值图像
%阈值分割
subplot(2, 2, 2)
imshow(BW);
xlabel('(b) 大津法');
 
subplot(2, 2, 3)
imshow(F);
xlabel('(c) 彩色图');
function TValue = OTSU(Imag)

Max = max(Imag(:));              % 最大值
Min = min(Imag(:));               % 最小值
T =Min:Max;                        % 灰度值范围
Tval = zeros(size(T));               % 方差


[Row,Col]=size(Imag);


imagSize = Row*Col;            % 像素点数量
% 遍历灰度值
for i = 1 : length(T)
    TK = T(i);
    iFg = 0;          % 前景
    iBg = 0;          % 背景
    FgSum = 0;    % 前景总数
    BgSum = 0;    % 背景总数
    W1=Imag>TK;
    WK1=W1.*Imag;
    iFg1=sum(W1(:));%求前景比例
    iBg1=imagSize-iFg1;
    FgSum1=sum(WK1(:));
    BgSum1=sum(Imag(:))-FgSum1;

    w0 = iFg1/imagSize;      % 前景比例
    w1 = iBg1/imagSize;     % 背景比例
    u0 = FgSum1/iFg1;         % 前景灰度平均值
    u1 = BgSum1/iBg1;        % 背景灰度平均值
    Tval(i) = w0*w1*(u0 - u1)*(u0 - u1);     % 计算方差
end
[~, flag] = max(Tval);             % 最大值下标
TValue = T(flag);
end

到了这里,关于大津算法的matlab实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MATLAB源码-第106期】基于matlab的SAR雷达系统仿真,实现雷达目标跟踪功能,使用卡尔曼滤波算法。

    1. 雷达系统参数设定:    - 工作频率:选择一个适合的工作频率,例如X波段(8-12 GHz)。    - 脉冲重复频率(PRF):设定一个适当的PRF,确保雷达覆盖所需的范围。    - 天线增益和波束宽度:根据目标探测的需求确定天线的增益和波束宽度。 2. 目标和环境模拟:

    2024年01月16日
    浏览(57)
  • Matlab数学建模算法详解之混合整数线性规划 (MILP) 算法(附完整实现代码)

    🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥  推荐专栏:《算法研究》 ####  防伪水印—— 左手の明天 #### 💗 大家好🤗🤗🤗,我是 左手の明天 !好久不见💗 💗今天分享matlab数学建模算法—— 混合整数线性规划 (MILP) 算法 💗

    2024年02月04日
    浏览(48)
  • Dijkstra算法和Floyd算法详解(MATLAB代码)

    Dijkstra 算法是由 E.W.Dijkstra 于 1959 年提出,又叫迪杰斯特拉算法,它应用了贪心算法模式,是目前公认的最好的求解最短路径的方法。算法解决的是有向图中单个源点到其他顶点的最短路径问题,其主要特点是每次迭代时选择的下一个顶点是标记点之外距离源点最近的顶点。

    2024年02月16日
    浏览(36)
  • Matlab数学建模算法之模拟退火算法(SA)详解

    🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥  推荐专栏:《算法研究》 🔐####  防伪水印——左手の明天 #### 🔐 💗 大家好🤗🤗🤗,我是 左手の明天 !好久不见💗 💗今天分享 matlab数学建模算法 —— 模拟退火算法 💗

    2024年01月16日
    浏览(43)
  • 智能算法之浣熊优化算法(COA),原理公式详解,附matlab代码

    长鼻浣熊优化算法( Coati Optimization Algorithm , COA )是一种新型元启发式优化算法,该算法是受浣熊狩猎行为启发而提出的,具有进化能力强、搜索速度快、寻优能力强的特点。该成果于 2023 年发表在知名 SCI 期刊 Knowledge-Based Systems 上。目前谷歌学术上查询被引 94 次。 先说一

    2024年02月02日
    浏览(51)
  • 【MATLAB图像处理实用案例详解(8)】—— 图像数字水印算法

    数字水印技术作为信息隐藏技术的一个重要分支,是将信息(水印)隐藏于数字图像、视频、音频及文本文档等数字媒体中,从而实现隐秘传输、存储、标注、身份识别、版权保护和防篡改等目的。 随着 1996 年第一届信息隐藏国际学术研讨会的召开,数字水印技术的研究得到了迅

    2024年02月10日
    浏览(58)
  • 【老生谈算法】基于matlab的指纹处理和识别算法详解及程序源码——指纹识别算法

    大家好,今天给大家介绍基于matlab的指纹处理和识别程序项目设计与原理。 文章目录: 文件列表: main.m--------主程序。 imgread.m-----图像读取函数。 imgchg.m------将真彩色图像转换为灰度图像的函数。 imgcut.m------图像分割函数。 imgflt.m------图像去噪滤波。 imgdir.m------计算方向图

    2024年02月05日
    浏览(50)
  • Matlab数学建模算法之小波神经网络详解

    🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥  推荐专栏:《算法研究》 🔐####  防伪水印——左手の明天 #### 🔐 💗 大家好🤗🤗🤗,我是 左手の明天 !好久不见💗 💗今天分享

    2024年02月20日
    浏览(52)
  • 基于FPGA和Matlab实现的FFT功能验证

    微信公众号上线,搜索公众号 小灰灰的FPGA ,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 一 、FFT设计验证思路 1、基于Matlab与FPGA的混频sin信号的FF

    2024年02月12日
    浏览(33)
  • 路径规划 | 详解维诺图Voronoi算法(附ROS C++/Python/Matlab仿真)

    🔥附C++/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。 🚀详情:图解自动驾驶中的运动规划(Motion Planning),附几十种规划算法 在地图结构 | 图解维诺

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包