[matlab数字图像处理10]对一副图像进行二值化,ostu算法等

2023-10-28

一、 问题描述

对一副图像进行二值化,ostu算法等

二、 求解思路

将图像利用imread和rgb2gary后转化为灰度图像,对于直接的二值化,可使用0.5作为阈值
大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.通过设定一个阈值将图像像素分为两类,两者的占比分别为p1,p2,两者的均值分别为m1,m2,全局均值为mG,其中

在这里插入图片描述

通过循环255个像素得到,使得式子
在这里插入图片描述

有最大值,此阈值可以直接使用matlab自带的graythesh算出。本文也尝试利用上文的公式求出使得式子最大的阈值

三. 程序代码

clear;
clc;
close all
x=imread('tupian.jpeg');
subplot(3,3,1)
imshow(x)
title('原图')
%% 利用im2bw直接阈值二值化
T = 0.5;
BW = im2bw(x,T);
subplot(3,3,2)
imshow(BW)
title('利用im2bw直接阈值二值化')
%% 手动阈值二值化
subplot(3,3,3)
f=x;
g=rgb2gray(f);
new_g=zeros(size(g));
new_g(g>125)=1;
imshow(new_g)
title('手动阈值二值化')
%% otsu算法
subplot(3,3,4)
T_otsu=graythresh(g);
p_otsu=im2bw(x,T_otsu);
imshow(p_otsu)
title('matlab自带otsu')
%% 手动otsu算法
subplot(3,3,5)
[row,col]=size(g);
[counts] = histogram(g);
num=counts.Values;
num=num/sum(num);
max=0;
kmax=0;
for i=2:size(num,2)
    p1=sum(num(1:i));
    p2=1-p1;
    sump1=0;
    sump2=0;
    for k=1:i
        sump1=sump1+k*num(k);
    end
    for k=i+1:size(num,2)
        sump2=sump2+k*num(k);
    end
    m1=1/p1*sump1;
    m2=1/p2*sump2;
    thetasq=p1*p2*(m1-m2).^2;
    if thetasq>max
        max=thetasq;
        kmax=i;
    end
end
kmax=(kmax-1)*255/size(num,2);
new_g1=zeros(size(g));
new_g1(g>kmax)=1;
imshow(new_g1)
title('手动阈值二值化')
disp('手动计算otsu阈值')
disp(kmax/255)
disp('matlab自带算法计算阈值')
disp(T_otsu)

四. 实验结果

如图所示分别为原图,使用函数im2bw直接二值化图像,手动利用阈值二值化图像以及利用matlab自带函数计算大津法(otsu)给出阈值对图像二值化和利用手写公式求出阈值对图像二值化

在这里插入图片描述

对于该种情况的图片,手动计算的阈值与matlab自带的算法计算的阈值几乎一致,在计算otsu阈值时,注意使用hist函数获得每个像素值所占的数量。

五、实验心得

