Matlab实现图像灰度化算法

article/2025/8/27 4:32:18

Matlab实现图像灰度化算法

    • 灰度化算法原理
    • 代码实现

灰度化算法原理

RGB应该都听说过,我们一般看到的彩色图像嘛,R、G、B分别对应了三原色:红色(red)、绿色(green)和蓝色(blue)。如果有玩过P图的,也许会知道,画板调色也是调这三个通道图像的亮度,亮度范围在0到255之间。
所以这很容易就可以推导出来一个结果:
rgb(255,0,0)就是红色,rgb(0,255,0)就是绿色,rgb(0,0,255)就是蓝色,三通道亮度拉满rgb(255,255,255)就是白色。三者如果化作三个坐标轴,关系就如图所示。
RGB三维模型
这里结合一下matlab来说明一下。

img = imread('lena.png');
[y,x,color] = size(img);

我们来看看上面两行代码得到的结果。

代码结果
imread就是读取图片,size就是把前面读取到的信息提取出来。可以看到,经过imread函数,图像已经变成了矩阵,也就是三个512x512的矩阵。这里的512x512是我导入的图像的大小,单位是像素。
其实说白了,所谓的灰度,其实就是像素的亮度。每个像素的亮度值都在(0,255)之间,所以如果要显示的话,将三个通道的亮度值提取出来,就可以看到三张灰度的图像。
RGB三通道图像
从上面这张图像来看,可以看到红色通道那一张比较亮,这也可以说明,红色的值比较多。
而我们灰度化的目的,就是将RGB三通道的亮度值融合一起,变成一张灰度图像。
所以我们要用编程实现,就是弄几个循环,然后对RGB三个通道的亮度值进行处理。这个处理方法一共有三种。
一种就是最大值法
所谓最大值法,就是比较三通道的每一个像素的亮度值,谁的亮度值大(也可以说是灰度值),就取谁的值。
第二种是平均值法
所谓平均值法,其实就是将三个通道的灰度值全部加起来,然后求一个平均值。
第三种是加权平均法
所谓加权平均法,就是将三通道的灰度值乘一定比例,然后再把三通道的灰度值相加。

代码实现

接下来就根据这三种方法使用matlab进行编程实现。代码如下:

%灰度化算法
%matlab实现clear;
clc;
img = imread('lena.png');
%提取图像的信息:行、列以及通道数量
[m,n,color] = size(img);
%创建一个模板
gray_img1 = zeros(m,n);
gray_img2 = zeros(m,n);
gray_img3 = zeros(m,n);
for x = 1:mfor y = 1:n%最大值法gray_img1(x,y) = max(img(x,y,1),max(img(x,y,2),img(x,y,3)));%平均值法gray_img2(x,y) = (double(img(x,y,1))+double(img(x,y,2))+double(img(x,y,3)))/3;%加权平均法gray_img3(x,y) = 0.229*img(x,y,1)+0.578*img(x,y,2)+0.114*img(x,y,3);end
end
figure();
subplot(131);
imshow(uint8(gray_img1),[]);
xlabel('最大值法');
subplot(132);
imshow(uint8(gray_img2),[]);
xlabel('平均值法');
subplot(133);
imshow(uint8(gray_img3),[]);
xlabel('加权平均法');

然后我们可以看一下效果:
灰度化效果
从上面三张图片看,最大值法的结果明显会亮一点。而平均值法和加权平均法差别看似不是很大,但有的时候对于个别特殊的图像,加权平均法还是挺有用的,可以分别调整三个颜色通道的权重值,这样会方便对图像进行处理。

%这个是改进的代码,虽然说区别不大,但看上去更加简洁
%最大值法
gray_img1 = max(max(img(:,:,1),img(:,:,2)),img(:,:,3));
%平均值法
gray_img2 = (img(:,:,1)+img(:,:,2)+img(:,:,3))./3;
%权值平均法
gray_img3 = 0.4*img(:,:,1)+0.5*img(:,:,2)+0.1*img(:,:,3);
%%注意要将其转化为double型

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

相关文章

彩色图像灰度化

灰度图像能以较少的数据表征图像的大部分特征,因此在某些算法的预处理阶段需要进行彩色图像灰度化,以提高算法的效率。将彩色图像转化为灰度图像的过程称为彩色图像灰度化。 常用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 …

linux时间转excel,linux时间戳转换【操作模式】

虽然电脑已经很普遍了,但是一些年长的人对电脑的操作不是很熟悉,比如在使用win7系统时一旦遇到linux时间戳转换 时就懵了,对于linux时间戳转换 处理起来相对来说较简单,按照我们的步骤处理linux时间戳转换 很容易上手,…

excel linux时间戳转换成日期,Excel将Unix时间戳转换为日期

Excel默认不支持Unix格式时间戳,这在导入数据时十分不便。可以用以下公式将时间戳转换成Excel格式的时间:(A18*3600)/8640070*36519 其中A1为时间戳的单元格,8*3600中的8为中国的时区。然后将公式单元格设置为日期时间格式即可。转换结果如下…