8、matlab彩色图和灰度图的二值化算法汇总

news2024/9/20 10:55:21

1、彩色图和灰度图的二值化算法汇总原理及流程

彩色图和灰度图的二值化算法的原理都是将图像中的像素值转化为二值(0或1),以便对图像进行简化或者特定的图像处理操作。下面分别介绍彩色图和灰度图的二值化算法的原理及流程:

1)彩色图的二值化算法原理及流程

(1)原理:彩色图的二值化算法一般是先将彩色图像转化为灰度图像,然后再对灰度图像进行二值化处理。

(2)流程:

a.将彩色图像转化为灰度图像,一般可以通过公式 Y = 0.299R + 0.587G + 0.114*B 来计算灰度值。

b.对灰度图像进行二值化处理,常用的二值化方法有直方图法、最大熵法、OTSU算法等。

c.根据所选的二值化方法确定合适的阈值,将灰度图像中大于阈值的像素值设为1,小于阈值的像素值设为0。

d.得到二值化后的图像,即为彩色图的二值化结果。

2)灰度图的二值化算法原理及流程

(1)原理:灰度图的二值化算法是直接对灰度图像中的像素值进行阈值划分。

(2)流程:

a.选择合适的二值化方法,比如采用全局阈值法、局部阈值法、K平均值算法等。

b.根据所选的二值化方法确定阈值,将灰度图像中大于阈值的像素值设为1,小于阈值的像素值设为0。

c.得到二值化后的图像,即为灰度图的二值化结果。

总之,彩色图和灰度图的二值化算法都是将图像中的像素值转化为二值,以便于后续处理。在实际应用中,可以根据具体需求选择合适的二值化方法和阈值,以得到最符合要求的二值化图像。

2、导入彩色图及灰度化

彩色图灰度化简介

彩色图灰度化是将彩色图像转化为灰度图像的过程,即将每个像素的RGB颜色通道值转化为一个灰度值。灰度图像是一种只有黑白两种颜色的图像,其中灰度值表示了像素的亮度。灰度图像的优点是能够更好地突出图像的灰度变化细节,简化图像的处理和分析。

彩色图灰度化的简介如下:

  1. 彩色图像一般由三个通道组成:红色(R)、绿色(G)和蓝色(B)。每个通道的像素值范围是0~255,代表了相应颜色通道的亮度。

  2. 灰度图像是将彩色图像的RGB通道值通过一定的权重系数进行加权平均,转化为一个灰度值。常用的转换公式是:Y = 0.299 * R + 0.587 * G + 0.114 * B。

  3. 转化后的灰度值范围为0~255,代表了像素的亮度,数值越大表示越亮。

  4. 灰度化后的图像只有一层灰度通道,简化了图像处理和分析的复杂度,适用于很多图像处理算法。

  5. 灰度图像适用于许多应用领域,如图像处理,图像分析,图像识别等。

总之,彩色图灰度化是将彩色图像转化为灰度图像的过程,能够更好地突出图像的灰度变化细节,简化图像的处理和分析。在实际应用中,灰度图像常常用于各种图像处理和分析算法中。

代码:

RGB = imread('C:\Users\16023\Desktop\例程\l1.png');%图像导入
I = rgb2gray(RGB);%1、灰度化
figure(1);imshowpair(RGB,I,'montage');title('1灰度图')

视图效果:

3、彩色图自定义阈值二值化

彩色图自定义阈值二值化简介

彩色图像的自定义阈值二值化是一种将彩色图像转化为二值图像的方法,其中用户可以自定义阈值来确定像素的黑白划分。二值化后的图像中,大于阈值的像素值被设定为白色(255),小于阈值的像素值被设定为黑色(0)。这种方法可以通过简单调整阈值来控制图像的二值化效果。

自定义阈值二值化的简介如下:

1.首先,将彩色图像转化为灰度图像,根据公式 Y = 0.299 * R + 0.587 * G + 0.114 * B 计算每个像素的灰度值。

2.确定一个用户自定义的阈值,一般在0~255的范围内,用于将灰度值划分为黑白两种颜色。

3.遍历灰度图像的每个像素,比较其灰度值与用户定义的阈值大小关系。

