【数字图像处理+MATLAB】通过迭代全局阈值处理算法(Iterative Global Algorithm)实现图像分割

devtools/2024/11/29 5:13:01/

引言

图像分割是将数字图像划分为多个区域(或像素的集合)的过程,这些区域通常对应于真实世界的物体或图像中的特定部分。图像分割的目标是简化或改变图像的表示形式,使得图像更容易理解和分析。图像分割通常用于定位图像中的物体和边界(线,曲线等)。在某些情况下,图像分割还可以用于将图像分割为感兴趣的区域和背景。


思路

全局阈值处理

定义一个变量 deltaT,用于确定阈值收敛的条件。初始化阈值 T 为图像 img1 的平均灰度值。设置一个标志变量 flag 为真,用于控制后续的循环。

在循环中,首先根据当前阈值 T 对图像进行分割,得到一个二值图像 temp。然后计算 temp 中为真和为假的像素在原图 img1 中的平均灰度值 m1m2。接着计算新的阈值 tm1m2 的平均值。如果 Tt 的差的绝对值大于等于 deltaT,则继续循环,否则结束循环。在每次循环结束时,将 T 更新为 t

循环结束后,使用最终的阈值 T 对原图 img1 进行分割,得到最终的二值图像 img2


应用案例

matlab">% 读取图像
img1 = imread("Fig1038(a)(noisy_fingerprint).tif");% 创建新的图形窗口
figure;% 在第一个子图中显示原图
subplot(1, 3, 1);
imshow(img1);% 在第二个子图中显示原图的直方图
subplot(1, 3, 2);
imhist(img1);% 设置阈值变化的最小值
deltaT = 0.5;
% 初始化阈值为图像的平均灰度值
T = mean2(img1);
flag = true;
while flag% 根据当前阈值分割图像temp = img1 > T;% 计算两个区域的平均灰度值m1 = mean(img1(temp));m2 = mean(img1(~temp));% 计算新的阈值t = (m1 + m2) * 0.5;% 检查阈值是否收敛flag = abs(T - t) >= deltaT;% 更新阈值T = t;
end
% 使用最终阈值分割图像
img2 = img1 > T;% 在第三个子图中显示分割后的图像
subplot(1, 3, 3);
imshow(img2);


http://www.ppmy.cn/devtools/137836.html

相关文章

比特币libsecp256k1中safegcd算法形式化验证完成

1. 引言 比特币和其他链(如 Liquid)的安全性取决于 ECDSA 和 Schnorr 签名等数字签名算法的使用。Bitcoin Core 和 Liquid 都使用名为 libsecp256k1 的 C 库来提供这些数字签名算法,该库以其所运行的椭圆曲线命名。这些算法利用一种称为modu…

DataGuard 主要参数配置详解

1. 基本概念 DB_NAME:主备各节点实例使用相同的 db_name。推荐与 service_name 一致。DB_UNIQUE_NAME:主备端数据库的唯一名称,设定后不可再更改。注意,如果主备 db_unique_name 不一样,需要与 LOG_ARCHIVE_CONFIG 配…

ffmpeg.js视频播放(转换)

chrome 临时设置SharedArrayBuffer "C:\Program Files\Google\Chrome\Application\chrome.exe" --enable-featuresSharedArrayBuffer 引用的js及相关文件 ffmpeg.min.js ffmpeg.min.js.map ffmpeg-core.js ffmpeg-core.wasm ffmpeg-core.worker.js 以上几个现…

网络安全期末复习

第1章 网络安全概括 (1)用户模式切换到系统配置模式(enable)。 (2)显示当前位置的设置信息,很方便了解系统设置(show running-config)。 (3)显…

C++ 【异步日志模块和std::cout << 一样使用习惯替代性好】 使用示例,后续加上远程日志

简单 易用 使用示例 CLogSystem::Instance().SetLogLevel( E_LOG_LEVEL::LOG_LEVEL_INFO | E_LOG_LEVEL::LOG_LEVEL_DEBUG | E_LOG_LEVEL::LOG_LEVEL_DUMP );CLogSystem::Instance().SetFileInfo(true, "./log.txt");LogDebug() << 12;LogInfo() << &qu…

一分钟食用前端测试框架Jest

安装 其实食用Jest是很简单的,我们只需要安装Jest即可 npm install --save-dev jestyarn add --dev jestpnpm add --save-dev jest ESmodule 本身来说,Jest是不支持Esmodule的,他支持CommonJS,我们需要Babel改一下 npm i --save-dev babel-jest babel/core babel/preset-env …

【八股文】小米

文章目录 一、vector 和 list 的区别&#xff1f;二、include 双引号和尖括号的区别&#xff1f;三、set 的底层数据结构&#xff1f;四、set 和 multiset 的区别&#xff1f;五、map 和 unordered_map 的区别&#xff1f;六、虚函数和纯虚函数的区别&#xff1f;七、extern C …

SpringBoot源码-spring boot启动入口ruan方法主线分析(一)

一、SpringBoot启动的入口 1.当我们启动一个SpringBoot项目的时候&#xff0c;入口程序就是main方法&#xff0c;而在main方法中就执行了一个run方法。 SpringBootApplication public class StartApp {public static void main(String[] args) {// testSpringApplication.ru…