MATLAB图像灰度化—优化三种灰度化算法

article/2025/8/27 4:05:45

一、彩色、灰度、二值、索引图像

彩色图像:每个像素由R、G、B三个分量表示,每个通道取值范围0~255。数据类型一般为8位无符号整形unit8。(通常我们认为一个彩色图像是由三页组成的,分别是R、G、B,每一页都是一个二维矩阵,这三个二维矩阵的叠加构成了彩色图像)

灰度图像:每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度。数据类型一般为8位无符号整形unit8。(一般认为是由一页组成,这一页并不一定是R、G、B中的一页,也可能是三者的叠加,但这一页一定是一个二维矩阵)

二值图像(黑白图像):每个像素点只有两种可能,0和1.0代表黑色,1代表白色。数据类型通常为1个二进制位。

索引图像:类似于查字典,为了解决彩色图像消耗空间大的问题,一般应用于色彩构成比较简单的场景。

二、图像灰度化的原因

在许多图像处理系统中,对图像进行归一化都是必备的预处理过程。一般而言,对于灰度图像(或彩色通道的每个颜色分量)进行灰度归一化就是:使其像素的灰度值分布在0~255之间,避免图像对比度不足(图像像素亮度分布不平衡)从而对后续处理带来干扰。
对于图像而言,灰度化处理就是使彩色的R,G,B分量值相等的过程。

三、图像灰度化的三种方法

最大值法:使R,G,B的值等于3值中最大的一个,R=G=B=max(R,G,B),最大值法会形成亮度很高的灰度图像。

平均值法:是R,G,B的值求出平均值,R=G=B=(R+G+B)/3,平均值法会形成较柔和的灰度图像。

加权平均值法:根据重要性或其他指标给R,G,B赋予不同的权值,并使R,G,B的值加权平均,R=G=B=WR+VG+UB,W,V,U分别表示权重,研究表明,人对绿色的敏感度最高,对红色次之,对蓝色的敏感度最低,因此W>V>U,实验和理论证明当W=0.30,V=0.59,U=0.11时,能得到最合理的灰度图像。
(这种方法就是matlab中自带的函数rgb2gray的原理及算法)

程序如下:

clear; % 清理工作区变量
clc;% 清除命令窗口并将光标定位
close all; % 关闭之前打开的所有显示窗口MyYuanLaiPic = imread('m.jpg');% 读取RGB格式的图像 
% 显示原来的RGB图像  
figure(1); 
imshow(MyYuanLaiPic);MyFirstGrayPic = rgb2gray(MyYuanLaiPic);% 用已有的函数进行RGB到灰度图像的转换  
% 显示经过系统函数运算过的灰度图像  
figure(2); 
imshow(MyFirstGrayPic);[rows , cols , colors] =size(MyYuanLaiPic);% 得到原来图像的矩阵的参数  
MidGrayPic1 = zeros(rows , cols);% 用得到的参数创建一个全零的矩阵,这个矩阵用来存储用下面的方法产生的灰度图像  
MidGrayPic1 = uint8(MidGrayPic1);% 将创建的全零矩阵转化为uint8格式,因为用上面的语句创建之后图像是double型的  
for i = 1:rows  for j = 1:cols  sum = 0;  for k = 1:colors  sum = sum + MyYuanLaiPic(i , j , k) / 3;% 进行转化的关键公式,sum每次都因为后面的数字而不能超过255  end  MidGrayPic1(i , j) = sum;  end  
end  
% 平均值法转化之后的灰度图像  
figure(3); 
imshow(MidGrayPic1);MidGrayPic2 = zeros(rows , cols);% 用得到的参数创建一个全零的矩阵,这个矩阵用来存储用下面的方法产生的灰度图像  
MidGrayPic2 = uint8(MidGrayPic2);% 将创建的全零矩阵转化为uint8格式,因为用上面的语句创建之后图像是double型的  
for i = 1:rows  for j = 1:cols  MidGrayPic2(i , j) =max(MyYuanLaiPic(i,j,:));  end  
end  
% 最大值法转化之后的灰度图像  
figure(4); 
imshow(MidGrayPic2);MidGrayPic3 = zeros(rows , cols);% 用得到的参数创建一个全零的矩阵,这个矩阵用来存储用下面的方法产生的灰度图像  
MidGrayPic3 = uint8(MidGrayPic3);% 将创建的全零矩阵转化为uint8格式,因为用上面的语句创建之后图像是double型的  
for i = 1:rows  for j = 1:cols  MidGrayPic3(i , j) = MyYuanLaiPic(i , j ,1)*0.30+MyYuanLaiPic(i , j ,2)*0.59+MyYuanLaiPic(i ,j , 3)*0.11;  end  
end  
% 加权平均值法转化之后的灰度图像  
figure(5); 
imshow(MidGrayPic3);

