【图像分割】基于matlab直方图的自适应阈值方法分割前景与背景【含Matlab源码 2144期】

news/2024/5/14 23:50:31/文章来源:https://blog.csdn.net/TIQCmatlab/article/details/127099180

一、一种基于直方图的实时自适应阈值分割方法简介

1 引言
在交通管理中,为了获得车辆的运动数据,需要对交通视频进行实时监测,从监测图像序列中检测出运动对象,并对运动对象进行分析处理,从而获得车辆和行人的运动数据。实时视频运动对象检测与跟踪是数字图像处理技术的一个主要部分,它是计算机视觉、目标识别与跟踪、安全监控等视频分析和处理的应用的关键技术。常用的视频运动目标检测算法主要有基于相邻帧差分的算法和基于背景图像和当前帧差分的算法。对于背景差法,其基本原理是将当前帧与背景图像进行差分来得到差图像,对得到的差图像还应作二值化处理,从而分割出运动目标。传统的目标分割方法主要包括:阈值法、边缘检测法和区域跟踪法等。其中阈值化方法由于计算简单、运算效率高,所以是图像分割的常用方法。
常用的二值化算法有,最大类间方差法,它是由大津(Otsu N.A)于1979年提出的,是基于整幅图像的统计特性,实现阈值的自动选取的。但是当目标和背景对比不明显即灰度相差不大或图像有噪声时,大津法 (Otsu) 的效果不理想。根据直方图进行分割,一般直方图呈现双峰形状,一个峰为背景,另一个峰对应目标,选择两峰之间的谷作为阈值T来进行分割,能得到较好结果,但是在光照和噪声影响下,不能形成双峰形状。另外对于差图像,其直方图呈现递减形状,而不是双峰形状,故其直方图自适应阈值的确定就不可能用到双峰谷底分割,针对这样的直方图提出了一种自适应阈值的方法,该方法主要思想为,将统计出的频率值从高到低排序,这样就形成了一条光滑递减的直方图曲线,将直方图最高点与最低点连接得到一条直线,然后取出直方图上的到该直线距离最大的点对应的灰度值作为阈值来进行二值化。该算法对每一个点计算距离时,计算量大,速度慢。鉴于此,本文提出了一种快速计算最大距离的方法,避免了大量的乘法运算。

2 一般自适应阈值法
在运动目标检测中,在用背景差方法获得差图像后,通过观察该图像直方图可以看出,直方图基本上是呈递减状态,如图 1 所示,为了保证直方图的递减,将该直方图频率排序,得到一组从高到低的频率,其直方图就绝对递减了,为了消除直方图锯齿,用高斯滤波进行平滑处理,下面就是寻找阈值,用以将图像分割成二值图。该算法步骤如下: (1)寻找直方图上的最高点和最低点,连接得到一条直线。
(2)在直方图上求每一点到该直线的距离。
(3)通过比较求出最大的一个距离,该距离对应的灰度值(横坐标)即为所求阈值T。
(4)用第三步求得的阈值T分割差图像,即:
在这里插入图片描述
在这里插入图片描述

二、部分源代码

close all;
[F_name P_name]=uigetfile(‘*.jpg’,‘Open a jpg’); %文件打开对话框
H= strcat(P_name,F_name);
image_H = imread(H);
[row column] = size(image_H);

%设定三个阈值
set_T = {‘S_T1:’,‘S_T2:’,‘S_T3:’};%设置三个阈值
answer = inputdlg(set_T);%打开输入对话框
if isempty(answer)
return;
end
S_T1 = str2num(answer{1});
S_T2 = str2num(answer{2});
S_T3 = str2num(answer{3});

%original
figure;
imshow(image_H);
title(‘original’);

