精华内容
下载资源
问答
  • MATLAB图像灰度化处理

    2013-05-07 21:43:18
    MATLAB灰度化MATLAB图像灰度化处理,三种灰度算法
  • 一、彩色、灰度、二值、索引图像 彩色图像:每个像素由R、G、B三个分量表示,每个通道取值范围0~255。数据类型一般为8位无符号整形unit8。(通常我们认为一个彩色图像是由三页组成的,分别是R、G、B,每一页都是一个...

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

    彩色图像:每个像素由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

    谢谢各位观读我的博客

    展开全文
  • 用于图像预处理中的图像灰度化和直方图均衡处理的matlab代码
  • 基于MATLAB彩色图像灰度化处理,基于MATLAB彩色图像灰度化处理
  • 对于初学图像处理的小伙伴们,对于图像灰度化很重要。所谓灰度化就是将一个彩色的图片转换成一个黑白的图像,便于处理。准备1、打开matlab:打开matlab程序,如图所示的界面;2、清空空间:在matlab祝主界面输入...

    对于初学图像处理的小伙伴们,对于图像的灰度化很重要。所谓灰度化就是将一个彩色的图片转换成一个黑白的图像,便于处理。

    准备

    1、打开matlab:

    打开matlab程序,如图所示的界面;

    563bfa91cca208c9aad5e9d9baa21097.png

    2、清空空间:

    在matlab祝主界面输入一下指令清屏;

    clear;

    clc;

    bf59ecc75925b46b8838b908e04a43b1.png

    3、图片准备:

    将自己准备的图片放在matlab的工作目录中,直接将图片复制到工作目录中,如图所示;

    对于详细的复制方法,可参见经验:matlab如何打开一个图片转换为矩阵

    ac06e6ee00f5764f42f4e942ed8cb665.png

    图片数据准备

    1、打开图片:

    在主界面输入一下指令,将图片转换成数据;

    data=imread('文件夹图标.bmp');

    169ef739f3fd5150e647d6bcc9b063f8.png

    2、查看数据:

    双击工作空间中的,data我们可以看到图片数据的具体信息;

    772a4abb2cfd8eace4f4449b12e63089.png

    3、验证图片结果:

    输入一下指令,我们可以看到,data数据就是表示的图片;

    imshow(data);

    424a4308856464fe29a9f888119e6773.png

    灰度化

    1、灰度指令:

    我们输入一下指令,就可以获得一个灰度后的矩阵;

    gdata=rgb2gray(data);

    4e43ef4fadf992dc365ea35364b3209e.png

    2、查看灰度矩阵:

    双击,右侧的工作空间,gdata,就可以看数据的具体信息了;

    c79fa20b9ccbfa26456c5acc9e7c983b.png

    3、显示灰度图片:

    如图下面的指令,可以看到灰度话以后图片;

    7ee86463776a0b77624fdb78f366b197.png

    希望与广大网友互动??

    点此进行留言吧!

    展开全文
  • Matlab实现图像灰度化算法

    千次阅读 2020-03-16 21:12:56
    Matlab实现图像灰度化算法灰度化算法原理 灰度化算法原理 RGB应该都听说过,我们一般看到的彩色图像嘛,R、G、B分别对应了三原色:红色(red)、绿色(green)和蓝色(blue)。如果有玩过P图的,也许会知道,画板...

    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:m
        for 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型
    
    展开全文
  • 灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0。所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰度值的象...
  • 基于MATLAB图像灰度化和图像匹配程序源代码 运行很完美
  • MATLAB-图像灰度化处理

    2012-04-26 00:48:53
    M文件,可以在MATLAB平台上实现彩色图像灰度化处理,有比对。
  • Matlab实现彩色图像灰度化

    千次阅读 2019-04-18 18:49:06
    matlab实现彩色图像灰度化 ** 灰度化处理:将彩色图像转换为灰度图像的过程 对于图像而言,灰度化处理就是使彩色的R,G,B分量值相等的过程。 灰度化处理的方法主要有如下3种: 最大值法:使R,G,B的值等于3值中...

    灰度化处理:将彩色图像转换为灰度图像的过程
    对于图像而言,灰度化处理就是使彩色的R,G,B分量值相等的过程。
    灰度化处理的方法主要有如下3种:

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

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

    3. 加权平均值法:根据重要性或其他指标给R,G,B赋予不同的权值,并使R,G,B的值加权平均,R=G=B=WR+VG+UB,W,V,U分别表示权重,研究表明,人对绿色的敏感度最高,对红色次之,对蓝色的敏感度最低,因此W>V>U,实验和理论证明当W=0.2989,V=0.5870,U=0.1140时,能得到最合理的灰度图像。
      Matlab自带的灰度化处理函数rgb2gray采用的是第三种方法。
      注意:如果图像类型为double型,但是灰度值范围超过0-1,需要对图像进行归一化。否则会发现利用W=0.2989,V=0.5870,U=0.1140编写代码进行灰度化与rgb2gray进行灰度化结果不一致(经过rgb2gray处理的图像灰度值范围为0-1,超过1的均为1)。

      补充:归一化

      归一化方法可以分为:

      (1)R、G、B各自归一化

      疑问 Q:R、G、B经过各自归一化其在彩色图像中所占权重会改变,灰度化时赋给R、G、B三通道图像的权值W=0.2989, V=0.5870, U=0.1140是否还需要改变?又有什么影响?

      (2)R、G、B统一归一化

    自己编写代码:

    xsaw= load(xsaw.mat');%其中xsaw为m*n*3的彩色图像,灰度值为double型,范围在0-5之间
    % 提取RGB分量
    Rxaw = xsaw(:,:,1);
    Gxaw  = xsaw(:,:,2);
    Bxaw  = xsaw(:,:,3);
    figure;
    figure,imshow(xsaw,[]), title('原图');
    figure,imshow(Rxaw,[]), title('R分量'); 
    figure,imshow(Gxaw,[] ), title('G分量'); 
    figure,imshow(Bxaw,[]), title('B分量'); 
    % 灰度变换,公式:f(x,y)=0.2989R+ 0.5870G + 0.1140B
    img_gray1 = Rxaw*0.2989+ Gxaw*0.5870+ Bxaw*0.1140;
    figure,imshow(img_gray1,[]), title('灰度图像');
    

    MATLAB自带的rgb2gray:

     xsaw= load(xsaw.mat');
     img_gray=rgb2gray(xsaw);
     figure,imshow(img_gray,[]), title('灰度图像');
    

    其中,左图为rgb2gray灰度化效果,右图为自己编写代码的灰度化效果。如果提前进行归一化操作则二者效果一致。

    展开全文
  • MATLAB实现彩色图像灰度化

    千次阅读 多人点赞 2019-12-12 19:05:26
    彩色图像灰度化 实现彩色图像的灰度化主要有三种方法:最大值法、平均值法、加权平均法。 最大值法 取RGB三色分量中的最大值,即R=G=B=max(R,G,B) 平均值法 取RGB三色分量中的平均值,即R=G=B=(R+G+B)/3 ...
  • . 目 录 第 1 章 绪论 - 1 - 第 2 章 设计原理 - 2 - 第 3 章 彩色图像的灰度化处理 - 3 - 3.1 加权平均法 - 3 - 3.2 平均值法 - 4 - 3.3 最大值法 - 5 - 3.4 举例对比 - 6 - 3.5 结果分析... 基于Matlab的彩色图像灰度
  • 描述了图像灰度化MATLAB程序,还有二值化的程序
  • Matlab图像读入灰度化存储边缘检测-simple application.rar simple application.rar file:///C:/Documents and Settings/Administrator/桌面file:///C:/Documents and Settings/Administrator...
  • matlab实现彩色图像灰度化的三种方法

    万次阅读 多人点赞 2018-12-14 20:50:13
    将彩色图像转换为灰度图像的过程称为灰度化处理。 对于图像而言,灰度化处理就是使彩色的R,G,B分量值相等的过程。 灰度化处理的方法主要有如下3种: 最大值法:使R,G,B的值等于3值中最大的一个,R=G=B=max(R,G,B...
  • MATLAB实现图像灰度归一

    万次阅读 多人点赞 2017-03-11 20:04:57
    一般而言,对于灰度图像(或彩色通道的每个颜色分量)进行灰度归一就是:使其像素的灰度值分布在0~255之间,避免图像对比度不足(图像像素亮度分布不平衡)从而对后续处理带来干扰。一种常见的图像归一原理1是y=...
  • %读取图像并转成灰度图像 I =imread('tiantan.jpg'); I =rgb2gray(I); %生成高斯滤波器核 w =fspecial('gaussian',3,0.5); size_a = size(I); %进行高斯滤波 g =imfilter(I,w,'conv','symmetric','same'); %降采样 t...
  • matlab图片灰色代码...使用Python在灰度和RGB彩色图像上进行Canny边缘检测 颜色Canny改编自Matlab代码: Van De Weijer,Joost和Gevers,Theo和Smeulders,Arnold WM,“颜色张量中的稳健光度不变性”,TIP 2006。
  • MatLab矩阵运算——图像灰度化

    千次阅读 2013-09-10 12:34:04
    在群里聊天的时候,有个人问图像灰度化的问题,这是一个很简单的问题,对于图像处理这块来说,matlab和opencv都是一句话调用的事情: Matlab中:gray= rgb2gray(src); 这里的src代表原始图像; Opencv中:Mat ...
  • matlab来实现图像灰度化和二值化两个基本功能
  • MATLAB 灰度化图像

    2010-11-21 11:18:22
    时基于MATLAB 的比较适合人眼的灰度化效果
  • matlab灰度化、二值化处理图像

    万次阅读 多人点赞 2018-12-04 20:59:36
    matlab文字识别与提取: 1.图像转换为数字矩阵 ...rgb2gray :通过消除图像色调和饱和度信息同时保留亮度实现将将RGB图像或彩色图转换为灰度图像,即灰度化处理的功能 gdata = rgb2gray(data); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,235
精华内容 494
关键字:

matlab图像灰度化

matlab 订阅