优化

  1. figure不用进行编号,MATLAB会自动编号。
  2. 在每个处理后的图像要加标题,便于对比观察。
  3. MATLAB在处理矩阵计算时很简单,可以简化代码。

优化程序如下:

clear; % 清理工作区变量
clc;% 清除命令窗口并将光标定位
close all; % 关闭之前打开的所有显示窗口MyYuanLaiPic = imread('m.png');% 读取RGB格式的图像 
% 显示原来的RGB图像  
figure; 
imshow(MyYuanLaiPic); 
title('原图像')MyFirstGrayPic = rgb2gray(MyYuanLaiPic);% 用已有的函数进行RGB到灰度图像的转换  
% 显示经过系统函数运算过的灰度图像  
figure; 
imshow(MyFirstGrayPic);  
title('灰度图像')[rows , cols , colors] =size(MyYuanLaiPic);% 得到原来图像的矩阵的参数(行 = 高 ,列 = 宽 ,颜色 = 维度)  
MidGrayPic1 = zeros(rows , cols);% 用得到的参数创建一个全零的矩阵,这个矩阵用来存储用下面的方法产生的灰度图像  
MyYuanlaiPic = double(MyYuanLaiPic); 
MidGrayPic1=(MyYuanlaiPic(:,:,3)+MyYuanlaiPic(:,:,2)+MyYuanlaiPic(:,:,1))/3;
% matlab中可以直接用矩阵计算,不需要用到每一个元素。
% 平均值法转化之后的灰度图像  
MidGrayPic1 = uint8(MidGrayPic1);% 将得到新矩阵转化为uint8格式,因为用上面的语句创建之后图像是double型的
figure; 
imshow(MidGrayPic1);
title('平均值图像')MidGrayPic2 = zeros(rows , cols);% 用得到的参数创建一个全零的矩阵,这个矩阵用来存储用下面的方法产生的灰度图像  
MidGrayPic2=max(max(MyYuanLaiPic(:,:,1),MyYuanLaiPic(:,:,2)),MyYuanLaiPic(:,:,3));
% matlab中max函数是两两比较型的,故需要两个max函数进行三者之间的比较
% 最大值法转化之后的灰度图像  
MidGrayPic2 = uint8(MidGrayPic2);% 将得到的新矩阵转化为uint8格式,因为用上面的语句创建之后图像是double型的 
figure; 
imshow(MidGrayPic2);
title('最大值图像')MidGrayPic3 = zeros(rows , cols);% 用得到的参数创建一个全零的矩阵,这个矩阵用来存储用下面的方法产生的灰度图像   
MidGrayPic3 = MyYuanLaiPic(: , : , 1)*0.30+MyYuanLaiPic(: , : , 2)*0.59+MyYuanLaiPic(: ,: , 3)*0.11;  
% matlab直接进行矩阵运算
% 加权平均值法转化之后的灰度图像  
MidGrayPic3 = uint8(MidGrayPic3);% 将得到的新矩阵转化为uint8格式,因为用上面的语句创建之后图像是double型的
figure; 
imshow(MidGrayPic3);
title('加权平均值图像')

程序运行结果

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

在这里插入图片描述
在这里插入图片描述
参考资料

https://blog.csdn.net/cysisu/article/details/85009351

https://blog.csdn.net/JX_Cesare/article/details/82284863

https://blog.csdn.net/discoverer100/article/details/61426650

谢谢各位观读我的博客


http://chatgpt.dhexx.cn/article/JVYBPj91.shtml

相关文章

图像灰度化的三种方式

目录 一、为什么要图像灰度化 二、灰度化的主要方法 2.1取通道最大值 2.2平均值法 2.3加权法 三、示例 一、为什么要图像灰度化 目前很多的图像算法都是基于灰度图像的,比如特征点提取,特征点匹配等。 二、灰度化的主要方法 2.1取通道最大值 使用…

Matlab实现图像灰度化算法

