• matlab自学笔记(3)—图像绘制与图像处理


      

    1、绘制函数的图像

    在matlab中绘制函数的图像大概可以分为三步,1、定义函数;22、制定取值范围;3、调用plot(x,y)函数。

    例如我们绘制 y =  sin (x)的图像,可以使用如下的代码:

    当然,我们还可以对图像进行一些优化与处理,比如为坐标轴加上标签,加上网格等。直接看代码及效果:

    x = [0:0.1:10];

    y = sin(x);

    plot(x,y),xlabel('x'),ylabel('sin(x)'),legend('x'),grid on;

    %xlabel()是显示x轴的标识符,legend是为线加上注解,gird on 是加上网格。

    当然,我们也可以同时显示多张图片,使用的是函数subplot(x,y,z);x是指图像有x行,y指图像有y列,z是值要显示的图像是第几个。下面,用一个简单的例子说明一下。

     

    x = [0:0.1:10];

    y = sin(x);

    z = cos(x);

    subplot(1,2,1),plot(x,y),xlabel('x'),ylabel('sin(x)'),legend('x'),title('正弦图像'),grid on;

    %左边显示正弦

    subplot(1,2,2),plot(x,z),xlabel('x'),ylabel('cos(x)'),legend('x'),title('余弦图像'),grid on;

    %右边显示余弦

    %xlabel()是显示x轴的标识符,legend是为线加上注解,gird on是加上网格,

    %title是加上标题。

    当然,matlab的图像方面的功能不仅仅就画个函数图像这么简单。它还能对图像矩阵进行数字化的处理。

    2、处理图像文件

    要处理一幅图像首先要理解图像的本质,下面是在网上找的一个资料:

    http://www.ilovematlab.cn/thread-164340-1-1.html

    从理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。空间坐标(x,y)的数字化称为图像采样,而幅值数字化称为灰度级量化。
    对一幅图像采样时,若每行(横向)采样数为M,每列(纵向)采样数为N,则图像大小为M*N个像素, f(x,y)表示点(x,y) 处的灰度值,则F(x,y)构成一个M*N 实数矩阵
    ****************************
    经验分享:“像素”的英文为“pixel”,它是“picture”和“element”的合成词,表示图像元素的意思。我们可以对“像素”进行如下理解:像素是一个面积概念,是构成数字图像的最小单位。
    ****************************
    把采样后所得的各像素灰度值从模拟量到离散量的转换称为图像灰度的量化。量化是对图像幅度坐标的离散化,它决定了图像的幅度分辨率。
    量化的方法包括:分层量化、均匀量化和非均匀量化。分层量化是把每一个离散样本的连续灰度值只分成有限多的层次;均匀量化是把原图像灰度层次从最暗至最亮均匀分为有限个层次,如果采用不均匀分层就称为非均匀量化。
    当图像的采样点数一定时,采用不同量化级数的图像质量不一样。量化级数越多,图像质量越好;量化级数越少,图像质量越差。量化级数小的极端情况就是二值图像。
    ****************************
    经验分享:“灰度”可以认为是图像色彩亮度的深浅。图像所能够展现的灰度级越多,也就意味着图像可以表现更强的色彩层次。如果把黑——灰——白连续变化的灰度值量化为256个灰度级,灰度值的范围为0~255,表示亮度从深到浅,对应图像中的颜色为从黑到白。
    ****************************
    因此,对数字图像进行处理,也就是对特定的矩阵进行处理。在C语言中,对M×N数字图像处理的核心代码如下:
    for (j=1;j<N+1;j++)
       for(i=1;i<M+1;i++)
       { 对I(i,j)的具体运算
    };
    在Matlab中,对M×N数字图像处理的核心代码如下:
    for i=1:N
        for j=1:M
          对I(i,j)的具体运算
        end
    end

    一幅数字图像可以用一个矩阵来表示,对数字图像进行处理,实质上就是对特定的图像矩阵进行变换的过程,因此,图像变换是数字图像处理技术的基础。
    图像变换的方法林林总总,多种多样。包括空间域变换、频率域变换、时频域变换、基于经典数学理论的变换、基于现代数学理论的变换。

    如果想读入一幅图像的话,可以使用imread() 函数,那么怎样去了解这个函数的具体使用呢,再分享一招给大家,可以在命令窗口中输入,help imread  这样就会返回对这个函数的具体介绍以及一些使用的例子。

    最简单的使用方法是:A = imread(FILENAME,FMT)

    返回值的介绍:The return value A is an array containing the image data. If the file contains a grayscale image, A is an M-by-N array. If the file contains  a truecolor image, A is an M-by-N-by-3 array. For TIFF files containing color images that use the CMYK color space, A is an M-by-N-by-4 array. See TIFF in the Format-Specific Information section for more    information.. 可见,随着图像的性质的不同(是灰度图,还是彩图等),返回的矩阵也不相同。

    至于图像的具体处理都是数学矩阵方面的功夫。这里就不多述了。

    这一篇应该是这个系列的最后一篇,说实话,matlab这个软件用起来很简单,但是,利用它处理的数学问题大多较为困难。这也是学习的一个方向。

  • 相关阅读:
    PHP 表单
    php之表单-2(表单验证)
    go语言使用官方的 log package 来记录日志
    golang 中timer,ticker 的使用
    go语言slice的理解
    GETTING STARTED WITH THE OTTO JAVASCRIPT INTERPRETER
    golang time.Duration()的问题解疑
    css3动画
    【转】golang中的并行与并发
    【转】Golang 关于通道 Chan 详解
  • 原文地址:https://www.cnblogs.com/sduycq/p/4545509.html
Copyright © 2020-2023  润新知