%S_T1
HH = zeros(row,column);
[r c] = find(image_H>S_T1);
index = sub2ind(size(HH),r,c);
HH(index) = 1;
figure;
imshow(HH);
title(['threshold = ’ num2str(S_T1)]);

%S_T2
HH = zeros(row,column);
[r c] = find(image_H>S_T2);
index = sub2ind(size(HH),r,c);
HH(index) = 1;
figure;
imshow(HH);
title(['threshold = ’ num2str(S_T2)]);

%S_T2
HH = zeros(row,column);
[r c] = find(image_H>S_T3);
index = sub2ind(size(HH),r,c);
HH(index) = 1;
figure;
imshow(HH);
title(['threshold = ’ num2str(S_T3)]);

%自适应阈值法
GrayLevelCount = 256;
image_HH = double(image_H);
histogram = imhist(image_H);
fg = histogram/(row*column);

mean_value = sum(sum(image_HH))/(row*column);
P = 0;
K_array = zeros(GrayLevelCount,1);
for GrayLevel = 1:GrayLevelCount %遍历灰度级
threshold_current = GrayLevel - 1;
P_out = sum(fg(1:threshold_current)); %前景outlook
P_back = 1 - P_out;%背景background

Mean_out = 0;
Mean_back = 0;
for i = 1:GrayLevelCountj = i-1;if i < threshold_current+1   %左侧取到阈值Mean_out = Mean_out + j*fg(i);elseMean_back = Mean_back + j*fg(i);end
end

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]左建军,吴有富.一种基于直方图的实时自适应阈值分割方法[J].毕节学院学报. 2014,32(04)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EMQX Cloud 影子服务:便捷数据缓存服务,加速 IoT 应用开发

全托管 MQTT 消息云服务 EMQX Cloud 可以帮助用户轻松将各类物联网设备连接上云&#xff0c;提供与各类第三方服务的数据集成&#xff0c;助力用户进行高效的数据处理、存储与分析。 为了实现更加便捷的物联网数据处理&#xff0c;进一步简化用户构建物联网应用的开发流程&…

好心情精神心理科:抑郁症,真的会让你变丑!

有患者向好心情平台咨询&#xff1a;“抑郁症多年&#xff0c;我总感觉自己变丑了&#xff0c;脸色也不咋好看&#xff0c;这到底是我的心理作用&#xff0c;还是容貌真有变化呢&#xff1f;” 变丑这件事&#xff0c;不致命&#xff0c;但对于很多人来说&#xff0c;却似乎难…

net转java学习笔记-sqlserver的问题记录

最近公司有个.net项目&#xff0c;用的不是mysql是sqlserver&#xff0c;中间遇到几次问题记录下。 1.navicat连接sqlserver失败 百度了一下这个是缺少了驱动&#xff0c;其实navicat自带了这个驱动&#xff0c;没有安装而已。 打开Navicat的安装路径&#xff0c;Navicat自带s…

qsort:我很强,了解一下(详解过程)

了解qsort&#xff0c;以及模拟实现&#x1f391;情境引入&#x1f388;qsort&#x1f4d6;qsort的头文件&#x1f4c4;开场&#x1f511;qsort的参数&#x1f914;为什么可以对任意类型排序呢&#xff1f;&#x1f4dc;参数参数①参数②参数③最难的参数④&#x1f383;qsort应…

一个完全纯净的windows资源站

网址:https://hellowindows.cn/ hello Windows呢是一个纯净的Windows系统下载网站&#xff0c;从已经淘汰的xp到新推出的win11&#xff0c;大部分的系统版本都涵盖了 且都是中文版本,更加方便 windows server版本也包括在内哦

17 -- 排序算法之希尔排序

希尔排序算法介绍: 希尔排序是希尔于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 写入排序法的基本思想: 希尔排序十八记录按下标的一定增量分组,对每组使用直接插入算法排序:随着增量逐渐…

JAVA毕设项目京东仓库管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)

JAVA毕设项目京东仓库管理系统&#xff08;VueMybatisMavenMysqlsprnigSpringMVC&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&am…

好心情精神心理科医生:哪些精神类药物会影响你的睡眠?

患病后的你是否也因有这种顾虑&#xff0c;迟迟不敢吃药或选择停药呢&#xff1f; 到底哪些精神科药物会引起睡眠问题呢&#xff1f;资料显示&#xff0c;凡是提高多巴胺能和去甲肾上腺素能的药物&#xff0c;都有可能引起睡眠问题。今天&#xff0c;好心情小编带大家一起来看…

G:\r\tcga_example-master\scripts 生存分析 tcgaexample jimmy

G:\r\tcga_example-master\scripts library(survival) library(survminer)## 批量生存分析 使用 coxph 回归方法 # http://www.sthda.com/english/wiki/cox-proportional-hazards-model colnames(phe) head(phe) #event中1 表示存活&#xff08;终点事件&#xff09; #htt…

15Spring Boot整合MyBatis

MyBatis 是一个半自动化的 ORM 框架&#xff0c;所谓半自动化是指 MyBatis 只支持将数据库查出的数据映射到 POJO 实体类上&#xff0c;而实体到数据库的映射则需要我们自己编写 SQL 语句实现&#xff0c;相较于Hibernate 这种完全自动化的框架&#xff0c;Mybatis 更加灵活&am…

windows下Redis多实例部署

当存在多个项目的时候&#xff0c;需要同时部署时&#xff0c;且只有一台服务器时&#xff0c;哪么就需要部署Redis多个实例&#xff0c;原理很简单&#xff0c;多个Redis服务运行使用不同的配置及数据管理。 具体操作如下&#xff1a; 1、进入redis安装目录&#xff0c;找到…

zerotier的planet服务器(根服务器)-搭建教程

应用场景介绍: 利用阿里云服务器,搭建根服务器,把不同局域网打通,实现内网穿透,远程控制。 准备工具: 1、服务端:云服务器(有公网IP)Centos 7.62、客户端: 工控机(或者家里电脑)(Linux) ,公司电脑Windows 搭建私有化 ZeroTier步骤: 一、云服务器上安装服务操作…

python如何制作并安装自建包?

一、依赖 首先检查python是否安装了wheel、setuptools包,没有则使用pip安装pip install wheel --force-reinstallpip install setuptools --force-reinstall 二、准备文件在create_package文件夹下,制作自定义包(myPackage): 在该包下,有aa.py和bb.py两个模块, 同时该包…

win11怎么回去win10?四种方法教你!

win11系统与旧系统相比&#xff0c;在这些方面进行了重大更新&#xff1a;新的开始菜单、通知中心、重新设计的任务栏以及更加美观的圆角窗口&#xff0c;确实给用户带来了不一样的体验。然而&#xff0c;win11有时漏洞频出、BUG不断和兼容性不佳的问题&#xff0c;让很多升级w…

(附源码)springboot企业合同管理系统 毕业设计 161456

springboot企业合同管理系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对企业合同等问…

安装CUDA、anaconda、pytorch

文章目录前言一、CUDA安装1.查看CUDA版本2.安装CUDA2.1 下载CUDA2.2 安装CUDA2.3 测试CUDA安装成功二、anaconda安装1.anaconda下载2.anaconda环境变量配置3.测试anaconda安装成功3.anaconda常见命令操作3.1 清华镜像3.2 切换虚拟环境三、pytorch安装1.anaconda下pytorch安装2.…

YOLOV5模型转onnx并推理

YOLOV5模型转onnx并推理模型转onnx普通模型转onnxyolov5模型转onnxonnx 推理普通模型yolov5模型一、推理二、坐标转换三、非极大值抑制四、根据置信度过滤无用框五、画图六、总代码模型转onnx 普通模型转onnx 加载模型&#xff0c;需要是torch.save保存的模型指定输入输出的名…

模板建立

模板建立 步骤如果还没有建立一个组存储自己的模板,则先选择2(红框处)然后取个名字就好如果已经有组了,在自己建立的组内添加新模板1:后续快速生成使用的代码 2:对该模板的描述 3.模板代码 4.应该是为这个模版声明对应的语言(后附展示具体界面)根据需要选择语言,一般为java,也有…

JMeter详细安装教程

文章目录1 运行环境配置2 JMeter下载3 JMeter环境变量配置与启动3.1 环境变量配置3.2 启动1 运行环境配置 JMeter运行需要java环境&#xff0c;安装JMeter前需要安装配置好Java&#xff0c;参考文章Java环境变量配置详细教程 2 JMeter下载 下载地址&#xff1a;http://jmete…

新一期智能钱包系列:Louis Guthmann和 Ivo Georgiev 讨论账户抽象与智能钱包

Ambire 的 Twitter Space 第 10 集探讨了 EVM 生态系统中的互操作性和资产管理的解决方案。 &#x1f525;&#x1f525;准备好迎接第&#x1f51f;集了吗&#xff1f; 我们将对以太坊账户和智能合约进行研究&#x1f913;&#xff0c;这将会很有趣。&#x1f606; 周四凌晨 1 …