Matlab实现图像灰度化算法 灰度化算法原理代码实现 灰度化算法原理 RGB应该都听说过,我们一般看到的彩色图像嘛,R、G、B分别对应了三原色:红色(red)、绿色(green)和蓝色(blue&#…

彩色图像灰度化

灰度图像能以较少的数据表征图像的大部分特征,因此在某些算法的预处理阶段需要进行彩色图像灰度化,以提高算法的效率。将彩色图像转化为灰度图像的过程称为彩色图像灰度化。 常用RGB图像灰度化,在RGB模型中,位于空间位置(x,y)的像…

数字图像处理(入门篇)三 灰度化

目录 1 灰度化 2 灰度化的意义? 3 灰度化方法 (1)最大值法 (2)平均值法 (3)加权平均值法 5 效果图 6 结论 1 灰度化 灰度化:将多通道的彩色图像转换为单通道的灰度图像的过…

图像处理时为什么灰度化

发一个初级知识哦 先前在为大家介绍图像识别技术时,在图像预处理部分提到了灰度化,大家可能会产生疑惑:为什么做图片识别要将彩色图像灰度化呢? 正式解释这个问题之前,我们需要了解,什么是灰度化&#xff…

[Python从零到壹] 四十三.图像增强及运算篇之图像点运算和图像灰度化处理

欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望…

图像处理灰度变换

1 灰度变换简介 灰度变换是对图像的每个像素按照灰度映射函数进行映射的变换,其作用于每个像素。灰度变换一般用来进行图像增强,提高图像的对比度,改善图像的灰度分布等。灰度变换根据灰度变换函数的不同分为线性函数变换、对数函数和幂函数变…

数字图像处理(五)图像灰度化处理

1.图像灰度化 灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度, 范围一般从0到255 ,白色为255 ,黑色为0。所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰度值的象素数。 灰度就是没有色彩, RGB色彩分量全部相等…

【图像处理】灰度化

图像灰度化就是图像中的每一像素点的分量都满足RGBV的关系,此时的V就是灰度值 为什么要灰度化? 灰度是指含有亮度信息,不含彩色信息的图像。 使用灰度图的好处: 1、RGB的值都一样 2、图像数据 调色板索引值 RGB的值 亮度值…

(二)对图像进行预处理(灰度化,二值化)

对图像进行预处理(灰度化,二值化) 一、图像灰度化处理 图像灰度化是指每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度。   灰度图像与黑白图像不同,在计算机图像领域中黑白图像只…

【灰度图像】

像素 图像的组成元素是像素,每一个像素都有明确的位置和被分配的色彩数值。 图像分辨率 图像分辨率是指在计算机中保存和显示一幅数字图像所具有的分辨率,它和图像的像素有直接的关系。例如,一张分辨率为640480像素的图片,其分…

OpenCV图像灰度化的六种方法

OpenCV图像灰度化的六种方法 1.环境2.部分api及其参数解析3.灰度化方法实例及效果3.1 读取时灰度化处理3.2 调用cvtColor灰度化处理3.3 平均值法:3.4 最大值法3.5 分量法3.6 加权平均法 Opencv4 官方文档 : https://docs.opencv.org/4.2.0/ Opencv4 for Python中文文…

图像的灰度化原理和实现

一、图像的灰度化处理的基本原理 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范…

图像处理:图像灰度化

灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0。所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰度值…

图像灰度化的三种方法(matlab、C++、Python实现)

灰度化处理就是将一幅色彩图像转化为灰度图像的过程。彩色图像分为R,G,B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色的R,G,B分量相等的过程。灰度值大的像素点比较亮(像素值最大为25…

图像灰度化的三种常见方法

ⅠWhat 首先是baike给出的官方灰度化定义: 灰度化,在RGB模型中,如果RGB时,则彩色表示一种灰度颜色,其中RGB的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值…

图像基本处理(灰度化)

项目场景: 今天我们开始最基础的图像处理,将一张图片进行灰度化处理。我们将使用OpenCV来进行图像的处理 基础知识 图片主要包含以下内容: 1.像素,也就是我们通常说的RGB模型,红、绿、蓝组成。 RGB颜色模型是三维直角…

图像灰度化处理

文章目录 1. 图像灰度化2. 图像灰度化处理方法2.1 最大值法2.2 平均值法2.3 加权平均法 3. 图像灰度化处理方法的Python实现3.1 最大值法3.2 平均值法3.3 加权平均法3.4 最大值法、平均值法和加权平均法的比较3.5 opencv-python中灰度处理方法的应用 4. 源码仓库地址 1. 图像灰…

excel转换linux时间戳,在Excel中转换时间戳(timeStamp)

TEXT((A2/10008*3600)/8640070*36519,"yyyy-mm-dd hh:mm:ss.000") ((B2-70*365-19)*86400-8*3600)*1000 什么是时间戳? Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式。 定义为从…

java linux 时间戳转时间_Java时间和时间戳的相互转换

Java时间和时间戳的相互转换 时间转换为时间戳: /* * 将时间转换为时间戳 */ public static String dateToStamp(String s) throws ParseException{ String res; SimpleDateFormat simpleDateFormat new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date …