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)就是白色。三者如果化作三个坐标轴,关系就如图所示。

这里结合一下matlab来说明一下。

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

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


imread就是读取图片,size就是把前面读取到的信息提取出来。可以看到,经过imread函数,图像已经变成了矩阵,也就是三个512x512的矩阵。这里的512x512是我导入的图像的大小,单位是像素。
其实说白了,所谓的灰度,其实就是像素的亮度。每个像素的亮度值都在(0,255)之间,所以如果要显示的话,将三个通道的亮度值提取出来,就可以看到三张灰度的图像。

从上面这张图像来看,可以看到红色通道那一张比较亮,这也可以说明,红色的值比较多。
而我们灰度化的目的,就是将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型

Matlab实现图像灰度化算法相关推荐

  1. c语言灰度图像处理程序,C语言实现图像灰度化

    原理: 在一般情况下,彩色图像每个像素用3个字节表示,每个字节分别对应着R.G.B分量的亮度值,转换后的黑白图像用1个字节来表示灰度值,它的值在0到255间,数值越大该点越亮,反之,越暗.图像灰度化算 ...

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

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

  3. MATLAB:虹膜识别的图像灰度化处理,直方图均衡化

    (1)图像灰度化处理: 读取一张图片之后,进行灰度化处理,然后对其进行直方图均值化. clear;close all %读取原图地址 RGB= imread('D:\img\1.jpg'); %图像灰 ...

  4. 【matlab 图像处理】通道互换推向颜色模式转换图像灰度化

    1.蓝绿通道互换 p1 = imread('test1.jpg'); % 读取图像文件p2 = p1; % 相当于将图像复制赋值给p2 p2(:,:,2)=p1(:,:,3); % 将p1蓝色通道赋值 ...

  5. matlab人工选择阈值进行分割,基于MATLAB的图像阈值分割算法的研究

    [摘要]:图像分割是一种重要的数字图像处理技术.本文首先介绍了图像分割技术,其次总结了目前图像分割技术中所用到的阈值.边缘检测.区域提取等方法以及分水岭算法.针对各种阈值分割算法,本文在最后做了详细的 ...

  6. [Python图像处理] 十四.基于OpenCV和像素处理的图像灰度化处理

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  7. c#图像灰度化、灰度反转、二值化

    图像灰度化: 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理.彩色图像中的每个像素的颜色有R.G.B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*2 ...

  8. 2种图像增强方法:图像点运算和图像灰度化处理

    摘要:本文主要讲解图像点运算的灰度化处理,详细介绍常用的灰度化处理方法,并分享了图像颜色空间相互转换,以及三种灰度转换算法的实现. 本文分享自华为云社区<[Python从零到壹] 四十三.图像增 ...

  9. MATLAB实现图像灰度直方图

    (近期有用到灰度直方图的情况,就稍微做了一点点小总结,第一次总结,借鉴了很多博主的文章,下面会码出链接,膜拜大佬~) 1. 图像灰度直方图 灰度直方图是将数字图像中所有像素按灰度值的大小,统计每种像素 ...

  10. 图像灰度化的三种常见方法源码

    图像灰度化是图像处理很基础的一部分,在这里给出图像灰度化的三种常见方法的M源码,以供大家参考~ 平均值法,最大值法,加权平均值法 function f=MyGrayProcessing(Img) [m ...

最新文章

  1. 揭秘Facebook SLAM技术,如何为人们生活增添奇幻的艺术色彩?
  2. 安卓中实现两端对齐,中间fill_parent的方法
  3. 根据痛点分析制作软件
  4. 8篇论文梳理BERT相关模型进展与反思 | MSRA出品
  5. 顺序表应用4:元素位置互换之逆置算法
  6. CUDA学习笔记之程序优化
  7. 真恶心,用安卓模拟器开微信不能找附近的人
  8. lacp静态和动态区别_lacp静态与动态区别
  9. 1227讲解(递归deng)
  10. Java NIO学习篇之通道Channel详解
  11. 爬虫第四章 单线程+多任务异步协程
  12. HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)题解
  13. python-线程互斥锁与递归锁
  14. 时钟屏保fliqlo
  15. 体重测试仪软件,一键校准身高体重测量仪
  16. 数字人民币隐私与个人信息保护
  17. 尘世了了 花开花落昔年同
  18. 系统之美 作者:德内拉梅多斯
  19. 红帽6.4版本安装详细步骤
  20. 陀螺仪的简单介绍讲解

热门文章

  1. 解决hash冲突的三种方法
  2. 论大数据仓库的事务处理之法
  3. day55-负载均衡之lvs
  4. 类型多样的建筑场景unity3d模型素材,速来收藏
  5. 23种设计模式JAVA案例
  6. 现代信号处理——自适应滤波器(RLS自适应滤波器)
  7. Ali-tomcat之HSF框架Demo启动报错HSFServiceAddressNotFoundException
  8. vue使用coreUI的CDataTable踩坑记录
  9. node mysql 坑_菜鸟Node.js MySQL教程遇到的坑
  10. 实时下载速度的计算: