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

    千人学习 2017-06-27 19:37:11
    MATLAB图像处理课程
  • matlab图像处理

    千次阅读 2017-09-22 13:07:47
    matlab图像处理

    matlab中 fprintf 和disp的用法

    disp(‘pi=’,pi)
    ??? Error using ==> disp
    Too many input
    arguments.

    disp(sprintf(‘圆周率pi= %8.5f’,pi))
    圆周率pi= 3.14159

    想把字符串pi=和变量pi的值显示在一行上,试用disp(′pi=′,pi),回答这是非法的.这时应该用sprintf函数,它可把数据按要求的格式转换为字符串,再把它与需要显示的字符串组装成一个长字符串,使显示格式非常灵活,人机界面更为友好.如键入
    st=sprintf(′ 圆周率pi= %8.5f′,pi);
    disp(st)
    结果为
    圆周率pi=3.14159
    其中,%为数据格式符,f表示十进制浮点,8.5表示数字的长度为8位,小数点后5位.从%到f之间的字符都是不显示的,它只指出显示数据pi的格式,跟C的printf很相似。

    字 符 串 转 换

    abs

    字符串到ASCII转换

    dec2hex

    十进制数到十六进制字符串转换

    fprintf

    把格式化的文本写到文件中或显示屏上

    hex2dec

    十六进制字符串转换成十进制数

    hex2num

    十六进制字符串转换成IEEE浮点数

    int2str

    整数转换成字符串

    lower

    字符串转换成小写

    num2str

    数字转换成字符串

    setstr

    ASCII转换成字符串

    sprintf

    用格式控制,数字转换成字符串

    sscanf

    用格式控制,字符串转换成数字

    str2mat

    字符串转换成一个文本矩阵

    str2num

    字符串转换成数字

    upper

    字符串转换成大写

    在许多情况下,希望把一个数值嵌入到字符串中。几个字符串转换可完成这个任务。

    » rad=2.5; area=pi*rad^2;

    » t=[’ A circle of radius ’ num2str(rad) ’ has an area of ’ num2str(area) ’ . ’ ] ;

    » disp(t)

    A circle of radius 2.5 has an area of 19.63.

    这里函数num2str用来把数值转换成字符串,字符串连接用来把所转换的数嵌人到一个字符串句子中。按类似方式,int2str把整数转换成字符串。无论是num2str还是int2str都调用函数sprintf,它用类似C语言语法把数值转换成字符串。

    函数fprintf经常是函数disp的一个有用替换,由于它提供了对结果更多的控制。当准备把格式化的数据写到一个文件中去时,按缺省它在命令窗口显示结果。例如,

    » fprintf(’ See what this does ‘)

    See what this does»

    » fprintf(’ See what this does\n ‘)

    See what this does

    在上面第一个例子里,fprintf显示字符串,然后立即给出MATLAB提示符。相反,在第二个例子里,\n插入一个新行字符,在MATLAB提示符出现之前创建一个新行。

    无论fprintf还是sprintf以同样方式处理输入参量,但fprintf把输出送到显示屏或文件中,而sprintf把输出返回到一个字符串中。例如,上面的例子用num2str可重写为

    » t=sprintf(’ A circle of radius %.4g has an area of %.4g. ‘, rad, area);

    » disp(t)

    A circle of radius 2.5 has an area of 19.63.

    » fprintf(’ A circle of radius %.4g has an area of %.4g.\n ’ , rad, area)

    A circle of radius 2.5 has an area of 19.63.
    这里%.4g是用在函数num2str中的数据格式。%.4g就是用指数或定点标记,不管哪一种更短些,只显示至4位数字。除了g格式,还可用e (指数)和f(定点)转换。表6.2表明在各种不同转换下,如何显示pi结果。

    表6.2

    数 值 格 式 转 换 例 子

    命令

    结果

    fprintf(’ %.0e\n ‘,pi)

    3e+00

    fprintf(’ %.1e\n ‘,pi)

    3.1e+00

    fprintf(’ %.3e\n ‘,pi)

    3.142e+00

    fprintf(’ %.5e\n ‘,pi)

    3.14159e+00

    fprintf(’ %.10e\n ‘,pi)

    3.1415926536e+00

    fprintf(’ %.0f\n ‘,pi)

    3

    fprintf(’ %.1f\n ‘,pi)

    3.1

    fprintf(’ %.3f\n ‘,pi)

    3.142

    fprintf(’ %.5f\n ‘,pi)

    3.14159

    fprintf(’ %.10f\n ‘,pi)

    3.1415926536

    fprintf(’ %.0g\n ‘,pi)

    3

    fprintf(’ %.1g\n ‘,pi)

    3

    fprintf(’ %.3g\n ‘,pi)

    3.14

    fprintf(’ %.5g\n ‘,pi)

    3.1416

    fprintf(’ %.10g\n ‘,pi)

    3.141592654

    fprintf(’ %.8.0g\n ‘,pi)

    3

    fprintf(’ %.8.1g\n ‘,pi)

    3

    fprintf(’ %.8.3g\n ‘,pi)

    3.14

    fprintf(’ %.8.5g\n ‘,pi)

    3.1416

    fprintf(’ %.8.10g\n ‘,pi)

    3.141592654

    注意,对e 和f 格式,小数点右边的十进制数就是小数点右边要显示的多少位数字。相反,在g的格式里,小数点右边的十进制数指定了显示数字的总位数。另外,注意最后的五行,其结果指定为8个字符长度,且是右对齐。在最后一行,8被忽略,因为指定超过了8位。

    概括起来,当需要比缺省函数disp,num2str和int2str所提供的更多的控制时,fprintf和sprintf是有用的。

    函数str2mat把一列的几个字符串转换成一个字符串矩阵。例如,

    » a=’ one ’ ; b= ’ two ’ ; c= ’ three ’ ;

    » disp(str2mat(a, b, c, ’ four ‘))

    one

    two

    three

    four

    从上面看不明显,上面的每行有同样数目的元素。较短行用空格补齐,使结果形成一个有效的矩阵

    在逆方向转换中,有时是很方便的。

    » s= ’ [1 2; pi 4] ’ % a string of a MATLAB matrix

    s =

    [1 2; pi 4]

    » str2num(s)

    ans =

    1.0000 2.0000

    3.1416 4.0000

    » s=’ 123e+5 ’ % a string containing a simple number

    s =

    123e+5

    » str2num(s)

    ans =

    12300000

    函数str2num不能接受用户定义的变量,也不能执行转换过程的算术运算。

    pcolor(X,Y,C)函数的用法: X,Y是用来定位的,C是用来填充颜色的。

    当X,Y是向量时,X与C的列对应,Y与C的行对应,因此向量X和Y的维数必须要求与C的列与行统一。所以使用时注意检查X,Y,C的大小和维数。

    其后面最好用上函数:shading interp;

    展开全文
  • MATLAB图像处理MATLAB图像处理MATLAB图像处MATLAB图像处理
  • Matlab图像处理

    万次阅读 2010-09-05 21:29:00
    Matlab 图像处理   MATLAB知识实验一 Matlab语言、数字图象基本操作一、实验目的 1、复习MATLAB语言的基本用法; 2、掌握MATLAB语言中图象数据与信息的读取方法; 3、掌握在MATLAB中绘制灰度直方图的方法,...

     

     Matlab 图像处理     
     MATLAB
    知识


    实验一 Matlab语言、数字图象基本操作

    一、实验目的
    1
    、复习MATLAB语言的基本用法;
    2
    、掌握MATLAB语言中图象数据与信息的读取方法;
    3
    、掌握在MATLAB中绘制灰度直方图的方法,了解灰度直方图的均衡化的方法。
    二、实验原理
        MATLAB
    是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。作为强大的科学计

    算平台,它几乎能够满足所有的计算需求。
    MATLAB
    软件具有很强的开放性和适用性。在保持内核不变的情况下,MATLAB可以针对不同的应用学科推

    出相应的工具箱(toolbox)。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如

    数据采集、概率统计、信号处理、图像处理和物理仿真等,都在工具箱(Toolbox)家族中有自己的一席

    之地。在实验中我们主要用到MATLAB提供图象处理工具箱(Image Processing Toolbox)。
    1
    MATLAB与数字图像处理
        MATLAB
    全称是Matrix Laboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,

    从这一点上也可以看出,它在矩阵运算上有自己独特的特点。实际上MATLAB中的绝大多数的运算都是通

    过矩阵这一形式进行的。这一特点也就决定了MATLAB在处理数字图像上的独特优势。理论上讲,图像是

    一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行

    数字化,这就是图像的采样和量化的过程。二维图像进行均匀采样,就可以得到一幅离散化成M×N样本

    的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。而

    MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。
    MATLAB
    支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMPGIF

    HDFJPEGPCXPNGTIFFXWDCURICO等图像文件格式的读,写和显示。MATLAB对图像的处理

    功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支

    持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与

    图像增强、二值图像操作以及形态学处理等图像处理操作。
    2
    MATLAB语言的基本操作
        MATLAB
    语言是一种运算纸型的运算语言,其特点就是与平时在运算纸上书写运算的形式相同,这使

    得它成为一种比较容易掌握的语言;其变量均以矩阵向量形式表示(单独一个数据可以认为是一维向量

    );其程序语法类似于C语言,只要有一点C语言基础的人可以很快掌握。针对数字图象处理的需要,可

    以重点掌握以下几个内容:矩阵、向量的输入和操作(包括如何输入一个矩阵,如何产生一个全零全一

    的矩阵,如何对一个矩阵的行列元素进行读取、写入);矩阵与向量的基本运算(包括加、减、点乘等


    以下主要介绍一下如何读取矩阵的指定行或指定列,举例说明:
    x=4:6
     %产生一个一维数组,范围从46,步长为1
    x =
       4   5   6
    插入:通过对x进行插入运算创建矩阵A
    >> A=[x-3;x;x+3]
      %当然也可以用别的方法产生A矩阵此处只作为示例
    A =
       1   2   3
       4   5   6
       7   8   9
    提取:提取A的前两行和后两列形成矩阵C
    >> C=A(1:2,2:3)
    C =
       2   3
       5   6
    置零:将矩阵A 的第二行第二列的元素置零
    >> A(2,2)=0
    A =
       1   2   3
       4   0   6
       7   8   9
    将矩阵A的第一列全置1
    A
    (:,1)=1
    A =
       1   2   3
       1   0   6
       1   8   9
    强调一下矩阵的乘法与矩阵的点乘的不同,举例说明:
    A=eye(2)
      %产生二维单位矩阵
    A =
       1   0
       0   1
    >> B=[1,2;3,4]
      %直接法输入矩阵
    B =
       1   2
       3   4
    >> A+B
     %AB的和(符合矩阵求和原则)
    ans =
       2   2
       3   5
    >> A.*B %
    AB的点积(即两矩阵中对应元素分别相乘
    ans =
       1   0
       0   4
    >> A*B %
    AB的乘积(符合矩阵乘积原则A的列数与B的行数相等)
    ans =
       1   2
         3
       4
    注意:请大家在E盘建一个目录(imp),在每次启动时都要将这个目录加入到MATLAB的搜索路径中,添

    加的方法为File----Set Path----Tool---Add Path
    3
    MATLAB中图象数据的读取
    A
    imread
        imread
    函数用于读入各种图象文件,其一般的用法为
               [X
    MAP]=imread(‘filename’,‘fmt’)
    其中,XMAP分别为读出的图象数据和颜色表数据,fmt为图象的格式,filename为读取的图象文件(可

    以加上文件的路径)。
    例:[XMAP]=imread’flowers.tif’,’tif’;
    B
    imwrite
    imwrite
    函数用于输出图象,其语法格式为:
    imwrite(X,map,filename,fmt)
    按照fmt指定的格式将图象数据矩阵X和调色板map写入文件filename
    C
    imfinfo
    imfinfo
    函数用于读取图象文件的有关信息,其语法格式为
    imfinfo(filename,fmt)
    imfinfo
    函数返回一个结构info,它反映了该图象的各方面信息,其主要数据包括:文件名(路径)、文

    件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数

    、图象的类型等。
    例:
    imfinfo('rice.tif')
    ans =
               Filename: 'C:/MATLAB6p5/toolbox/images/imdemos/rice.tif'
             FileModDate: '26-Oct-1996 06:11:58'
              FileSize: 65966
                Format: 'tif'
            FormatVersion: []
                Width: 256
                Height: 256
               BitDepth: 8
              ColorType: 'grayscale'
           FormatSignature: [73 73 42 0]
              ByteOrder: 'little-endian'
            NewSubfileType: 0
            BitsPerSample: 8
             Compression: 'Uncompressed'
      PhotometricInterpretation: 'BlackIsZero'
             StripOffsets: [8x1 double]
           SamplesPerPixel: 1
             RowsPerStrip: 32
           StripByteCounts: [8x1 double]
             XResolution: 72
             YResolution: 72
            ResolutionUnit: 'Inch'
               Colormap: []
         PlanarConfiguration: 'Chunky'
              TileWidth: []
              TileLength: []
             TileOffsets: []
            TileByteCounts: []
             Orientation: 1
              FillOrder: 1
          GrayResponseUnit: 0.0100
            MaxSamplev alue: 255
            MinSamplev alue: 0
             Thresholding: 1
    ImageDescription: [1x166 char]
    4
    、 MATLAB中图象文件的显示
    imshow
    imshow
    函数是最常用的显示各种图象的函数,其语法如下:
    imshow(X,map)
    其中X是图象数据矩阵,map是其对应的颜色矩阵,若进行图象处理后不知道图象数据的值域可以用[]

    map
    需要显示多幅图象时,可以使用figure语句,它的功能就是重新打开一个图象显示窗口。
    例:
    I=imread(‘rice.tif’);
    Imshow(I);
    J=imread(‘flowers.tif’);
    figure,imshow(J);
    5
    、 MATLAB中灰度直方图的显示
    MATLAB
    图象处理工具箱提供了imhist函数来计算和显示图象的直方图,imhist函数的语法格式为:
    imhist(I,n)
    imhist(X,map)
    其中imhist(I,n)计算和显示灰度图象I的直方图,n为指定的灰度级数目,默认值为256imhist(X,map)

    计算和显示索引色图象X的直方图,map为调色板。
    例:
    I = imread('rice.tif');
    imshow(I)
    figure, imhist(I)
    6
    、 对比度增强
      
    如果原图象f(x,y)的灰度范围是[mM],我们希望调整后的图象g(x,y)的灰度范围是[nN],那么下

    述变换,,就可以实现这一要求。
    MATLAB
    图象处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度增强。Imadjust函数的

    语法格式为:
    J = imadjust(I,[low_in high_in],[low_out high_out])
    J = imadjust(I,[low_in high_in],[low_out high_out])
    返回图象I经过直方图调整后的图象J

    [low_in high_in]为原图象中要变换的灰度范围,[low_out high_out]指定了变换后的灰度范围。
    例:
    I = imread('pout.tif');
    J = imadjust(I,[0.3 0.7],[]);
    imshow(I), figure, imshow(J)
    三、实验要求
    copy
    两个图形文件girl1.bmpgirl2.bmpMATLAB目录下work文件夹中。
    1
    MATLAB目录下work文件夹中的girl.bmp图象文件读出.用到imreadimfinfo等文件,观察一下图

    象数据,了解一下数字图象在MATLAB中的处理就是处理一个矩阵。将这个图象显示出来(用imshow),

    尝试修改map颜色矩阵的值,再将图象显示出来,观察图象颜色的变化。
    2
    MATLAB目录下work文件夹中的girl2.bmp图象文件读出,显示它的图象及灰度直方图,可以发现其

    灰度值集中在一段区域,用imadjust函数将它的灰度值调整到[01]之间,并观察调整后的图象与原图

    象的差别,调整后的灰度直方图与原灰度直方图的区别。

    实验二 图像运算

        本实验是综合性实验,涵盖Matlab程序设计、图像点运算、代数运算、几何运算等多章基本知识及

    其应用。需四个学时。
    一、实验目的与要求
    
    理解图像点运算、代数运算、几何运算的基本定义和常见方法;
    
    掌握在MTLAB中对图像进行点运算、代数运算、几何运算的方法;
    
    掌握在MATLAB中进行插值的方法
    
    运用MATLAB语言进行图像的插值缩放和插值旋转
    
    进一步熟悉了解MATLAB语言的应用。
    二、实验原理与功能
    点运算是通过对图像中每个像素值进行计算,改善图像显示效果的操作,也称对比度增强,对比度拉伸,

    度变换.可以表示为B(x,y)=f(A(x,y)).进行逐点运算,输入映射为输出,不改变图像像素的空间关系.
      代数运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。对于相加

    和相乘的情形,可能不止有两幅图像参加运算。在一般情况下,输入情况之一可能为常数。
      四种图像处理代数运算的数学表达式如下:
    C(x,y)=A(x,y)+B(x,y)
    C(x,y)=A(x,y)-B(x,y)
    C(x,y)=A(x,y)*B(x,y)
    C(x,y)=A(x,y)/B(x,y)
      其中A(x,y)B(x,y)为输入图像,而C(x,y)为输出图像。还可以通过适当的组合形成涉及几幅图像的

    复合代数运算方程。
      
    MATLAB中,我们可以用函数简单的得到数字图像的图像数据矩阵(即A(x,y)B(x,y)),有了这些

    矩阵后我们只要适当的设计代数运算的形式并写出方程,就可以得到一个输出图像的矩阵(即C(x,y)

    图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效的降低加性随机噪声

    的影响。在求平均值的过程中,图像的静止部分不会改变,而对每一幅图像,各不相同的噪声图案则过

    累积很慢。对M幅图像进行平均,使图像中每一点的平方信噪比提高了M倍幅度信噪比是功率信噪比的平

    方根,因此达到了提高信噪比降低噪声的作用。
      
    几何运算可改变图像中各物体之间的空间关系。这种运算可以被看成是将(各)物体在图像内移动。

    一个几何运算需要两个独立的算法。首先,需要一个算法来定义空间变换本身,用它来描述每个像素如

    何从其初始位置移动到终止位置,即每个像素的运动。同时,还需要一个用于灰度插值的算法

    ,这是因为,在一般情况下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过

    来也如此。因此插值就是对变换之后的整数坐标位置的像素值进行估计。MATLAB提供了一些函数实现这

    些功能。
      
    插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真

    实的曲线,用这个重建的函数便可以求出任意位置的函数值。
      
    最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近

    的采样点的值。最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。当

    图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。
      
    双线性插值法的输出像素值是它在输入图像中2×2领域采样点的平均值,它根据某像素周围4个像素

    的灰度值在水平和垂直两个方向上对其插值。
      
    双三次插值的插值核为三次函数,其插值邻域的大小为4×4。它的插值效果比较好,但相应的计算量

    也比较大。
       MATLAB
    图像处理工具箱中的函数imresize可以用上述的3种方法对图像进行插值缩放,如果不指定插

    值方法,则默认为最邻近插值法。
    Imresize
    函数的语法格式为:
    B = imresize(A,m,method)
      
    参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值

    ),'bicubic'(双三次插值),默认为'nearest'
    B = imresize(A,m,method)
    返回原图Am倍放大的图像(m小于1时效果是缩小)。
    实验设计例子与调试
    1
    完成人为的往一幅图像中加入噪声,并通过多次相加求平均的方法消除所加入的噪声。
    MATLAB中提供了给图像加入噪声的函数imnoise
    imnoise
    的语法格式为
    J = imnoise(I,type)
    J = imnoise(I,type,parameters)
    其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J
    参数typeparameters用于确定噪声的类型和相应的参数。
    下面的命令是对图像eight.tif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:
    例:
    I=imread('eight.tif');
    J1=imnoise(I,'gaussian',0,0.02);
    J2=imnoise(I,'salt & pepper',0.02);
    J3=imnoise(I,'speckle',0.02);
    subplot(2,2,1),imshow(I),title('
    原图像');
    subplot(2,2,2),imshow(J1),title('
    加高斯噪声');
    subplot(2,2,3),imshow(J2),title('
    加椒盐噪声');
    subplot(2,2,4),imshow(J3),title('
    加乘性噪声');
      
    在上面的例子中使用了一个函数subplot。其作用就是将多幅图像显示再同一幅图像显示对话框中。

    其语法格式为:
    subplot(m,n,p)
      
    其作用就是将一个图像显示对话框分成mn列,并显示第p幅图像。
      
    MATLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效

    率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中

    间结果。
      
    代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成

    产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLABFOR END循环的用法如下:
    for end
    循环
    这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:
    for variable = expression
      statements
    end
    举例如下:
    例:
    %
    一个简单的for循环的例子。
    for i=1:10;
      y(i)=i;
    end;
    y
           %显示y的结果
    y =
       1   2   3   4   5   6   7   8   9  10
      
    为了得到最大的速度,在for循环被执行之前,应预先分配数组。例如前面所考虑的第一种情况,在

    for循环内每执行一次命令,向量y的维数增加1。这样就使得MATLAB每通过一次循环对y分配更多的内存

    ,这当然要花费一定的时间。为了可以不执行这个步骤,for循环的例子应重写为:
    y=zeros(1,10);
    for i=1:10;
      y(i)=i;
    end;
    y
      
    在实际的对图像处理过程中,由于我们读出的图像是unit8型,而在MATLAB的矩阵运算中要求所有的

    运算变量为double型(双精度型)。因此读出的图像数据不能直接进行相加求平均,因此必须使用一个

    函数将图像数据转换成双精度型数据。MATLAB中提供了这样的函数:
       im2double
    函数,其语法格式为:
       I2 = im2double(I1)
      
    其中I1是输入的图像数据,它可能是unit8unit16型数据,通过函数的变化输出I2为一个double

    数据,这样两图像数据就可以方便的进行相加等代数运算.
      
    作为一个示例,现将刚刚显示的加有噪声的图像进行相加求平均以消除图像的噪声。在图像中我们给

    图像加的是均值为0,方差为0.02的高斯噪声,将图像相加了一百遍,再求其平均值。程序如下:
    %
    例图像加噪声再通过多次相加求平均的方法祛除噪声
    [I,M]=imread('eight.tif');
    J=imnoise(I,'gaussian',0,0.02);
    subplot(1,2,1),imshow(I,M),title('
    原图像');
    subplot(1,2,2),imshow(J,M),title('
    加噪声后图像');
    K=zeros(242,308);
    for i=1:100
      J=imnoise(I,'gaussian',0,0.02);
      J1=im2double(J);
      K=K+J1;
    end
    K=K/100;
      %求图像的平均
    figure;imshow(K),title('
    相加求平均后的图像');
    例子2
    Imresize
    函数的语法格式为:
    B = imresize(A,m,method)
    这里参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值

    ),'bicubic'(双三次插值),默认为'nearest'
    B = imresize(A,m,method)
    返回原图Am倍放大的图像(m小于1时效果是缩小)。
    例:
    I=imread('ic.tif');
    J = imresize(I,1.25);
    imshow(I),title('
    原图像')
    figure,imshow(J),title('
    放大后的图像')
      
    在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值

    法。
       Imrotate
    的语法格式为:
           B = imrotate(A,angle,method
      
    函数imrotate对图像进行旋转,参数method用于指定插值的方法,,可选用的值为'nearest'(最邻

    近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后

    的图像会比原图大,超出原图部分值为0
    例:
    I=imread('rice.tif');
    J=imrotate(I,30,'bilinear');
    imshow(I);title('
    原图像')
    figure,imshow(J),title('
    旋转后的图像')
    四、实验任务
      
    实验要求设计一个程序完成下列要求:
    1
    读出girl.bmp这幅图像,完成基本点运算,并显示各次运算的结果图像;
    2
    给这幅图像加入椒盐噪声后并与前一张图显示在同一图像对话框中;
    3
    运用for循环,将100幅加有噪声的图像进行相加并求其平均值,显示求平均后图像。
    4
    将图像分别放大1.5倍和缩小0.8倍,插值方法使用双线性插值法。将图像顺时针旋转45度,显示旋

    转后的图像。
    5
    设计实验步骤,完成实验报告。

    实验三 傅立叶变换及图象的频域处理

    一、实验目的
    1
    、了解离散傅立叶变换的基本原理;
    2
    、掌握应用MATLAB语言进行FFT及逆变换的方法;
    3
    、了解图象在频域中处理方法,应用MATLAB语言作简单的低通滤波器。
    二、实验原理
    1
    、傅立叶变换的基本知识。
      
    在图象处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图象分析、图象增

    强及图象压缩等方面。
      
    假设fx,y)是一个离散空间中的二维函数,则该函数的二维傅立叶变换的定义如下:
     u=0,1…M-1 v=0,1…N-1 (1)
     
    离散傅立叶反变换的定义如下:
             x=0,1…M-1
     y=0,1…N-13
      F
    p,q)称为fm,n)的离散傅立叶变换系数。这个式子表明,函数fm,n)可以用无数个不同频率

    的复指数信号和表示,而在频率(w1w2)处的复指数信号的幅度和相位是Fw1w2)。
    例如,函数fm,n)在一个矩形区域内函数值为1,而在其他区域为0. 
    假设fm,n)为一个连续函数,则fm,n)的傅立叶变换的幅度值(即)显示为网格图。
    将傅立叶变换的结果进行可视化的另一种方法是用图象的方式显示变换结果的对数幅值。
    2
    MATLAB提供的快速傅立叶变换函数
    1fft2
    fft2
    函数用于计算二维快速傅立叶变换,其语法格式为:
    B = fft2(I)
    B = fft2(I)
    返回图象I的二维fft变换矩阵,输入图象I和输出图象B大小相同。
    例如,计算图象的二维傅立叶变换,并显示其幅值的结果,其命令格式如下
    load imdemos saturn2
    imshow(saturn2)
    B = fftshift(fft2(saturn2));
    imshow(log(abs(B)),[],'notruesize')
    2fftshift
    MATLAB
    提供的fftshift函数用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心,其语法格式为


      B = fftshift(I)
    对于矩阵IB = fftshift(I)I的一、三象限和二、四象限进行互换。
    2ifft2
    ifft2
    函数用于计算图象的二维傅立叶反变换,其语法格式为:
    B = ifft2(I)
    B = ifft2(A)
    返回图象I的二维傅立叶反变换矩阵,输入图象I和输出图象B大小相同。其语法格式含义与

    fft2函数的语法格式相同,可以参考fft2函数的说明。
    3
    、简单低通滤波器的设计
      
    一个图象经过傅立叶变换后,就从空域变到了频域,因此我们可以用信号处理中对于频域信号的处理

    方法对一幅图象进行处理。比如对图象进行低通滤波等。
      
    虽然在计算机中必定能够模拟一个锐截止频率的理想低通滤波器,但它们不能用电子元件来实现。实

    际中比较常用的低通滤波器有:巴特沃思(Butterworth)滤波器、指数滤波器(ELPF)、梯形低通滤波

    器等。
      
    在实验中我们设计一个理想的低通滤波器。
      
    设计理想的低通滤波器由其定义可知只要设计一个与频域图象大小完全相同的矩阵。在某一个域值内

    该矩阵的值为1,其余为0即可。
    例:若图象的大小为128*128,则可以这样设计一个低通滤波器:
    H=zeros(128);
    H(32:96,32:96)=1; %
    此处的范围是人为取定的,可以根据需要更改。
      
    若图象矩阵I的傅立叶变换是B(已经用fftshift将频谱中心移至矩阵的中心),则对这幅图象做低通滤

    波,再做傅立叶逆变换命令为
    LOWPASS=B.*H;
      %此处设变换后的矩阵为LOWPASS,另注意这儿是矩阵的点乘。
    C=ifft2(LOWPASS);
    Imshow(abs(C))
    三、实验要求
    1
    读取图象girl.bmp,显示这幅图象,对图象作傅立叶变换,显示频域振幅图象。作傅立叶逆变换,

    显示图象,看是否与原图象相同。
    2
    设计一个低通滤波器,截止频率自选,对图象作低通滤波,再作反变换,观察不同的截止频率下反

    变换后的图象与原图象的区别。
    2
    选做:显示一幅频域图象的相位分布图,分别对振幅分布和相位分布作傅立叶逆变换,观察两幅图

    象,体会频域图象中振幅与位相的作用。

    实验四 图像的空域滤波

    一、实验目的
    1
    、了解图象滤波的基本定义及目的;
    2
    、了解空域滤波的基本原理及方法;
    3
    、掌握用MATLAB语言进行图象的空域滤波的方法。
    二、实验原理
    1
    、均值滤波
      
    均值滤波是在空间域对图象进行平滑处理的一种方法,易于实现,效果也挺好。
      设噪声η(m,n)是加性噪声,其均值为0,方差(噪声功率)为σ2,而且噪声与图象f(m,n)不相关。
      除了对噪声有上述假定之外,该算法还基于这样一种假设:图象是由许多灰度值相近的小块组成。这

    个假设大体上反映了许多图象的结构特征。(2)式表达的算法是由某像素领域内各点灰度值的平均值来

    代替该像素原来的灰度值。
      可用模块反映领域平均算法的特征。对模版沿水平和垂直两个方向逐点移动,相当于用这样一个模块

    与图像进行卷积运算,从而平滑了整幅图象。模版内各系数和为1,用这样的模版处理常数图象时,图像

    没有变化;对一般图象处理后,整幅图像灰度的平均值可不变。
    2
    、中值滤波
      中值滤波是一种非线性处理技术,能抑制图象中的噪声。它是基于图象的这样一种特性:噪声往往以

    孤立的点的形式出现,这些点对应的象素很少,而图象则是由像素数较多、面积较大的小块构成。
      在一维的情况下,中值滤波器是一个含有奇数个像素的窗口。在处理之后,位于窗口正中的像素的灰

    度值,用窗口内各像素灰度值的中值代替。例如若窗口长度为5,窗口中像素的灰度值为8090200

    110120,则中值为110,因为按小到大(或大到小)排序后,第三位的值是110。于是原理的窗口正中

    的灰度值200就由110取代。如果200是一个噪声的尖峰,则将被滤除。然而,如果它是一个信号,则滤波

    后就被消除,降低了分辨率。因此中值滤波在某些情况下抑制噪声,而在另一些情况下却会抑制信号。
      中值滤波很容易推广到二维的情况。二维窗口的形式可以是正方形、近似圆形的或十字形的。在图像

    增强的具体应用中,中值滤波只能是一种抑制噪声的特殊工具,在处理中应监视其效果,以决定最终是

    福才有这种方案。实施过程中的关键问题是探讨一些快速算法。
      MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:
      C = conv2(A,B)
    C = conv2(A,B)
    返回矩阵AB的二维卷积C。若Ama×na的矩阵,Bmb×nb的矩阵,则C的大小为

    (ma+mb+1)×(na+nb+1)
    例:
    A=magic(5)
    A =
      17  24  1   8  15
      23  5   7  14   16
      4   6  13  20   22
       10 12   19  21   3
      11 18   25   2   9
    >> B=[1 2 1 ;0 2 0;3 1 3]
    B =
       1   2   1
       0   2   0
       3   1   3
    >> C=conv2(A,B)
    C =
      17  58  66  34  32  38  15
      23  85  88  35  67  76  16
      55  149  117  163  159  135  67
      79  78  160  161  187  129  51
      23  82  153  199  205  108  75
      30  68  135  168  91  84   9
      33  65  126  85  104  15  27
    MATLAB
    图像处理工具箱提供了基于卷积的图象滤波函数filter2filter2的语法格式为:
    Y = filter2(h,X)
    其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:
    其实filter2conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计

    算。
    Fspecial
    函数用于创建预定义的滤波算子,其语法格式为:
    h = fspecial(type)
    h = fspecial(type,parameters)
    参数type制定算子类型,parameters指定相应的参数,具体格式为:
    type='average'
    ,为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]
    type= 'gaussian'
    ,为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3]sigma表示滤波

    器的标准差,单位为像素,默认值为0.5
    type= 'laplacian'
    ,为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1]

    ,默认值为0.2
    type= 'log'
    ,为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3]sigma为滤波器的

    标准差,单位为像素,默认值为0.5
    type= 'prewitt'
    ,为prewitt算子,用于边缘增强,无参数。
    type= 'sobel'
    ,为著名的sobel算子,用于边缘提取,无参数。
    type= 'unsharp'
    ,为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为

    0.2
    下面举一个均值滤波的例子:
    MATLAB图像处理工具箱中,提供了medfilt2函数用于实现中值滤波。
    Medfilt2
    函数的语法格式为:
    B = medfilt2(A)
           3×3的滤波窗口对图像A进行中值滤波。
    B = medfilt2(A,[m n])
       用指定大小为m×n的窗口对图像A进行中值滤波。

    实验五 二值形态学操作

    一、实验目的
    
    了解二值形态学的基本运算
    
    掌握基本形态学运算的Matlab实现
    
    了解形态操作的应用
    二、原理
      
    收缩和膨胀是数学形态学最基本的变换,数学形态学的应用几乎覆盖了图像处理的所有领域,给出利

    用数学形态学对二值图像处理的一些运算。
      
    膨胀就是把连接成分的边界扩大一层的处理。而收缩则是把连接成分的边界点去掉从而缩小一层的处

    理。若输出图像为g(i,j),则它们的定义式为二值图像目标XE的子集。用B代表结构元素,Bs代表结构

    元素B关于原点(0 , 0)的对称集合:
    BsB旋转180°获得的。给出了三种简单的结构元素。膨胀和腐蚀变换的定义式为:
    膨胀 
    腐蚀 
    Matlab
    中用imdilate函数实现膨胀。用法为:
    Imdilate(X,SE).
    其中X是待处理的图像,SE是结构元素对象。
    例如:
    bw = imread('text.tif');
    se = strel('line',11,90);
    bw2 = imdilate(bw,se);
    imshow(bw), title('Original')
    figure, imshow(bw2), title('Dilated')
    Matlab
    imerode函数实现图像腐蚀。用法为:
    Imerode(X,SE).
    其中X是待处理的图像,SE是结构元素对象。
    例如:
    I = imread('cameraman.tif');
    se = strel('ball',5,5);
    I2 = imerode(I,se);
    imshow(I), title('Original')
    figure, imshow(I2), title('Eroded')
    三、练习
    1
    读取一幅图像,进行骨架化操作并得到其边界
    2
    读取一幅图像,转化为二进制图像,并计算其面积
    3
    读取一幅图像,比较不同距离变换的图像效果

    实验六、图像的边缘检测

    一、实验目的
    1
    、了解图像边缘提取的基本概念;
    2
    、了解进行边缘提取的基本方法;
    3
    、掌握用MATLAB语言进行图像边缘提取的方法。
    二、实验原理
      
    图像理解是图像处理的一个重要分支,研究为完成某一任务需要从图像中提取哪些有用的信息,以及

    如何利用这些信息解释图像。边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背

    景的分界线,提取出边缘才能将目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一

    个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不

    同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者

    纹理特征。边缘检测实际上就是检测图像特征发生变化的位置。
      
    由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个

    基本内容:首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘

    连接成完整的线。边缘检测的方法大多数是基于方向导数掩模求卷积的方法。
      
    导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因

    此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。
      
    一阶导数与是最简单的导数算子,它们分别求出了灰度在xy方向上的变化率,而方向α上的灰度变

    化率可以用相应公式进行计算;对于数字图像,应该采用差分运算代替求导,差分公式参考相关教材。 

              
      
    函数f在某点的方向导数取得最大值的方向是,方向导数的最大值是称为梯度模。利用梯度模算子来

    检测边缘是一种很好的方法,它不仅具有位移不变性,还具有各向同性。为了运算简便,实际中采用梯

    度模的近似形式。另外,还有一些常用的算子,如Roberts算子和Sobel算子。
      
    由于Sobel算子是滤波算子的形式,用于提取边缘。我们可以利用快速卷积函数,简单有效,因此应

    用很广泛。
      
    拉普拉斯高斯(loG)算法是一种二阶边缘检测方法。它通过寻找图像灰度值中二阶微分中的过零点

    Zero Crossing)来检测边缘点。其原理为,灰度级变形成的边缘经过微风算子形成一个单峰函数,峰

    值位置对应边缘点;对单峰函数进行微分,则峰值处的微分值为0,峰值两侧符号相反,而原先的极值点

    对英语二阶微分中的过零点,通过检测过零点即可将图像的边缘提取出来。
       MATLAB
    的图像处理工具箱中提供的edge函数可以实现检测边缘的功能,其语法格式如下:
    BW = edge(I,'sobel')
    BW = edge(I,'sobel',direction)
    BW = edge(I,'roberts')
    BW = edge(I,'log')
    这里BW = edge(I,'sobel')采用Sobel算子进行边缘检测。BW = edge(I,'sobel',direction)可以指定算

    子方向,即:
    direction=’horizontal’
    ,为水平方向;
    direction=’vertical’
    ,为垂直方向;
    direction=’both’
    ,为水平和垂直两个方向。
    BW = edge(I,'roberts')
    BW = edge(I,'log')分别为用Roberts算子和拉普拉斯高斯算子进行边缘检测


    例:用三种算子进行边缘检测。
    I=imread('eight.tif');
    imshow(I)
    BW1=edge(I,'roberts');
    figure ,imshow(BW1),title('
    Roberts算子')
    BW2=edge(I,'sobel');
    figure,imshow(BW2),title('
    Sobel算子 ')
    BW3=edge(I,'log');
    figure,imshow(BW3),title('
    用拉普拉斯高斯算子')
    三、实验要求
    1
    、 读出MATLAB图像处理工具箱中提供的rice.tif这幅图像,并显示。
    2
    分别用Roberts,Sobel和拉普拉斯高斯算子对图像进行边缘检测。比较三种算子处理的不同之处。

    实验 七图像编码

    实验目的
    1
    了解图像编码的基本方法
    2
    了解Matlab实现图像编码
    实验原理
    1
    行程编码
      
    行程编码又称行程长度编码(RLERun Length Encoding),是一种熵编码,其编码原理相当简单,

    即将具有相同值的连续串用其串长和一个代表值来代替,该连续串就称之为行程或行程,串长称为行程

    长度。例如,有一字符串“aabbbcddddd”,则经行程长度编码后,可以只用“2a3b1c5d”来表示。
    2
    霍夫曼编码
       Huffman
    方法根据源数据符号发生的概率进行编码。在源数据中出现概率越大的符号,相应的码越短

    ;出现概率越小的符号,其码长越长,从而达到用尽可能少的码符号表示源数据。它在变长编码方法中

    是最佳的。
      
    通过如下实例来说明这种编码方法。
      
    设有编码输入 。其频率分布分别为 P(x2)=0.3 。现求其最佳霍夫曼编码
      
    具体编码方法是:①把输入元素按其出现概率的大小顺序排列起来,然后把最末两个具有最小概率的

    元素之概率加起来;②把该概率之和同其余概率由大到小排队,然后再把两个最小概率加起来,再重新

    排队;③重复②,直到最后只剩下两个概率为止。
    3.
    预测编码
      
    预测编码是基于图像数据的空间或时间冗余特性,用相邻的已知像素(或像素块)来预测当前像素(

    或像素块)的取值,然后再对预测误差进行量化和编码。
      
    编码方法的Matlab实现参看参考书的相关章节。

     


    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1833768

     

    展开全文
  • Matlab 图像处理

    2016-12-11 16:15:15
    Matlab中有很多图像处理函数,在这篇博文中加以记录,经常更新

    Matlab中有很多图像处理方法,虽然很简单,但是还是需要记录一下,加深印象。

    imresize函数
    功能:改变图像大小
    用法:

    %将图像缩放m倍
    image = imresize(img,m);
    %将图像按照某个方法缩放m倍
    %method可选值:'nearest'(默认值)最近邻插值; 'bilinear'双线性插值; 'bicubic'双三次插值
    image = imresize(img,m,method);
    %将图像按照某个方法缩放到制定大小
    image = imresize(img,[rows cols],method);

    有以上方法基本可以实现通常需要的图像大小改变了,当然,可以使用help imresize获得更详细的指导

    imcrop函数
    功能:显示制定图像,从图像中截取出需要的部分
    用法:

    image = imread(imgpath);
    [img,rect] = imcrop(image);
    %img返回截取出的图片,rect为图片区域在原图位置,[x,y,width,height]

    这个函数在制作图像训练样本的过程中经常用到

    展开全文
  • 基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比 1.背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤波是基于排序...

    基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比

    1.  背景知识

    中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.

    中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。

    方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为3*3,5*5区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。

             
     

    2

    4

    8

     
     

    1

    3

    9

     
     

    5

    7

    6

     
             

    g(x,y)=med{f(x-k,y-l),(k,l∈W)}

    g =med[2,4,8;1,3,9;5,7,6] = 5

    中值滤波后的结果:

             
             
       

    5

       
             
             

    均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。

    均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。

    均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

             
     

    2

    4

    8

     
     

    1

    3

    9

     
     

    5

    7

    6

     
             

    gxy=1/m ∑fxy

    g = (1/8)*(2+4+8+1+9+5+7+6)= 5

    均值滤波后的结果

             
             
       

    5

       
             
             

     

    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

    2.  MATLAB实现

    源码:

    %%-------------------------------------------------------------------------------------------

    %% 2018/01/03

    %% lee

    %% 137194782@qq.com

    %% 微信公众号:FPGA开源工作室

    %%--------------------------------------------------------------------------------------------

    clear all;

    clc;

    M = imread('timg.jpg');         %读取MATLAB中的名为timg的图像   

    figure,imshow(M);                %显示原始图像

    title('original');

    gray = rgb2gray(M);

    figure,imshow(gray);                         %显示灰度图像

    title('gray');

    P1 = imnoise(gray,'gaussian',0.02);     %加入高斯躁声 

    figure,imshow(P1);                        %加入高斯躁声后显示图像

    title('gaussiannoise');

    P2 = imnoise(gray,'salt& pepper',0.02); %加入椒盐躁声

    figure,imshow(P2);                        %加入椒盐躁声后显示图像  

    title('salt& pepper noise');

    g = medfilt2(P1);                       %对高斯躁声中值滤波

    figure,imshow(g);

    title('medfiltergaussian');

    h = medfilt2(P2);                       %对椒盐躁声中值滤波

    figure,imshow(h);

    title('medfiltersalt & pepper noise');

    a=[1 1 1                               %对高斯躁声算术均值滤波

       1 11

       1 11];

    l=1/9*a;                          

    k = conv2(double(P1),double(l));                        

    figure,imshow(k,[]);

    title('arithmeticfiltergaussian');                                          

    d = conv2(double(P2),double(l));           %对椒盐躁声算术均值滤波              

    figure,imshow(d,[]);

    title('arithmeticfiltersalt & pepper noise');

    sigma=8;%标准差大小  

    window=double(uint8(3*sigma)*2+1);%窗口大小一半为3*sigma  

    H=fspecial('gaussian',window, sigma);%fspecial('gaussian',hsize, sigma)产生滤波模板   

    img_gauss=imfilter(P1,H,'replicate'); %为了不出现黑边,使用参数'replicate'(输入图像的外部边界通过复制内部边界的值来扩展)  

    figure, imshow(img_gauss);

    title('gaussianfilting gauss noise');

    img_salt=imfilter(P2,H,'replicate'); 

    figure, imshow(img_salt);

    title('gaussianfilting salt pepper noise');

     

    结果展示:

     

     

     

    原始图像

     

     

     

    灰度图像

     

     

     

    加入高斯噪声的灰度图像

     

     

     

    加入椒盐噪声的灰度图像

     

     

     

    经过中值滤波后的高斯噪声灰度图像

     

     

    经过中值滤波后的椒盐噪声灰度图像

     

     

    经过均值滤波的高斯噪声灰度图像

     

     

    经过均值滤波的椒盐噪声灰度图像

     

     

    经过高斯滤波的高斯噪声灰度图像

    经过高斯滤波的椒盐噪声的灰度图像

    结果分析:图像经过中值滤波后,高斯噪声没有被完全去除,椒盐噪声几乎被完全去除效果较好。经过均值滤波后不管是高斯噪声还是椒盐噪声大部分都没有被去除,只是稍微模糊化。经过高斯滤波后,高斯噪声和椒盐噪声几乎被很大程度的模糊化,原图好像被加上了一层蒙版。

     

    欢迎大家关注我的微信公众号FPGA开源工作室

    FPGA自习学院将不断更新和总结FPGA相关学习资料,书籍,实例工程和视频。

    欢迎大家加入FPGA自习学院,一起学习一起成长。

     

     

     

     

     

    展开全文
  • matlab 图像处理

    2015-04-27 22:32:04
    img = imread('文件名'); 读图片 [height, width] = size(img); 图像尺寸 img_class = class(img); 图像类型转换(像素的数据类型) class可以是double、uint8等 imshow(img); 显示图像
  • 吃小羊:MATLAB图像处理:01:基本图像导入,处理和导出​zhuanlan.zhihu.com吃小羊:MATLAB图像处理:02:检测和测量图像中的圆形物体​zhuanlan.zhihu.com吃小羊:MATLAB图像处理:03:纠正照明不均匀并分析前景...
  • MATLAB 图像处理命令1、 MATLAB图像处理的一些简单函数A、 imread imread函数用于读入各种图像文件,其一般的用法为 [X,MAP]=imread(‘filename’,‘fmt’)其中,X,MAP分别为读出的图像数据和颜色表数据,fmt...
  • Matlab图像处理教程2017官方版
  • 精通MATLAB图像处理

    千次阅读 多人点赞 2019-04-01 17:25:02
    第三章:MATLAB图像处理基础 第一章:MATLAB基础知识 1.1 MATLAB概述与桌面操作 1、matlab将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中...
  • Matlab图像处理
  • matlab 图像处理 高通滤波程序

    热门讨论 2012-05-22 16:31:55
    matlab 图像处理 高通滤波程序,数字图像处理课程要求
  • matlab图像处理——平滑滤波

    万次阅读 多人点赞 2018-11-01 20:52:00
    平滑滤波——matlab图像处理 平滑滤波的目的是消除或尽量减少噪声,改善图像的质量。假设加性噪声是随机独立分布,这样利用图像像素领域的平均或加权平均即可有效地抑制噪声干扰。从信号分析的观点来看,图像平滑...
  • MATLAB图像处理工具箱

    2017-08-13 09:11:31
    MATLAB图像处理工具箱 下列表格中除了个别函数外,其余函数都是图像处理工具箱提供的关于图像处理的函数,现摘录到此以备查找。 表1 图像显示 函数名 功能说明 函数名 功能说明 colorbar 颜色条显示 ...
  • Matlab图像处理函数汇总

    千次阅读 2015-12-26 10:30:38
    Matlab图像处理函数汇总: 图像的变换, 模拟噪声生成函数和预定义滤波器, 图像的增强, 图像边缘检测, 形态学图像处理, 改变MATLAB背景颜色, 小波变换.
  • Matlab图像处理大师淘宝店(QQ:3249726188) 专注、专一于Matlab图像处理 本店绝非中介,本店代码均由本人及硕士师弟代写完成,提供有偿Matlab算法代码编程服务,不从事不违反涉及学术原则的事。 另外,本店的...
  • matlab图像处理工具

    千次阅读 2016-08-31 11:59:48
    ///////////////////////matlab图像处理工具箱///////////// 图像格式 文件格式不同在于不同软件对二进制文件的编码解码方法方式不同,理论上一款软件就有自己的一套文件格式,统一文件格式适用于不同的传输要求和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,020
精华内容 6,808
关键字:

matlab图像处理

matlab 订阅