Matlab图像处理-自适应阈值

news2024/11/24 21:01:43

 自适应阈值

在许多的情况下,背景的灰度值并不是常数,物体和背景的对比度在图像中也有变化。这时,一个在图像中某一区域效果良好的阈值在其它区域却可能效果很差。在这种情况下,把灰度阈值取成一个随图像中位置缓慢变化的函数值是适宜的。

 一种处理这种情况的方法就是将图像进一步细分为子图像,并对不同的子图像使用不同的阈值进行分割。这种方法的关键问题是如何将图像进行细分和如何为得到的子图像估计阈值。

示例代码

clc,clear all, close all;
img = imread('shouxieyingyu.png');%原图
I_gray = rgb2gray(img);%转换为灰度图
subplot(121),imshow(img);
I_double = double(I_gray); %转换为双精度
[wid,len] = size(I_gray);%图像的大小
colorLevel = 256; %灰度级
hist=zeros(colorLevel,1);%直方图
%计算直方图
for I =1:wid
    for j =1:len
        m = I_gray(i,j)+1;%图像的灰度级m
        hist(m) = hist(m)+1;%灰度值为i的像素和
    end
end
 %直方图归一化
 hist = hist/(wid*len);%各灰度值概率 Pi
 miuT = 0;%定义总体均值
 for m = 1:colorLevel
     miuT = miuT+(m-1)*hist(m);  %总体均值
 end
 xigmaB2 = 0;
 for mindex = 1:colorLevel
     threshold = mindex-1;%设定阈值
     omega1 = 0;%目标概率
     omega2 = 0;%背景概率
     for m = 1:threshold-1
         omega1 = omega1+hist(m);% 目标概率 W0
     end
   omega2 = 1-omega1; %背景的概率 W1
     miu1=0;%目标的平均灰度值
     miu2=0;%背景的平均灰度值
     for m=1:colorLevel
         if m<threshold
             miu1=miu1+(m-1)*hist(m);%目标 i*pi的累加值[1 threshold]
         else
             miu2=miu2+(m-1)*hist(m);%背景 i*pi的累加值[threshold m]
         end
     end
     miu1 = miu1/omega1;%目标的平均灰度值
     miu2 = miu2/omega2;%背景的平均灰度值
     xigmaB21 = omega1*(miu1-miuT)^2+omega2*(miu2-miuT)^2;%最大方差
     xigma(mindex) = xigmaB21;%先设定一个值 再遍历所有灰度级
     %找到xigmaB21的值最大
     if xigmaB21>xigmaB2
         finalT = threshold;%找到阈值 灰度级
         xigmaB2 = xigmaB21;%方差为最大
     end
 end
%阈值归一化
 fT = finalT/255;
 for i = 1:wid
      for j = 1:len
          if I_double(i,j)>finalT %大于所设定的均值 则为目标
              bin(i,j) = 1;
          else
              bin(i,j) = 0;
          end
      end
 end

subplot(122),imshow(bin);

效果图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/994971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度优先搜索遍历与广度优先搜索遍历

目录 一.深度优先搜索遍历 1.深度优先遍历的方法 2.采用邻接矩阵表示图的深度优先搜索遍历 3.非连通图的遍历 二.广度优先搜索遍历 1.广度优先搜索遍历的方法 2.非连通图的广度遍历 3.广度优先搜索遍历的实现 4.按广度优先非递归遍历连通图 一.深度优先搜索遍历 1.深…

D. Matrix Cascade

Problem - D - Codeforces 思路&#xff1a;这个题就是要维护每个位置被修改了几次&#xff0c;但是一直没想到一个好的方法&#xff0c;一直在关注这个点对下面的点产生的影响&#xff0c;但是其实我们可以维护这个点能够由那几个点影响&#xff0c;其实就是一个以x,y为下顶点…

如何把glb格式模型gltf格式模型导入3dmax和C4D,U3D,UE4这些主流软件中

咱有时候去glbxz.com添加链接描述 官网下载免费glb格式模型&#xff0c;gltf模型下载时候是没有通用格式&#xff0c;例如fbx&#xff0c;obj&#xff0c;这个时候3dmax和C4D直接打开导入是不行的&#xff0c;也可以制作glb模型&#xff0c;扣扣&#xff1a;424081801 这个时候…

扫地僧万能HTML模板站群【搜狗站群单站模式内页收录】配置教程