4.大于等于阈值的像素值设为白色(255),小于阈值的像素值设为黑色(0),得到二值化后的图像。

5.通过调整阈值的大小,可以控制输出的二值图像效果,使得图像中的目标物体更加突出清晰。

自定义阈值二值化是一种简单且直观的图像处理方法,可以通过调整阈值来适应不同图像的处理需求。在实际应用中,这种方法常用于图像分割、目标检测等领域,能够提取出感兴趣的目标区域,方便后续的图像分析和处理。

代码:

BW = im2bw(RGB,0.5);%2、彩色图自定义阈值二值化
figure(2);imshowpair(RGB,BW,'montage');title('2彩色二值化图')

视图效果:

4、灰度图自定义阈值二值化

灰度图自定义阈值二值化简介

灰度图的自定义阈值二值化是一种将灰度图像转化为二值图像的方法,用户可以自定义阈值来确定像素的黑白划分。在灰度二值化中,大于阈值的像素值被设定为白色(255),小于阈值的像素值被设定为黑色(0)。这种方法可以通过调整阈值来控制图像的二值化效果。

自定义阈值二值化的简介如下:

  1. 灰度图像是一种只有灰度值,范围为0~255的图像,代表了像素的亮度。

  2. 确定一个用户自定义的阈值,通常在0~255的范围内,用于将灰度值划分为黑白两种颜色。

  3. 遍历灰度图像的每个像素,比较其灰度值与用户定义的阈值大小关系。

  4. 大于等于阈值的像素值设为白色(255),小于阈值的像素值设为黑色(0),得到二值化后的图像。

  5. 通过调整阈值的大小,可以控制输出的二值图像效果,使得图像中的目标物体更加突出清晰。

自定义阈值二值化是一种常用的图像处理方法,通过简单的阈值设定,可以得到清晰的二值图像。这种方法适用于许多图像处理应用,如图像分割、目标检测、边缘检测等领域。用户可以根据具体需求调整阈值,对灰度图像进行二值化处理,以满足不同的处理需求。

代码:

BW1 = im2bw(I,0.5);%3、灰度图自定义阈值二值化
figure(3);imshowpair(I,BW1,'montage');title('3灰度二值化图')

视图效果:

5、Qtus方法,根据灰度图计算全局阈值二值化

Qtus方法,根据灰度图计算全局阈值二值化简介

Qutus(Otsu)方法是一种基于灰度图像的全局阈值二值化方法,通过计算图像的灰度直方图来确定最佳的阈值,将图像转化为二值图像。这种方法最大化了目标与背景之间的类间方差,使得生成的二值图像更加清晰、准确。

Qutus方法的简介如下:

  1. 将灰度图像转换为一维直方图,统计每个灰度级别出现的频次,得到灰度直方图。

  2. 遍历灰度直方图的每个灰度级别,根据该灰度级别将图像分为两个部分:小于等于该灰度级别为一个部分,大于该灰度级别为另一个部分。

  3. 计算使用当前灰度级别作为阈值时,两个部分的类内方差之和,用来表示该灰度级别生成的二值图像的质量。

  4. 通过寻找类内方差最小的灰度级别,确定最佳的阈值,将图像转化为二值图像。

  5. 通过Qutus方法计算得到的全局阈值,可以在不需要人工调整的情况下,精确地将图像转化为二值图像。

Qutus方法是一种比较经典和有效的全局阈值二值化方法,特别适用于一些需要高精度的图像处理任务,如目标检测、图像分割、字符识别等。通过计算得到的最佳全局阈值,可以有效地提高二值图像的质量和准确度。

代码:

LE= graythresh(I)%4、Otsu 方法,根据灰度图像 I 计算全局阈值LE
BW2 = imbinarize(I,LE);%二值化处理
figure(4);imshowpair(I,BW2,'montage');title('全局阈值二值化图')

视图效果:

6、Qtus方法,根据直方图计算全局阈值二值化

Qtus方法,根据直方图计算全局阈值二值化简介

