• 数字图像处理笔记与体会(一)——matlab编程基础


    最近开始学习数字图像处理,使用matlab实现,下面我就来记录笔记和体会,一方面是给大家提供参考,另一方面是防止我忘记了。

    复习一下:

    1.数字图像是用一个数字矩阵来表示的,数字阵列中的每个数字,表示数字图像的一个最小单位,称为像素。

    2.数字图像处理可以理解为两个方面的操作:一个是图像到图像的处理(如图像的灰度转换,图像增强等),另外一个是图像到非图像的一种表示,比如图像的测量。

    3.数字图像处理的研究内容有很多个方向,比如:

      ·图像数字化:将一幅图像以数字的形式表示,主要包括采样和量化两个过程。

      ·图像增强:将一幅图像中的有用信息进行增强,同时对无用的信息进行抑制,提高图像的可观察性。

      ·图像的几何变化:改变图像的大小、形状等。

      ·图像的变换:通过数学的方法,将空间域的图像信息  转换  到 频域、时频域等空间进行分析。

      ·图像识别与理解:通过对图像中各种不同的物体特征进行量化描述后,将其所期望获得的目标物进行提取,并且对所提取的目标物进行一定的定量分析。

    4.位图可以使用二维的矩阵进行表示,不同的格式图像,存储格式不一样,主要有:

          ·二值图像:图像像素使用二维矩阵表示,矩阵的值就是像素的颜色值,值只有两个值0和1(或者0和某个不为0的值,比如0和255),只能表示两种颜色:黑和白,一般值越大越趋于白;

      ·8位索引图像:图像像素使用二维矩阵表示,但是矩阵的值不是像素的颜色值,矩阵的值表示索引表的序号;也就是说,8位索引图像需要一个矩阵和一张索引表来表示,索引表有256个序号,每个序号对应一组RGB值,表示了一种颜色,因此8位索引图像的一个像素有256中颜色变化。

      8位索引图像有彩色图像和灰度图像之分,灰度图像的RGB值相等且都等于序号的值;而彩色图像的RBG不相等。

      ·24位真彩图:也是用矩阵表示,图像像素直接用RGB颜色显示,而不是通过颜色索引表。图像的像素用三个变量表示即(R,G,B),每个变量从0~255变化,因此一个像素也就是8bit*3=24bit,一个像素用24bit表示可以有2^24种颜色。

     

      今天主要学的是:

        ·RGB图像转为灰度图像

        ·有颜色的索引表位图转换成灰度图

        ·RGB图像转为索引图像

        ·灰度图像转为索引图像

        ·灰度图像转为二值图像

        ·RGB图像转为二值图像

     

    1、RGB图像转为灰度图像

      这里的RGB图像为任何一张彩色图,然后经过转换之后,得到一张灰度图像,使用matlab实现如下所示:

    close all ;%关闭所有文件
    clear all ;%清除所有变量
    clc ;      %清屏
    X=imread('Hydrangeas.jpg');%读入RGB图像
    I=rgb2gray(X);%进行灰度变化
    set(0,'defaultFigurePosition',[100,100,1000,500]);%设置显示图像的窗口大小
    set(0,'defaultFigureColor',[0 0 0]);%设置显示的背景颜色
    subplot(121),imshow(X);%显示读入的图像
    subplot(122),imshow(I);%显示进行灰度变化后的图像

       运行一下,如下图所示:

    得到如下结果:

     

    下面说一下代码中需要注意的事项:
        ·imread是读入图像的函数,读入的图像需要放到当前的工作目录下,或者直接输入路径:X=imread('F:/图像处理/Hydrangeas.jpg');
        ·rgb2gray是将彩色图像转换成灰度图像的函数
        ·运行之后,可以查看X和I的变量:

                     

    X是三维的,而I是二维的,这是需要注意的。

         ·然后:set(0,'defaultFigurePosition',[100,100,1000,500]);中:

    [100,100,1000,500]:前面的两个参数100,1000主要是用来设置窗口的相对位置,后面的两个参数1000,500主要设置窗口大小,1000是设置窗口的横向长度,500是设置窗口的高度。
        set(0,'defaultFigureColor',[0 0 0]);中:
    [0 0 0]表示设置背景颜色为黑色。[1 0 0]表示设置背景颜色为红色,等等。

        ·imshow是显示图像的函数。
    subplot(121)是窗口显示图像的方式,设置为在同一个窗口显示,一行两列。然后subplot(121),imshow(X)则是:X显示第一幅图像在第一行第二列的第一个位置。
    subplot(122),imshow(I)则是:I显示第一幅图像在第一行第二列的第二个位置。效果如上面所示。


    2.有颜色的索引表位图转换成灰度图
      但是这里输入的8bit的带索引表的彩色图像,然后将它转换成灰度图。代码如下所示:
    close all ;
    clear all ;
    clc ;
    [X,map] = imread('Hydrangeas.bmp');%读入图片
    newmap = rgb2gray(map);%将彩色的索引表转换成灰色的索引表
    figure, imshow(X,map);%显示原始的图片
    figure, imshow(X,newmap);%显示转换后的图片
      图片如下所示:

    下面说一下需要注意的地方:
      从上图中我们看到,X是一个二维的变量,此外map、newmap也是一个二维的变量;变量的含义是不一样的,X变量表示的是这是一张768x1024像素大小的图片。
    而map和newmap则表示的颜色索引表的内容,总共256行,每行3列(即RGB)。
      这里用figure进行显示图像。


    3.RGB图像转为索引图像
      这里将一幅RGB图(彩色图,比如说jpg、真彩色等彩色图)转换成索引图,也就是带索引表的图像。这里转换成索引的彩色图像,与第1.不同,代码如下:
    close all ;
    clear all ;
    clc ;
    RGB=imread('F:/图像处理/Hydrangeas.jpg');
    [X1,map1]=rgb2ind(RGB,64);
    [X2,map2]=rgb2ind(RGB,0.2);
    map3 = colorcube(128);
    X3 = rgb2ind(RGB,map3);
    set(0,'defaultFigurePosition',[100,100,1000,500]);
    set(0,'defaultFigureColor',[0 1 1]);
    figure;
    subplot(131),imshow(X1,map1),title('最小方差转换');
    subplot(132),imshow(X2,map2),title('均匀量化发转换');
    subplot(133),imshow(X3,map3),title('颜色近似法转换');

     

    下面解释一下代码:
        RGB=imread('F:/图像处理/Hydrangeas.jpg');
      这是读入图像了,跟前面的两种转换方式的意思一样,读入的是一幅彩色图像。
        [X1,map1]=rgb2ind(RGB,64);
        [X2,map2]=rgb2ind(RGB,0.2);
      这两行代码都用到了rgb2ind这个函数,我们来看一下这个函数的意思:

    由此,我们可以知道,
      [X1,map1]=rgb2ind(RGB,64);就是使用最小方差量化将RGB图像转换为索引图像X. MAP最多包含N种颜色。 N必须<= 65536。
      [X,MAP] = rgb2ind(RGB,TOL)使用均匀量化将RGB图像转换为索引图像X. MAP最多包含(FLOOR(1 / TOL)+1)^ 3种颜色。 TOL必须介于0.0和1.0之间。、
    这里FLOOR=1,当TOL等于0.2时,则表示216种颜色。

        map3 = colorcube(128);
        X3 = rgb2ind(RGB,map3);

      上面的两行代码则是创建一个指定颜色数目的所以表,然后用这个索引表进行近似显示RGB图。colorcube增强的彩色立方体颜色图。 colorcube(M)返回一个包含彩色立方体的M-by-3矩阵。 colorcube本身的长度与当前的色彩映射相同。 彩色立方体在RGB色彩空间中包含尽可能多的定期间隔的颜色,同时尝试提供更多的灰色,纯红,纯绿和纯蓝色的步骤。 该多维数据集的算法灵感来自默认的Macintosh系统colortable,对于M = 256,colorcube返回完全相同的颜色。 对于M <8,返回长度为M的灰色斜坡。
    后面的代码则是显示了,不再多说。
    下面的显示效果:
        

     

    4.灰度图像转为索引图像

      我们先将彩色图像转换成灰度图像,然后再讲灰度图像转换成8种颜色的索引表(也就是索引表长度为8),代码如下所示:

    close all ;
    clear all ;
    clc ;
    RGB=imread('F:/图像处理/Hydrangeas.jpg');
    gray=rgb2gray(RGB);%得到灰度图
    [X,map] = gray2ind(gray,8);%将灰度图转成索引图,8种颜色
    set(0,'defaultFigurePosition',[100,100,1000,500]);
    set(0,'defaultFigureColor',[0 0 0]);
    figure;
    subplot(121), imshow(gray);%显示灰度的图片
    subplot(122), imshow(X,map);%显示转换后的图片

     

      这里需要说明的是用到了gray2ind函数,这个就是将灰度图像转换成索引图像的函数,功能如下所示:

      我们这里取N=8,索引表长度为8。运行效果如下所示:

     

     

     

     

    5.灰度图像转为二值图像

      我们也是先将RGB图转成灰度图,然后在将灰度图转为二值图像,代码如下所示:

     

    close all ;
    clear all ;
    clc ;
    RGB=imread('F:/图像处理/Hydrangeas.jpg');
    gray=rgb2gray(RGB);%得到灰度图
    BW1 = im2bw(gray,0.3);%将灰度图转成二值图,阈值为0.4
    BW2 = im2bw(gray,0.7);%将灰度图转成二值图,阈值为0.7
    set(0,'defaultFigurePosition',[100,100,1000,500]);
    set(0,'defaultFigureColor',[1 1 1]);
    figure;
    subplot(131), imshow(gray);%显示灰度的图片
    subplot(132), imshow(BW1);%显示转换后的图片
    subplot(133), imshow(BW2);%显示转换后的图片

    这里需要说明的是,灰度转二值图的函数是im2bw,后面的阈值的意思是,判断哪些该转换成1,哪些该转换成0,阈值设置得越小,得到的二值图像的白色面积越多。代码运行的效果如下所示:

     

     

     

    6.RGB图转为二值化图像

    读进RGB图之后,直接转为二值图像,代码如下所示:

     

    close all ;
    clear all ;
    clc ;
    RGB=imread('F:/图像处理/Hydrangeas.jpg');
    BW1 = im2bw(RGB,0.3);%将灰度图转成二值图,阈值为0.4
    BW2 = im2bw(RGB,0.7);%将灰度图转成二值图,阈值为0.7
    set(0,'defaultFigurePosition',[100,100,1000,500]);
    set(0,'defaultFigureColor',[1 1 1]);
    figure;
    subplot(131), imshow(RGB);%显示灰度的图片
    subplot(132), imshow(BW1);%显示转换后的图片
    subplot(133), imshow(BW2);%显示转换后的图片

     

     

    运行效果如下所示:

     

  • 相关阅读:
    ps cc 2018安装
    eclipse 快速添加 set , get 方法
    电脑设置以太网
    C# 获取web.config配置文件内容
    C# @Page指令中的AutoEventWireup,CodeBehind,Inherits
    未能正确加载“Microsoft.VisualStudio.Implementation.EditorPackage”包
    C# 实现MD5加密
    mutex 简单介绍
    select @@IDENTITY
    C# vs2012创建报表
  • 原文地址:https://www.cnblogs.com/IClearner/p/6754821.html
Copyright © 2020-2023  润新知