精华内容
下载资源
问答
  • 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型
    
    展开全文
  • 图像矩阵g有些为double类型,有些为uint8类型,揪心。 公式:g(x,y)=low_g + (high_g - low_g) / (high_f - low_f)*(f(x,y) - low_f) clear ...%将彩色图像转换为灰度图像 imshow(I); J=imadjus...

    灰度图像矩阵为uint8数据类型,而做变换计算后变为double类型,需要转回uint8类型才能正常显示图像。
    公式:g(x,y)=low_g + (high_g - low_g) / (high_f - low_f)*(f(x,y) - low_f)

    clear
    I=imread('C:\Users\lenovo\Desktop\1.jpg');
    %将彩色图像转换为灰度图像
    I=rgb2gray(I);
    imshow(I);
    J=imadjust(I,[0.3;0.6],[0.1;0.9]);
    figure;imshow(J);
    low_f=0.3*255;high_f=0.6*255;low_g=0.1*255;high_g=0.9*255;
    k=(high_g-low_g)/(high_f-low_f);
    %获得矩阵I的行列数分别为M,N
    [M,N]=size(I);
    %将矩阵I数据类型从uint8类型变为double类型,否则会影响后面计算
    I=double(I);                         
    for i=1:M
        for j=1:N
       		%灰度值比low_f还小的像素点,取变换计算后的最小值low_g
            if (I(i, j) <= low_f)                                 
                g(i,j) = low_g;     
            %灰度值在[low_f, high_f] 区间进行变换计算                           
            elseif (low_f < I(i, j) && I(i, j) < high_f) 
                g(i,j)=(low_g+k*(I(i,j)-low_f));
            else
                %灰度值大于high_f的像素点,取变换计算后的最大值high_g
                g(i,j) = high_g;                                
            end
        end
    end
    %将矩阵g数据类型从double类型变为uint8类型,否则输出一片空白
    g=uint8(g);                   
    figure;imshow(g);
    
    展开全文
  • 作用 直方图均衡化的作用是图像增强。 原理 参考这篇文章 实验步骤 ...function [J] = imhisteq(I) ... %获得输入图像尺寸M、N、C(size函数) ...%矩阵F中的数据由uint8类型转换为...%计算图像F的灰度直方图h(imhist.

    作用

    直方图均衡化的作用是图像增强。

    原理

    参考这篇文章


    实验步骤

    在这里插入图片描述

    实现代码

    function [J] = imhisteq(I) 
    [M,N,C]=size(I);  %获得输入图像尺寸MNC(size函数)
    
    I0 = double(I);%矩阵F中的数据由uint8类型转换为double类型以便后续处理。
    
    if(C>1)
        I=rgb2gray(I); %如果颜色通道数C>1,则将彩色图像转化为灰度图rgb2gray
    end
    
    %计算图像F的灰度直方图h(imhist函数)
    %或者通过两重循环遍历每个像素点从而得到每个灰度值的累计像素点个数)。
    h = imhist(I,256)';
    
    %计算原图的灰度分布概率Pf =h/(M*N)    (i=0,1,,255)。
    Pf = h/(M*N);
    
    %计算原图灰度的累计分布Pa(使用cumsum函数)
    Pa = cumsum(Pf);
    
    %令Pa(1)=0
    Pa(1)=0;
    
    %Pa_1= Pa *255。将Pa_1四舍五入.
    Pa_1 = round(Pa*255);
    
    %置两重循环遍历图像F中所有像素点,求出每一个像素点的灰度值F(i,j)
    for i=1:M
        for j=1:N
            J(i,j) = Pa_1(I0(i,j)+1);
        end
    end
    
    %计算得到的新图像矩阵中所有点的灰度值由double转换为uint8
    J = uint8(J);  %转换uint8编码
    
    

    测试

    F  = imread('');/*灰度图路径自己指定*/
    [G]=imhisteq(F);
    figure,imshow(G);
    

    效果

    在这里插入图片描述

    展开全文
  • MATLAB实现图像灰度归一化

    千次阅读 2019-05-28 15:40:30
    一般而言,对于灰度图像(或彩色通道的每个颜色分量)进行灰度归一化就是:使其像素的灰度值分布在0~255之间,避免图像对比度不足(图像像素亮度分布不平衡)从而对后续处理带来干扰。 一种常见的图像归一化原理1.....

    转载自: https://blog.csdn.net/discoverer100/article/details/61426650

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

    一种常见的图像归一化原理1是y=(x-MinValue)/(MaxValue-MinValue) 
    其中x、y分别为归一化前、归一化后的值,MaxValue、MinValue分别为原始图像灰度的最大值和最小值。

    源码示例(这里包含了三种方法:前两种是编程实现2,最后一种直接调用MATLAB函数来实现3,大家可以参考):
     

    oriImage = imread('XXXX.jpg');
    grayImage = rgb2gray(oriImage);
    figure;
    imshow(grayImage);
    
    originalMinValue = double(min(min(grayImage)));
    originalMaxValue = double(max(max(grayImage)));
    originalRange = originalMaxValue - originalMinValue;
    
    % Get a double image in the range 0 to +255
    desiredMin = 0;
    desiredMax = 255;
    desiredRange = desiredMax - desiredMin;
    dblImageS255 = desiredRange * (double(grayImage) - originalMinValue) / originalRange + desiredMin;
    
    figure;
    imshow(uint8(dblImageS255));
    
    % Get a double image in the range 0 to +1
    desiredMin = 0;
    desiredMax = 1;
    desiredRange = desiredMax - desiredMin;
    dblImageS1 = desiredRange * (double(grayImage) - originalMinValue) / originalRange + desiredMin;
    
    figure;
    imshow(dblImageS1);
    
    % Another way to normalazation, which only calls MATLAB function
    img3 = mat2gray(oriImage);
    figure;
    imshow(img3);
    

    原始图片

    运行后的效果

    注意:如果在自己的图片上希望看到直观的效果,请模仿示例预先将测试图片的对比度调低一些,让图像中各个像素点的灰度分布范围不足 0-255。

    参考资料: 
    https://cn.mathworks.com/matlabcentral/newsreader/view_thread/297402 
    http://blog.csdn.net/zengjiqin/article/details/50032893 
    http://blog.csdn.net/fx677588/article/details/53301740#comments

    http://blog.csdn.net/zengjiqin/article/details/50032893 ↩
    https://cn.mathworks.com/matlabcentral/newsreader/view_thread/297402 ↩
    http://blog.csdn.net/fx677588/article/details/53301740#comments ↩
     

     

     

    展开全文
  • 灰度图像增强的大致原理以及操作方法 面向作业编程 上图是大概对灰度图的增强处理 就是想让图片变得更好看 那么如何具体操作就看下面的代码了 这是一个简单的线性分段处理,相信在注释的帮助下应该能看懂。 %返回...
  • 该功能仅适用于灰度图像,如果前景比背景更亮或更暗,用户必须手动输入。 使用的过滤器是最简单的:最小和最大过滤器。 最大值和最小值过滤器分别为图像中的每个像素分配一个新值,该值等于该像素周围邻域中的最大...
  • Matlab实现二值图像模拟灰度图像显示效果抖动技术图案法抖动矩阵2x2抖动矩阵4x4抖动矩阵Matlab代码实现2x2抖动矩阵实现2倍尺寸的模拟灰度图像的显示效果4x4抖动矩阵实现4倍尺寸的模拟灰度图像的显示效果 抖动技术 ...
  • RGB图像转化为灰度原理

    千次阅读 2020-11-22 23:16:26
    RGB图像转化为灰度原理以及MATLAB实现 1 原理 在RGB彩色模型中表示的图像由三个分量图像组成,每种原色一幅分量图像。利用MATLAB图像进行读取,可以知道存储RGB图像数据为2562563 uint8,其中256*256表示长和宽...
  • 该算法是一种使用kmeans原理对输入的彩色或灰度图像进行聚类的全自动方法,但是在这里,您无需指定聚类数或任何初始种子值即可开始迭代,该算法会自动查找聚类数和聚类中心. 这是在不知道聚类数量的情况下对图像进行...
  • 量化灰度图像并为每个灰度级分配随机颜色。 使用 demo_colormix 脚本来查看函数的工作原理
  • 二、做灰度图像算术编码的一些关键问题 (1) 由于计算机精度有限,小数所能表达的精度是有限的,所以当编码到一定程度就会发生数据溢出。为了解决这个问题,每本篇博客采用的方法是:当数据溢出之前,将已经编码...
  • RGB到灰度图像的转换原理

    千次阅读 2019-04-21 21:26:59
    转换公式简单来说,就是把RGB3个通道的分量按照一定的比例计算到灰度图像中。 Gray = R0.299 + G0.587 + B0.114 matlab实现转换(直接显示使用rgb2gray函数) img=imread(‘face1.jpeg’); [m,n,h] = size(img); ...
  • matlab灰色处理代码摘要数字图像处理提供了检查数字图像的基本方法,以及分析和处理数字照片的基本技术的发展,其中包括数字图像处理的原理,概念和技术。 数字图像处理中使用的基本知识包括应用于电气工程的滤波,...
  • imadjust函数是MATLAB的一个工具箱函数,一般的语法调用格式为: f1=imadjust(f,[low_in high_in],[low_out high_...该函数的意义如图1所示,把图像灰度变换到新图像f1的过程中,f 中灰度值低于low_in的像素
  • matlab灰色处理代码数字图像处理 包含MATLAB代码的文件库,可能还有一些C ++代码,以演示灰度数字图像处理的基本原理
  • 数学形态学是数字图像处理中一种很独特的方法,它基于像素与其周遭像素的位置灰度关系来完成某些功能。膨胀和腐蚀是最常见的处理方法,由此衍生出来的还有开运算、闭运算、梯度运算、顶帽(Top Hat)、黑帽(Black Hat)...
  • PAGE PAGE 0 宜宾学院 物理与电子信息工程学院 学科数字信号处理原理及实现 题目:MATLAB实现基于灰度变换的图像增强 姓名孙明朗 班级14级励志班 学号140303006 图像增强技术是不考虑图像降质的原因 只将图像中感兴趣...
  • 目 录 第 1 章 绪论 - 1 - 第 2 章 设计原理 - 2 - 第 3 章 彩色图像灰度化处理 - 3 - 3.1 加权平均法 - 3 - 3.2 平均值法 - 4 - 3.3 最大值法 - 5 - 3.4 举例对比 - 6 - 3.5 结果分析 - 8 - 第 4 章 结 论 - 9 -...
  • matlab灰色处理代码ME5405 /中的计算机视觉模块代码。 要进行处理,请运行代码“ processTextFile.m”。 要进行处理,请运行代码“ processPngFile.m”。 客观的 (charact1.txt)是64x64的图片。 (charact2.bmp)...
  • 本文采用基本原理对图像进行旋转 使用MATLAB语言, 基本推导过程可参考https://blog.csdn.net/qq_42655135/article/details/88601342 ...%转化为灰度图像 M=size(gray,1); %计算原图像尺寸 行...
  • 在进行数字图像处理时,需要将图像转换成灰度图。如truecolor转化为灰度图,可用函数rgb2gray即可实现,语法也比较简单。如下: grayImage=rgb2gray(srcImage); 加载完图片后可使用imfinfo()函数查看图像信息,...
  • 图像各像素点(i, j)做以下运算: 记某像素点的值为p,则: f(p)={ap < abp > bf(p)= \begin{cases} a& \text{p < a}\\ b& \text{p > b} \end{cases}f(p)={ab​p <...
  • 这个学期有图像处理课程...这类课程少不了要做实验,交实验作品...今天在完装完成matlab(linux)后便开始了一个小小的实验... 这个实验就是..这个记录就是介绍怎么实现的.(基于matlab); =实验結果= 原彩色图: ...
  • MATLAB图形图像处理

    热门讨论 2011-01-03 12:20:11
    第八章 数字图像原理 8.1 图像 8.2 数字图像处理学 8.2.1 数字图像处理方法 8.2.2 数字图像处理的主要内容 8.3 图像文件格式 8.4 图像类型 8.4.1 索引图像 8.4.2 灰度图像 8.4.3 RGB 图像 8.4.4 二值图像 ...
  • 先插一嘴相似图片搜索的原理 大概类似Open CV马赛克拼图 1、批量导入图片,对图像进行处理,调整大小(我采用3030) 2、计算每张图的平均灰度,建立每张图的灰度索引并按灰度级等分为10层 3、对于要拼的图,进行...
  • MyYuanLaiPic = imread('e:/image/matlab/Cluo.jpg');%读取RGB格式的图像 ...%用已有的函数进行RGB到灰度图像的转换 [rows , cols , colors] = size(MyYuanLaiPic);%得到原来图像的矩阵的参数 MidG...
  • MATLAB数字图像处理

    2010-07-09 15:36:41
    同时,以一个灰度图像为例,用 MATLAB语言实现 了直方图均衡化和规定化增强处理,并给出了具体程序、实验结果图像及直方图。结果表明,直方图均衡化和规定化处理能有 效改善灰度图像的时比度差和灰度动态范围

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 372
精华内容 148
关键字:

matlab灰度图像原理

matlab 订阅