Qtus方法是一种通过计算直方图来确定全局阈值进行二值化的方法。该方法的步骤如下:

  1. 统计图像灰度级别的直方图,即将图像中每个灰度级别出现的次数记录下来。

  2. 计算整幅图像的平均灰度值。

  3. 初始化全局阈值为图像平均灰度值。

  4. 计算两个类别的平均灰度值和类别的比例,根据以下公式选择新的全局阈值: T_new = (mean1 + mean2) / 2

  5. 重复步骤4,直到全局阈值的变化不大为止。

  6. 将灰度值大于全局阈值的像素置为255,小于等于全局阈值的像素置为0,完成二值化操作。

Qtus方法通过迭代计算全局阈值,可以更精确地确定使得两个类别之间的灰度值差异最大的阈值,从而得到更好的二值化结果。

代码:

[counts,x] = imhist(I,16);% 5、Otsu 方法 ,基于直方图计数 counts 计算全局阈值 T
T = otsuthresh(counts);%计算阈值 T
BW3 = imbinarize(I,T);%二值化处理
figure(5);imshowpair(I,BW3,'montage');title('5直方图二值化图')

视图效果:

 7、总结

在Matlab中,对彩色图和灰度图进行二值化的常见算法有以下几种:

  1. 灰度图二值化算法:

    • Otsu算法:根据直方图统计信息自适应选择全局阈值,实现图像二值化。
    • 大津二值化:与Otsu算法类似,通过最大类间方差的方法选择合适的全局阈值。
    • 均值法:计算图像的平均灰度值作为阈值进行二值化。
    • 自适应阈值法:根据局部区域的灰度值确定阈值进行局部二值化。
  2. 彩色图二值化算法:

    • RGB到灰度转换:将彩色图像转换为灰度图像,然后使用灰度图像的二值化算法进行处理。
    • HSV颜色空间:将彩色图像转换到HSV颜色空间,提取亮度分量进行二值化,然后转回RGB空间。
    • YCbCr颜色空间:将彩色图像转换到YCbCr颜色空间,提取亮度分量进行二值化,然后转回RGB空间。

以上算法都可以在Matlab中通过调用相应的函数或编写自定义算法实现。根据具体需求和图像特点选择合适的二值化算法可以得到更好的处理效果。

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

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

相关文章

【java实现结果集转为树结构,树转为扁平结构】

list转为树,树拉平 业务需求oracle实现树结构1、**Controller.java层** :前端调此处请求2、**service层:** 逻辑结构 (zbjcpjService.java),重点:this.entityMapper.queryZbjcpjTree接口3、**ma…

opc ua设备数据 转MQTT项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 配置VFBOX网关采集OPC UA的数据 2 5 用MQTT协议转发数据 4 6 配置参数说明 4 7 上报内容配置 5 8 其他说明 8 9 案例总结 8 1 案例说明 设置网关采集OPC UA设备数据把采集的数据转成MQTT协议转发给其他系统。 2 VFB…

【备战秋招】——算法题目训练和总结day3

【备战秋招】——算法题目训练和总结day3😎 前言🙌BC149简写单词题解思路分析代码分享: dd爱框框题解思路分析代码分享: 除2!题解思路分析代码分享: 总结撒花💞 😎博客昵称&#xff…

Chromium源码阅读(7):了解WTF的静态字符串机制

在浏览器的实现中,处理HTML和CSS涉及大量的字符串操作,这些操作通常包括字符串的比较、查找和匹配。如果使用普通的字符串对这些进行操作,在面临大量DOM元素和CSS规则时会导致效率低下。 例如,当解析CSS时,属性名如col…

05_TypeScript 中的数据类型

TypeScript 中的数据类型 一、概述二、详解布尔类型(boolean) true / false数字类型(number)字符串类型(string)数组类型(array)元组类型(tuple) 属于数组的一…

【Qt 初识 Test】用图形化和代码的方式实现简单的Qt程序

文章目录 1. 通过图形化的方式实现🍎2. 通过代码的方式实现 1. 通过图形化的方式实现🍎 在界面创建出一个控件,显示 hello world,通过拖拽的方式实现; widget.ui文件如下:🔍 生成的 ui_widget.…

【Java16】多态

向上类型转换 对于引用变量,在程序中有两种形态:一种是编译时类型,这种引用变量的类型在声明它的时候就决定了;另一种则是运行时类型,这种变量的类型由实际赋给它的对象决定。 当一个引用变量的编译时类型和运行时类…