直接对函数用二值化分割有时候会不太理想,利用otsu等算法给出的结果能得到更好的分割结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[matlab数字图像处理10]对一副图像进行二值化,ostu算法等 的相关文章

  • 通过 cuFFT 进行逆 FFT 缩放

    每当我使用 cuFFT 绘制程序获得的值并将结果与 Matlab 的结果进行比较时 我都会得到相同形状的图形 并且最大值和最小值位于相同的点 然而 cuFFT 得到的值比 Matlab 得到的值大得多 Matlab代码是 fs 1000 s
  • MATLAB - 通过垂直连接子矩阵重新排列矩阵

    我在执行以下任务时遇到问题 假设一个 3x6 矩阵 A 0 2787 0 2948 0 4635 0 8388 0 0627 0 0435 0 6917 0 1185 0 3660 0 1867 0 2383 0 7577 0 6179 0
  • 使用简单矩阵乘法时出错

    我在一次简单的乘法运算中偶然发现了一个错误 这让我感到非常惊讶 我一直以为这里发生了什么 只为矩阵乘法 http www mathworks nl help matlab matlab prog operators html x 2 y z
  • Deploytool for MATLAB R2013b 不起作用,发生了什么变化?

    多年来我一直在使用集成deploytool为我的同事创建易于分发的 exe 文件 我几天前安装了R2013b 但无法使用deploytool不再了 尝试打包时的日志文件给出了以下内容 ant
  • Mathworks 生成 Matlab HTML 文档的方法是什么?

    我正在开发共享的 Matlab 代码 我们希望在本地网络中将生成的文档作为可搜索的 HTML 文档共享 我知道以下生成文档的方法 编写一个类似于 C 文件的转换器 这是在中完成的将 Doxygen 与 Matlab 结合使用 http ww
  • 像matlab一样在python中连接数组而不知道输出数组的大小

    我正在尝试在 python 中连接数组 类似于 matlab array1 zeros 3 500 array2 ones 3 700 array array1 array2 我在 python 中做了以下操作 array1 np zero
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr
  • 图像处理方面的空间和时间表征有什么区别?

    我是学习图像处理的初学者 我对空间和时间表征的概念有点困惑 那么 对于空间表征来说 是不是像一张二维地图 包含了一些关于地图的统计信息呢 就时间特征而言 值是相对于时间的吗 这意味着什么以及我们为何关心 谢谢 当您在不同时间拍摄一系列图像时
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • 在 MATLAB 图中用值标记点

    以下命令确实用正方形标记了点 但没有在其中放入值 例如 21 0 X 21 8 2 1 0 Y 0 1 2 3 4 plot X Y k s 我应该添加哪个参数以便全部5点值出现在图上吗 这些值不能一一键入 因为它们是随机数 因此它们可能会
  • 如何在matlab中使矩阵图平滑

    就像上图一样 怎样才能让画面更流畅呢 或者缩小y轴的范围 数据来自二维矩阵 然后我用plot data 请随意提出任何想法 平滑线条的一种方法涉及样本点之间数据的非线性插值 当你这样做时plot x y o http www mathwor
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • Matlab 中的 3D 堆叠条形图

    我想在一个图中绘制多个堆叠条形图 detached 条形图 例如 准确地想象一下bar http mathworks com help matlab ref bar3 detached png绘图 但堆叠在一起 而不是单一颜色 Set up
  • Matlab:如何读取以逗号作为小数分隔符的数字?

    我有很多 数十万 相当大 gt 0 5MB 的文件 其中数据是数字 但以逗号作为小数分隔符 使用像这样的外部工具对我来说是不切实际的sed s g 当分隔符是点时 我只使用textscan fid f f f 但我看不到更改小数点分隔符的选
  • 在 numpy/scipy 中查找 matlab 函数

    是否有一个等价的函数find A gt 9 1 来自 numpy scipy 的 matlab 我知道有nonzeronumpy 中的函数 但我需要的是第一个索引 以便我可以在另一个提取的列中使用第一个索引 Ex A 1 2 3 9 6 4
  • MATLAB - 从目录读取文件?

    我希望从目录中读取文件并对每个文件迭代执行操作 此操作不需要更改文件 我知道我应该为此使用 for 循环 到目前为止我已经尝试过 FILES ls path to folder for i 1 size FILES 1 STRU pdbre
  • 使用正常数据直方图与直接公式进行熵估计(matlab)

    假设我们已经绘制了n 10000标准正态分布的样本 现在我想使用直方图计算其熵来计算概率 1 计算概率 例如使用matlab p x hist samples binnumbers area x 2 x 1 sum p p p area b
  • 如何使用最小生成树方法将边缘连接到图像中的节点

    我正在做我的手写图像图形匹配项目 我想在图形中表示给定的单词图像 我使用下面的算法 Algorithm input Binary image B Grid width w Grid height h Output Graph g V E w
  • 如何使用 MATLAB 的“等值面”函数创建三角球体

    如何创建一个三角球体 其中每个三角形的面面积相同 我想要这样的东西 http imageshack us a img198 5041 71183923 png http imageshack us a img198 5041 7118392

