大津阈值法MATLAB实现

大津阈值法MATLAB实现关于大津阈值法的定义这里不再赘述 直接给出实现代码 image graythresh mfunctionlev image graythresh I 该函数作用 使用大津阈值法找出图像分割的阈值 M N size I 预定义划分的两组 分别为 C1 C2 预定义 level 用于存放不同划分时的类间方差 C1 zeros 1 M N C2 ze

关于大津阈值法的定义这里不再赘述,直接给出实现代码:

%image_graythresh.m

function level =image_graythresh(I)

%该函数作用:使用大津阈值法找出图像分割的阈值

[M,N] = size(I);

%预定义划分的两组,分别为C1、C2。预定义level,用于存放不同划分时的类间方差

C1 = zeros(1,M*N);

C2 = zeros(1,M*N);

level =zeros(1,M*N);

I = double(I);         %将原图像uint8型转换为double型

%求出原图像灰度最大、最小值

min_value =min(min(I));                                              

max_value =max(max(I));

%定义C1、C2、level的下标,同时起统计个数的作用

columns1 = 1;

columns2 = 1;

columns3 = 1;

%开始遍历

for k =min_value:max_value – 1

    for i = 1:M

        for j = 1:N

            if I(i,j)<=k

                C1(columns1)  = I(i,j);        %得分组C1

                columns1 = columns1 + 1;

            else

                C2(columns2)  = I(i,j);        %得到分组C2

                columns2 = columns2 + 1;

            end

        end

    end

       %得到C1、C2的概率

    posibility1 = (columns1-1) / (M*N);

    posibility2 = 1 – posibility1;

       %得到C1、C2的均值

%由于预定义个数大于实际个数,因而求均值时不记录多余的零

    ave1 = sum(C1)/numel(find(C1~=0));        

    ave2 = sum(C2)/numel(find(C2~=0));        

       %得到类间方差,存放在leve中

    std = posibility1*posibility2*(ave1 -ave2)^2;

    level(columns3) = std;

    columns3 = columns3 + 1;

    columns1 = 1;

    columns2 = 1;

    C1 = zeros(1,M*N);

    C2 = zeros(1,M*N);

end

%得到最大类间方差下标从而得到阈值

[~, i] =max(level);

level = min_value +i – 1;

%对阈值做归一化处理

level = level/255;

end

%DIP_exp4_1.m

%该m文件调用Matlab自带函数graythresh以及自编函数image_graythresh对图像进行阈值分割

clc;clear;closeall;

I =imread(‘cameraman.tif’);

level =graythresh(I);            %得到大津阈值法阈值(Matlab自带函数)

J = im2bw(I,level);              %实现图像二值化,即非黑即白

level1 =image_graythresh(I);              %得到大津阈值法阈值(自编函数)

K =im2bw(I,level1);                   

subplot(221),imshow(I);title(‘原图像’);

subplot(222),imshow(J);title(‘大津法阈值分割后图像’);

subplot(223),imshow(I);title(‘原图像’);

subplot(224),imshow(K);title(‘自编大津法阈值分割后图像’);

运行DIP_exp4_1.m文件得结果如下:

大津阈值法MATLAB实现

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177288.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:52
下一篇 2026年3月26日 下午7:52


相关推荐

  • Spring Security CAS认证

    Spring Security CAS认证13.7CAS认证13.7.1概述JA-SIG生产一种称为CAS的企业级单点登录系统。与其他计划不同,JA-SIG的中央身份验证服务是开源的,广泛使用的,易于理解,独立于平台,并支持代理功能。SpringSecurity完全支持CAS,并提供从SpringSecurity的单应用程序部署到企业级CAS服务器保护的多应用程序部署的轻松迁移路径。您可以在https://www.ape…

    2022年6月25日
    70
  • 技术向销售学什么(一)

    技术向销售学什么(一)

    2021年8月15日
    51
  • java拦截器_Java拦截器[通俗易懂]

    java拦截器_Java拦截器[通俗易懂]拦截器,主要用于拦截前端请求,常用于登录检查。下面是演示使用拦截器拦截未登录的用户访问需要登录的模块情景,使用配置方式实现和注解方式实现代码:配置方式:1、web.xml中配置监听器,对于所有的/admin开头的请求,都走com.blog.interceptor.LoginInterceptor这个拦截器。2、再看com.blog.interceptor.LoginInterceptor的实现代码…

    2022年4月29日
    189
  • python如何安装numpy模块?

    python如何安装numpy模块?python 安装 numpy 模块 pythonnumpy 安装思路第一次安装时的思路第一次安装时遇到的坑第二次安装的思路 快速安装避免踩坑 pythonnumpy 安装思路在 python3 X 版本都自带有 pip 什么是 pip pip 是 Python 包管理工具 该工具提供了对 Python 包的查找 下载 安装 卸载的功能 引用自菜鸟教程如何判断自己的 python 是否安装有 pip 可以在 cmd 上通过以下代码进行判断 pipversion 我的 python 没有 pip 是怎么回事 版本问题

    2026年3月18日
    1
  • Kotlin-三目表达式Kotlin版

    Kotlin-三目表达式Kotlin版由于 Kotlin 没有三目表达式这种写法 一般用 ifelse 就可以 但是写起来比较麻烦 于是我便写了个扩展函数 支持 Boolean 和表达式 感觉还行 如果大家有更好的方案 可以留言 authorxuneve createon2021 10 2618 20 description fun T Boolean judge positiveValu T negativeValu T if this T

    2026年3月17日
    2
  • Python多线程(自学必备 超详细)

    Python多线程(自学必备 超详细)多线程技术多任务 1 1 多任务的概念多任务 在同一时间内执行多个任务 可以把每个任务理解为生活当中的每个活 1 2 现实生活中的多任务操作系统可以同时运行多个任务 比如 你一边打游戏 一边和队友沟通 这就是多任务操作系统轮流让各个任务交替执行 任务 1 执行 0 01 秒 切换到任务 2 任务 2 执行 0 01 秒 再切换到任务 3 执行 0 01 秒 这样反复执行下去 表面上看 每个任务都是交替执行的 但是 由于 CPU 的执行速度实在是太快了 我们感觉就像所有任务都在同时执行一样 单核 cpu 是并发的执行多任

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号