mybatis日志记录方案

首先对指定表进行监控 对表进行监控,那么就要使用的是statementInterceptor 拦截器 使用拦截器那么就要写intercepts写拦截条件进行拦截 监控只对与增删改 查询不进行监控 对于字段的监控,是谁修改了字段,那么就进行报警,或者提醒 消息提醒使用钉钉机器人进行消息提醒 P…

AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理

AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理 目录 AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理 一、简单介绍 二、文本摘要 三、在CNN/Daily…

【接口设计】如何设计统一 RESTful 风格的数据接口

如何设计统一 RESTful 风格的数据接口 1.版本控制1.1 通过 URL1.2 通过自定义请求头1.3 通过 Accept 标头 2.过滤信息3.确定 HTTP 的方法4.确定 HTTP 的返回状态5.定义统一返回的格式 近年来,随着移动互联网的发展,各种类型的客户端层出不穷。如果不统一…

347. 前 K 个高频元素(中等)

347. 前 K 个高频元素 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转:347. 前 K 个高频元素 2.详细题解 寻找出现频率前 k k k高的元素,因此需要先统计各个元素出现的次数,该步骤时间复杂度为 O ( n ) O(n) O(n)…

javaweb中的请求与响应--基于postman工具的应用(附带postman的详细安装步骤)

一、前言 后端的第一天感觉难度就上来了,可能是基础太过薄弱了吧。目前看视频已经有点跟不上了,果然15天想要拿下还是太勉强了点。30天还差不多。不知道读者们有没有好好的去学这方面的知识,没有什么是学不会的,关键是坚持。 Po…

【C语言】C语言-学生籍贯信息记录系统(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

C#Winform窗体中嵌入exe文件

1,效果以嵌入Modbus Slave为例: 2,代码: public partial class Form1 : Form{//设置嵌入exe的常量private const int nIndex -16;private const int dwNewLong 0x10000000;Process m_AppProcess;public Form1(){InitializeCompo…

了解AsyncRotationController

概述 基于android 15.0, 以从强制横屏App上滑退回桌面流程来分析 frameworks/base/services/core/java/com/android/server/wm/AsyncRotationController.javaAsyncRotationController 是一种控制器,用于处理设备显示屏旋转时非活动窗口的异步更新。这种控制器通过…

【记录】CSS|Tailwind 的主题定义的颜色的使用方法(--color啥的)

文章目录 【记录】CSS|Tailwind 的主题定义的颜色的使用方法(--color 啥的)省流版GPT 详细解释版Tailwind CSS 配置文件示例使用自定义颜色定义 CSS 变量总结 附赠个 Tips 【记录】CSS|Tailwind 的主题定义的颜色的使用方法&#…

【Python】已解决:ModuleNotFoundError: No module named ‘sklearn.cross_validation

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 (机器学习分割数据问题)解决“ModuleNotFoundError: No module named ‘sklearn.cross_validation’” 一、问题背景 在机器学习的实践中,数据分割是…

聚鼎装饰画:现在做装饰画能不能相信

在艺术的殿堂中,装饰画以其多变的风格和独特的魅力占据了一席之地。它们或清新淡雅,或浓烈奔放,总能为现代家居带来一丝生气与美感。然而,在这美丽的背后,却隐藏着一个令人困惑的问题:现在做装饰画&#xf…

[EasilyOpenJCL] 使用 Java 调用显卡 计算 和Java调用 CPU 进行计算 的基准测试!

设备环境介绍 easily-openJCL 是一个轻量级的 Java 语言下的 GPU 显卡 计算库,它提供了一套简单易用的 API,让用户能够轻松实现 GPU 计算操作。 通过 Java 调用 GPU 计算的一个库,使用非常简单的API就可以轻松应付 Java 数据类型在 GPU 中的…

程序使用多进程,打包.exe后,程序陷入死循环

最近写了一个深度学习程序,用cxfreezee打包exe后,在本地运行突然出现死循环,明明在pycharm运行一切正常。 排查了问题,怀疑是多进程的原因,解决办法: 在你的主程序前添加一行代码: if __name_…