浅测【搜狗内页收录较好】可自行进行测试对比 [测试的域名有搜狗蜘蛛&#xff0c;但是不收录] [一换程序嘎嘎乱叫] [测试的为内页收录&#xff0c;非泛站] [泛站容易被端&#xff0c;搜狗不建议泛站] 第一步配置SEO设置如图&#xff1a; 站群模式&#xff1a;单站 泛站…

网络延迟简介:为什么它重要,如何测量

1、什么是延迟呢? 延迟其实就是我们在网页浏览或者使用应用时,从我们点击请求到服务器返回结果给我们之间的时间差。就像你在跟朋友打电话,你说完话后,朋友听到并回应你所说话的时间差一样。 我们的最终目标是创建一个系统,让这个时间差变得尽可能短,也就是实现零延迟。…

使用Mybatis实现基本的增删改查------数据输出

需要和批量注入一起使用 当sql返回的实体类在java中没有的时候,可以使用map接值 开启自动事务提交openSession(true),事务在最后会进行自动提交 //3.获取Sqlsession对象[自动开启JDBC]//会自动开启事务,不会自动提交事务.但是提交事务需要sqlsession.commit()方法//openSession…

【C++】day2学习成果:引用、结构体等等。。。

1.封装一个结构体&#xff0c;结构体中包含一个私有数组&#xff0c;用来存放学生的成绩&#xff0c;包含一个私有变量&#xff0c;用来记录学生个数&#xff0c; 提供一个公有成员函数&#xff0c;void setNum(int num)用于设置学生个数 提供一个公有成员函数&#xff1a;void…

Python进阶语法之推导式

目录 目录 前言 思维导图 1.普通写法 1.1代码解读 1.2,结果展示 2.列表推导式 2.1,重要 2.2,列表推导式初步写法 2.2.1,代码解读 2.2.2,结果展示 2.3,列表表达式之条件判断式 2.3.1,代码解读 2.3.2,结果展示 2.4,进行两层for循环 2.4.1,代码解读 2.4.2,结…

【PowerQuery】Excel 的自动刷新功能-最低一分钟刷新

在Excel集成了PowerQuery之后,它提供了数据的手动刷新功能之外,也提供了数据的自动刷新功能。需要注意的是,PowerQuery提供的自动刷新功能是针对连接的,也就是说在PowerQuery自动刷新功能不是全局刷新功能,而是针对连接本身提供。接下来我们来看一下如何实现PowerQuery连接…

Python绘图——生存曲线

今天我们将一起学习如何利用Python中____lifelines包_____建模和分析生存数据并用plot_绘制生存曲线&#xff0c;以及更改其样式如标题字号大小&#xff0c;坐标轴及图例设置等&#xff0c;使用Python即可绘制出SCI论文图&#xff01;___” lifelines包 lifelines 是一个 Pyt…

猫头虎的技术笔记:Spring Boot启动报错解决方案

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

算法竞赛个人注意事项

浅浅记录一下自己在算法竞赛中的注意事项。 数据类 注意看数大小&#xff0c;数学库中的函数尽量加上 * 1.0&#xff0c;转成double&#xff0c;防止整型溢出。&#xff0c;int型相乘如果可能溢出&#xff0c;乘 * 1LL。 数据范围大于1e6&#xff0c;注意用快读。 浮点数输…

桉木建筑模板与其他常见建筑模板材料相比有什么优势?

桉木建筑模板与其他常见建筑模板材料相比具有以下优势&#xff1a; 1. 强度和稳定性&#xff1a;桉木具有较高的密度和硬度&#xff0c;使其具备出色的抗弯和抗压能力。相比于其他常见建筑模板材料如胶合板或钢模板&#xff0c;桉木建筑模板能够更好地承受施工期间的荷载和压力…

类和对象的基本概念

目录 c和c中结构体的区别 类的封装 c语言中的行为和属性封装存在的问题 c中对事物的封装——类的封装 尽量将成员变量设置为private 代码示例 c和c中结构体的区别 c语言中struct只有变量,不能存放函数&#xff0c;也就是数据&#xff08;属性&#xff09;和行为&#xf…

学信息系统项目管理师第4版系列06_项目管理概论

1. 项目基础 1.1. 项目是为创造独特的产品、服务或成果而进行的临时性工作 1.1.1. 独特的产品、服务或成果 1.1.2. 临时性工作 1.1.2.1. 项目有明确的起点和终点 1.1.2.2. 不一定意味着项目的持续时间短 1.1.2.3. 临时性是项目的特点&#xff0c;不是项目目标的特点 1.1…

什么是 DNS 隧道以及如何检测和防止攻击

什么是 DNS 隧道&#xff1f; DNS 隧道是一种DNS 攻击技术&#xff0c;涉及在 DNS 查询和响应中对其他协议或程序的信息进行编码。DNS 隧道通常具有可以锁定目标 DNS 服务器的数据有效负载&#xff0c;允许攻击者管理应用程序和远程服务器。 DNS 隧道往往依赖于受感染系统的…

记一起小意外事件引起的批量重命名文件名

一、事件描述 某次,因某业务系统迁移,一线人员对业务目录误操作,执行打包命令过程中导致Tomcat下的web应用程序无法使用,检查后发现项目下所有文件名都加了gz格式;询问一线,发现是对项目目录执行了:gzip -r ./tomcat导致程序文件找不到;报错如下: 二、事件处理 1、查看…

联表查询的时候外键id是字符串

联表查询的时候外键id是字符串 例&#xff1a; 第一种&#xff1a;可以使用&#xff1a;FIND_IN_SET 关键字进行查询&#xff08;推荐&#xff09; SELECTt.task_name,t.task_id,t.common_ids,t.task_description,t.task_type,t.task_state,t.task_start_time,t.task_end_tim…

算法-88.合并两个有序数组-⭐

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并后数组…

在Qt5中SQLite3的使用

一、SQLite简要介绍 什么是SQLite SQLite是一个进程内的库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库&#xff0c;这意味着与其他数据库不一样&#xff0c;您不需要在系统中配置。 就像其他数据库&#xff0c;S…