随机推荐

  • 【远程服务器】如何删除远程服务器中所有的特定类型的文件、如何在远程服务器中新建文件夹、如何逐行遍历文件夹中的图片等任务

    文章目录 一 如何删除远程服务器中所有的特定类型的文件 二 远程服务器上新建一个文件夹 三 如何逐行遍历文件夹中的图片 四 如何想办法读取某个文件夹中的照片 五 远程服务器如何清除一个很长的文件夹 六 删除所有文件 七 ssh远程连接的服务
  • 半导体设备通讯标准(SECS/GEM)

    目录 收起 前言 一 SECS GEM 简介 二 系统的硬件组成 三 搞清楚需求 搞明白是什么 基本玩法规则 1 secs是一个协议族
  • JAVA获取计算机的IP、名称、操作系统等信息

    java view plain copy print import java io BufferedReader import java io InputStream import java io InputStreamReader imp
  • leetcode 1817. 查找用户活跃分钟数【python3,哈希表的实现思路详解】

    题目 给你用户在 LeetCode 的操作日志 和一个整数k 日志用一个二维整数数组logs表示 其中每个logs i IDi timei 表示ID为IDi的用户在timei分钟时执行了某个操作 多个用户可以同时执行操作 单个用户可以在同一
  • C语言基础入门48篇_31_二维数组应用之游戏中的碰撞检测(二维数组初始化边界,利用边界值判断是否可移动)

    本篇在上篇C语言基础入门48篇 18 使用循环移动游戏人物 屏幕符号运动 while 1 进行实时响应 if 表达式 switch 表达式 windows的API及API进行自行封装使 的基础上增加了移动边界 并且游戏人物不会移动出所设计的
  • 跑通CogView教程

    入门小菜鸟 希望像做笔记记录自己学的东西 也希望能帮助到同样入门的人 更希望大佬们帮忙纠错啦 侵权立删 目录 一 代码下载 二 环境配置 1 输入命令 2 安装apex 三 下载 image tokenizer vqvae hard big
  • 测试知识点

    什么是软件测试 使用人工或自动手段 来运行或测试某个系统的过程 其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别 什么是测试用例 1 评价测试人员的标准主要有两个 即发现的有效Bug数和编写的有效测试用例数 2 测试用例
  • python免费课程全套-为了学习Python,我汇总了这10个免费的视频课程!

    毫无疑问 Python是目前世界上 的编程语言 它 的优势在于它将越多越多的人带入了编程领域 近年来 学习Python的人比学习其他任何语言的人都多 许多人学Python是为了它背后的数据科学和机器学习库 当然 也有一些人学习用于Web开发
  • Java Web 安全之CSRF

    概念 跨站请求伪造 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法 原理 用户登陆A网站 A网站确认身份 B网站页面向A网站发起请求 带A网站身份 危害 利用用户登陆态 盗取用户资金 转账 消费 用户不知情 冒充用户
  • R语言tidyr包数据变换函数(dplyr包组合使用,完美)

    日常的数据预处理中 不可避免的会遇到数据的各种变形 转换 R语言中的tidyr包函数解决了数据变形上的问题 变量 列的转换 1 宽数据变长数据 gather data key key value value na rm FALSE conv
  • win10 vs2015 freetype2编译

    01 FreeType FreeType库是一个完全免费 开源 的 高质量的且可移植的字体引擎 它提供统一的接口来访问多种字体格式文件 包括TrueType OpenType Type1 CID CFF Windows FON FNT X1
  • 从Linux内核源码到操作系统

    Linux源码只有运行起来才能成为操作系统 否则她只能静静的躺在存储介质上沉睡 本文就讲解如何将这个睡美人唤醒 唤醒后给他穿上旗袍她就成为RedHat 给她换上包臀裙她就成为SUSE 再或者给她换上超短裙 她就成为Ubuntu 总之就是你可
  • 你在用FastReport.Net报表工具做报表没

    博主文章仅用于学习 研究和交流目的 不足和错误之处在所难免 希望大家能够批评指出 博主核实后马上更改 一 FastReport 是什么 FastReport Net是一款适用于Windows Forms ASP NET和MVC框架的功能齐全
  • 3DMAX机械建模贴图教程

    1 大型机械模型 网上找图片 然后放进材质球 应用 查看图片 裁剪好 然后把材质球放在模型之上 然后点击绿色 讲材质放给制定对象 2 加VR 太阳光 0 02 3 贴图贴上不行 点击UV贴图 选择长方体啥的 想要好看 加V RAY渲染器 测
  • json序列化小驼峰格式(属性名首字母小写)

    引用Newtonsoft Json 只需要设置JsonSerializerSettings参数即可 using Newtonsoft Json using System namespace ItemDemo class Program st
  • VUE项目开发,使用jessibuca——实现直播流播放器

    VUE项目开发 使用jessibuca 实现直播流播放器 VUE项目开发 使用jessibuca 实现直播流播放器 效果图 插件目录 public index html页面引入 组件一 组件二 补充内容 加载多个视频 参考连接 VUE项目开
  • 【D3.js - v5.x】(6)绘制树状图

    树状图 在d3 中 绘制树状图 要用到层级布局这个概念 d3 hierarchy data children 根据指定的层次结构数据构造一个根节点 指定的数据 data 必须为一个表示根节点的对象 比如 name Eve children
  • Ceph主要概念

    目录 1 整体架构介绍 1 1 总体介绍 1 2 整体架构 2 集群管理 2 1 Monitor 2 2 心跳管理 3 数据读写 3 1 OSD 3 2 读写流程 3 3 POOL和PG 3 4 CRUSH算法 3 4 1 Straw算法
  • win10下安装redis

    转载 https www cnblogs com W Yentl p 7831671 html Window 下安装 下载地址 https github com MSOpenTech redis releases Redis 支持 32 位
  • [matlab数字图像处理10]对一副图像进行二值化,ostu算法等

    一 问题描述 对一副图像进行二值化 ostu算法等 二 求解思路 将图像利用imread和rgb2gary后转化为灰度图像 对于直接的二值化 可使用0 5作为阈值 大津法 OTSU 是一种确定图像二值化分割阈值的算法 由日本学者大津于197