图像处理rgb实验_将rgb图像转为hsv图像并取h通道的图片进行处理 - CSDN
精华内容
参与话题
  • matlab图像处理实验

    千次阅读 2016-05-03 16:49:19
    实验一 Matlab语言、数字图象基本操作 一、实验目的 1、复习MATLAB语言的基本用法; 2、掌握MATLAB语言中图象数据与信息的读取方法; 3、掌握在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图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、XWD、CUR、ICO等图像文件格式的读,写和显示。MATLAB对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。
    2、MATLAB语言的基本操作
        MATLAB语言是一种运算纸型的运算语言,其特点就是与平时在运算纸上书写运算的形式相同,这使得它成为一种比较容易掌握的语言;其变量均以矩阵向量形式表示(单独一个数据可以认为是一维向量);其程序语法类似于C语言,只要有一点C语言基础的人可以很快掌握。针对数字图象处理的需要,可以重点掌握以下几个内容:矩阵、向量的输入和操作(包括如何输入一个矩阵,如何产生一个全零全一的矩阵,如何对一个矩阵的行列元素进行读取、写入);矩阵与向量的基本运算(包括加、减、点乘等)
    以下主要介绍一下如何读取矩阵的指定行或指定列,举例说明:
    x=4:6 %产生一个一维数组,范围从4到6,步长为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 %求A与B的和(符合矩阵求和原则)
    ans =
       2   2
       3   5
    >> A.*B %求A与B的点积(即两矩阵中对应元素分别相乘
    ans =
       1   0
       0   4
    >> A*B %求A与B的乘积(符合矩阵乘积原则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’)
    其中,X,MAP分别为读出的图象数据和颜色表数据,fmt为图象的格式,filename为读取的图象文件(可以加上文件的路径)。
    例:[X,MAP]=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为指定的灰度级数目,默认值为256。imhist(X,map)计算和显示索引色图象X的直方图,map为调色板。
    例:
    I = imread('rice.tif');
    imshow(I)
    figure, imhist(I)
    6、 对比度增强
       如果原图象f(x,y)的灰度范围是[m,M],我们希望调整后的图象g(x,y)的灰度范围是[n,N],那么下述变换,,就可以实现这一要求。
    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.bmp和girl2.bmp到MATLAB目录下work文件夹中。
    1、 将MATLAB目录下work文件夹中的girl.bmp图象文件读出.用到imread,imfinfo等文件,观察一下图象数据,了解一下数字图象在MATLAB中的处理就是处理一个矩阵。将这个图象显示出来(用imshow),尝试修改map颜色矩阵的值,再将图象显示出来,观察图象颜色的变化。
    2、 将MATLAB目录下work文件夹中的girl2.bmp图象文件读出,显示它的图象及灰度直方图,可以发现其灰度值集中在一段区域,用imadjust函数将它的灰度值调整到[0,1]之间,并观察调整后的图象与原图象的差别,调整后的灰度直方图与原灰度直方图的区别。


    实验二 图像运算


        本实验是综合性实验,涵盖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)返回原图A的m倍放大的图像(m小于1时效果是缩小)。
    三 实验设计例子与调试
    1. 完成人为的往一幅图像中加入噪声,并通过多次相加求平均的方法消除所加入的噪声。
    在MATLAB中提供了给图像加入噪声的函数imnoise
    imnoise的语法格式为
    J = imnoise(I,type)
    J = imnoise(I,type,parameters)
    其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。
    参数type和parameters用于确定噪声的类型和相应的参数。
    下面的命令是对图像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)
       其作用就是将一个图像显示对话框分成m行n列,并显示第p幅图像。
       在MATLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中间结果。
       代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLAB中FOR 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是输入的图像数据,它可能是unit8或unit16型数据,通过函数的变化输出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)返回原图A的m倍放大的图像(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、傅立叶变换的基本知识。
       在图象处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图象分析、图象增强及图象压缩等方面。
       假设f(x,y)是一个离散空间中的二维函数,则该函数的二维傅立叶变换的定义如下:
     u=0,1…M-1 v=0,1…N-1 (1)
      离散傅立叶反变换的定义如下:
             x=0,1…M-1 y=0,1…N-1(3)
      F(p,q)称为f(m,n)的离散傅立叶变换系数。这个式子表明,函数f(m,n)可以用无数个不同频率的复指数信号和表示,而在频率(w1,w2)处的复指数信号的幅度和相位是F(w1,w2)。
    例如,函数f(m,n)在一个矩形区域内函数值为1,而在其他区域为0.
    假设f(m,n)为一个连续函数,则f(m,n)的傅立叶变换的幅度值(即)显示为网格图。
    将傅立叶变换的结果进行可视化的另一种方法是用图象的方式显示变换结果的对数幅值。
    2、MATLAB提供的快速傅立叶变换函数
    (1)fft2
    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')
    (2)fftshift
    MATLAB提供的fftshift函数用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心,其语法格式为:
      B = fftshift(I)
    对于矩阵I,B = fftshift(I)将I的一、三象限和二、四象限进行互换。
    (2)ifft2
    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,窗口中像素的灰度值为80、90、200、110、120,则中值为110,因为按小到大(或大到小)排序后,第三位的值是110。于是原理的窗口正中的灰度值200就由110取代。如果200是一个噪声的尖峰,则将被滤除。然而,如果它是一个信号,则滤波后就被消除,降低了分辨率。因此中值滤波在某些情况下抑制噪声,而在另一些情况下却会抑制信号。
      中值滤波很容易推广到二维的情况。二维窗口的形式可以是正方形、近似圆形的或十字形的。在图像增强的具体应用中,中值滤波只能是一种抑制噪声的特殊工具,在处理中应监视其效果,以决定最终是福才有这种方案。实施过程中的关键问题是探讨一些快速算法。
      MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:
      C = conv2(A,B)
    C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×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图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:
    Y = filter2(h,X)
    其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:
    其实filter2和conv2是等价的。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),则它们的定义式为二值图像目标X是E的子集。用B代表结构元素,Bs代表结构元素B关于原点(0 , 0)的对称集合:
    即Bs是B旋转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语言进行图像边缘提取的方法。
    二、实验原理
       图像理解是图像处理的一个重要分支,研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。边缘检测实际上就是检测图像特征发生变化的位置。
       由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。边缘检测的方法大多数是基于方向导数掩模求卷积的方法。
       导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。
       一阶导数与是最简单的导数算子,它们分别求出了灰度在x和y方向上的变化率,而方向α上的灰度变化率可以用相应公式进行计算;对于数字图像,应该采用差分运算代替求导,差分公式参考相关教材。           
       函数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 行程编码
       行程编码又称行程长度编码(RLE,Run Length Encoding),是一种熵编码,其编码原理相当简单,即将具有相同值的连续串用其串长和一个代表值来代替,该连续串就称之为行程或行程,串长称为行程长度。例如,有一字符串“aabbbcddddd”,则经行程长度编码后,可以只用“2a3b1c5d”来表示。
    2 霍夫曼编码
       Huffman方法根据源数据符号发生的概率进行编码。在源数据中出现概率越大的符号,相应的码越短;出现概率越小的符号,其码长越长,从而达到用尽可能少的码符号表示源数据。它在变长编码方法中是最佳的。
       通过如下实例来说明这种编码方法。
       设有编码输入 。其频率分布分别为 ,P(x2)=0.3, , , , 。现求其最佳霍夫曼编码 。
       具体编码方法是:①把输入元素按其出现概率的大小顺序排列起来,然后把最末两个具有最小概率的元素之概率加起来;②把该概率之和同其余概率由大到小排队,然后再把两个最小概率加起来,再重新排队;③重复②,直到最后只剩下两个概率为止。
    3.预测编码
       预测编码是基于图像数据的空间或时间冗余特性,用相邻的已知像素(或像素块)来预测当前像素(或像素块)的取值,然后再对预测误差进行量化和编码。
       编码方法的Matlab实现参看参考书的相关章节。
    展开全文
  • 数字图像处理 RGB与HIS彩色空间分割

    千次阅读 2011-12-14 15:41:23
    实验主要考查彩色图像分割,由于RGB图像、HIS图像间的相互转换过程 比较复杂,实现起来代码比较长,本实验通过rgb2hsv进行转换,HIS和HSV图像 还是有一定的区别的,但影响不是很大。处理过程大致如下: ①将rgb...

    一.实验题目

    参照下图编程实现RGB与HIS彩色空间分割,并对分割结果进行比较。

    二.实验分析

    本实验主要考查彩色图像分割,由于RGB图像、HIS图像间的相互转换过程

    比较复杂,实现起来代码比较长,本实验通过rgb2hsv进行转换,HIS和HSV图像

    还是有一定的区别的,但影响不是很大。处理过程大致如下:

    ①将rgb图像转换成his图像

    ②将his的h和s分量做点乘运算

    ③设置参数,生成阈值图像

    ④将阈值图像与rgb,his图像相乘便得到分割图像。

    三.实验程序

    clear;clc;
    I=imread('images_chapter_06\Fig6.28(b).jpg');
    subplot(2,2,1);imshow(I);xlabel('original image');
    I1=rgb2hsv(I);scale=0.5;
    I2=I1(:,:,1).*I1(:,:,2);
    m=I2>max(max(I2))*scale;
    for u=1:3
        I(:,:,u)=I(:,:,u).*uint8(m);
    end
    % T=max(I(:))*scale;I11=double(I);
    % I11(:,:,1)=I11(:,:,1).*double(I11(:,:,1)>T);
    % I11(:,:,2)=I11(:,:,2).*double(I11(:,:,2)>T);
    % I11(:,:,3)=I11(:,:,3).*double(I11(:,:,3)>T);
    subplot(2,2,3);imshow(I,[]);xlabel('RGB segmentation');
    I3=double(m);
    I1(:,:,1)=I1(:,:,1).*I3;
    I1(:,:,2)=I1(:,:,2).*I3;
    I1(:,:,3)=I1(:,:,3).*I3;
    subplot(2,2,4);imshow(I1,[]);xlabel('HSV segmentation');
    % figure;imshow(I11,[]);
    
     
    
    四.实验结果

           由于红色区域亮度比较大,且和其他部分相差较大,因此,经过运算就将红色部分分割出来了。

    在进行rgb分割时也可以不借助hsv的分量进行处理,用rgb的最大亮度的scale倍作为分割点。



    展开全文
  • 图像处理实验

    2010-12-01 17:10:00
    图 像 处 理 实 验(一)直 方 图 灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特征更加明显。 灰度级的直方图给出了一幅图像概貌的描述,通过修改灰度直方图来得到图像...

    图 像 处 理 实 验(一)直 方 图
    灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特征更加明显。
    灰度级的直方图给出了一幅图像概貌的描述,通过修改灰度直方图来得到图像增强。
    1、 灰度直方图
    (1) 计算出一幅灰度图像的直方图
    clear
    close all
    I=imread('004.bmp');
    imhist(I)
    title('实验一(1) 直方图');
    (2) 对灰度图像进行简单的灰度线形变换,
    figure
    subplot(2,2,1)
    imshow(I);
    title('试验2-灰度线性变换');
    subplot(2,2,2)
    histeq(I);
    (3) 看其直方图的对应变化和图像对比度的变化。
    原图像 f(m,n) 的灰度范围 [a,b] 线形变换为图像 g(m,n),灰度范围[a’,b’]
    公式: g(m,n)=a’+(b’-a’)* f(m,n) /(b-a)
    figure
    subplot(2,2,1)
    imshow(I)
    J=imadjust(I,[0.3,0.7],[0,1],1);
    title(' 实验一(3)用 g(m,n)=a’+(b’-a’)* f(m,n) /(b-a)进行变换 ');
    subplot(2,2,2)
    imshow(J)
    subplot(2,2,3)
    imshow(I)
    J=imadjust(I,[0.5 0.8],[0,1],1);
    subplot(2,2,4)
    imshow(J)
    (4) 图像二值化 (选取一个域值,(5) 将图像变为黑白图像)
    figure
    subplot(2,2,1)
    imshow(I)
    J=find(I<150);
    I(J)=0;
    J=find(I>=150);
    I(J)=255;
    title(' 实验一(4)图像二值化 ( 域值为150 ) ');
    subplot(2,2,2)
    imshow(I)
    clc;
    I=imread('14499.jpg');
    bw=im2bw(I,0.5);%选取阈值为0.5
    figure;
    imshow(bw) %显示二值图象
    图象处理变换(二)
    1. 傅立叶变换
    熟悉其概念和原理,实现对一幅灰度图像的快速傅立叶变换,并求其变换后的系数分布.
    2. 离散余弦变换
    熟悉其概念和原理,实现对一幅灰度和彩色图像作的离散余弦变换,选择适当的DCT系数阈值对其进行DCT反变换.
    % 图象的FFT变换
    clc;
    I=imread('005.bmp');
    subplot(1,2,1)
    imshow(I);
    title('原图');
    subplot(1,2,2)
    imhist(I);
    title('直方图');
    colorbar;
    J=fft2(I);
    figure;
    subplot(1,2,1)
    imshow(J);
    title('FFT变换结果');
    subplot(1,2,2)
    K=fftshift(J);
    imshow(K);
    title('零点平移');
    figure;
    imshow(log(abs(K)),[]),colormap(jet(64)),colorbar;
    title('系数分布图');
    % 图象的DCT变换
    RGB=imread('005.bmp');
    figure;
    subplot(1,2,1)
    imshow(RG;
    title('彩色原图');
    a=rgb2gray(RG;
    subplot(1,2,2)
    imshow(a);
    title('灰度图');
    figure;
    b=dct2(a);
    imshow(log(abs(b)),[]),colormap(jet(64)),colorbar;
    title('DCT变换结果');
    figure;
    b(abs(b)<10)=0;
    % idct
    c=idct2(b)/255;
    imshow(c);
    title('IDCT变换结果');
    图象处理变换(三)小波变换
    实验内容: 熟悉小波变换的概念和原理,熟悉matlab小波工具箱主要函数的使用.利用二维小波分析对一幅图象作2层小波分解,并在此基础上提取各层的低频信息实现图像的压缩.
    程序如下:
    clc
    close all
    clear
    a=imread('005.bmp');
    subplot(1,2,1);
    imshow(a);
    title('原始图象');
    I=rgb2gray(a);
    subplot(1,2,2);
    imshow(I);
    title('原始图象的灰度图');
    % 进行二维小波变换
    [a,b] = wavedec2(I, 2, 'bior3.7');
    % 提取各层低频信息
    figure;
    c = appcoef2( a, b, 'bior3.7', 1 );
    subplot(1,2,1);
    imshow(c, []);
    title('一层小波变换结果');
    d = appcoef2( a, b, 'bior3.7', 2 );
    subplot(1,2,2);
    imshow(d, []);
    title('二层小波变换结果');
    图象处理实验(四) 模板运算
    一、实验内容:
    (1)平滑:平滑的目的是模糊和消除噪声。平滑是用低通滤波器来完成,在空域中全是正值。
    (2)锐化:锐化的目的是增强被模糊的细节。锐化是用高通滤波器来完成,在空域中,接近原点处为正,在远离原点处为负。
    利用模板进行图象增强就是进行模板卷积。
    1、 利用二个低通邻域平均模板(3×3和9×9)对一幅图象进行平滑,验证模板尺寸对图象的模糊效果的影响。
    2、 利用一个低通模板对一幅有噪图象(GAUSS白噪声)进行滤波,检验两种滤波模板(分别使用一个5×5的线性邻域平均模板和一个非线性模板:3×5中值滤波器)对噪声的滤波效果。
    3、 选择一个经过低通滤波器滤波的模糊图象,利用sobel和prewitt水平边缘增强高通滤波器(模板)对其进行高通滤波图象边缘增强,验证模板的滤波效果。
    4、 选择一幅灰度图象分别利用 一阶Sobel算子和二阶Laplacian算子对其进行边缘检测,验证检测效果。
    二、实验步骤:
    1、利用低通邻域平均模板进行平滑:
    I=imread('girl.bmp');
    subplot(1,3,1);
    imshow(I);
    title('原图');
    J=fspecial('average');
    J1=filter2(J,I)/255;
    subplot(1,3,2);
    imshow(J1);
    title('3*3滤波');
    K=fspecial('average',9);
    K1=filter2(K,I)/255;
    subplot(1,3,3);
    imshow(K1);
    title('9*9滤波');
    2、中值滤波和平均滤波
    I=imread('girl.bmp');
    J=imnoise(I,'gaussian',0,0.01);
    subplot(2,2,1);
    imshow(I);
    title('原图');
    subplot(2,2,2);
    imshow(J);
    title('noise');
    K=fspecial('average',5);
    K1=filter2(K,J)/255;
    subplot(2,2,3);
    imshow(K1);
    title('average');
    L=medfilt2(J,[3 5]);
    subplot(2,2,4);
    imshow(L);
    title('medium');
    3、高通滤波边缘增强
    I=imread('girl.bmp');
    subplot(2,2,1);
    imshow(I);
    title('original pic');
    J=fspecial('average',3);
    J1=conv2(I,J)/255;
    %J1=filter2(J,I)/255;
    subplot(2,2,2);
    imshow(J1);
    title('3*3lowpass');
    K=fspecial('prewitt');
    K1=filter2(K,J1)*5;
    subplot(2,2,3);
    imshow(K1);
    title('prewitt');
    L=fspecial('sobel');
    L1=filter2(L,J1)*5;
    subplot(2,2,4);
    imshow(L1);
    title('sibel');
    4、边缘检测
    分别用sobel和laplacian算子来进行,程序如下:
    I=imread('girl.bmp');
    subplot(1,3,1);
    imshow(I);
    title('original pic');
    K=fspecial('laplacian',0.7);
    K1=filter2(K,I)/100;
    subplot(1,3,2);
    imshow(K1);
    title('laplacian');
    L=fspecial('sobel');
    L1=filter2(L,I)/200;
    subplot(1,3,3);
    imshow(L1);
    title('sibel');
    图像处理实验(五)图像分割
    实验目的:1、 学习边缘检测
    2、 学习灰度阀值分割
    实验内容:
    1、分别用sobel、Laplacian-Gaussian方法对一幅灰度图像进行边缘提取,2、给出对比结果
    i=imread('eight.tif');
    figure;
    subplot(2,2,1);
    imshow(i);
    title('原始图像');
    subplot(2,2,3);
    imshow(i);
    title('原始图像');
    i1=edge(i,'sobel');
    subplot(2,2,2);
    imshow(i1);
    title('sober方法提取的边缘');
    i2=edge(i,'log');
    subplot(2,2,4);
    imshow(i2);
    title('Laplacian-Gaussian方法提取的边缘');
    比较提取边缘的效果可以看出,sober算子是一种微分算子,对边缘的定位较精确,但是会漏去一些边缘细节。而Laplacian-Gaussian算子是一种二阶边缘检测方法,它通过寻找图象灰度值中二阶过零点来检测边缘并将边缘提取出来,边缘的细节比较丰富。通过比较可以看出Laplacian-Gaussian算子比sober算子边缘更完整,效果更好。
    3、利用双峰法对一幅灰度图像进行灰度分割处理
    i=imread('eight.tif');
    subplot(1,2,1);
    imhist(i);
    title('原始图像直方图');
    thread=130/255;
    subplot(1,2,2);
    i3=im2bw(i,thread);
    imshow(i3);
    title('分割结果');
    根据原图像的直方图,发现背景和目标的分割值大约在130左右,并将灰度图像转为二值图像,分割效果比较理想。
    图像处理实验(六)图像压缩与编码
    实验目的: 学习JPEG压缩编码
    实验内容:
    一.实现基本JPEG的压缩和编码分三个步骤:
    1. 首先通过DCT变换去除数据冗余;
    2. 使用量化表对DCT系数进行量化;
    3. 对量化后的系数进行Huffman编码。
    具体源程序由主程序及两个子程序(DCT量化、Huffman编码)组成:
    1.主程序
    I=imread('autumn.tif');
    yiq=rgb2ntsc(I);
    my=[16 11 10 16 24 40 51 61;12 12 14 19 26 58 60 55;
    14 13 16 24 40 57 69 56;14 17 22 29 51 87 80 62;
    18 22 37 56 68 109 103 77;24 35 55 64 81 104 113 92;
    49 64 78 87 103 121 120 101;72 92 95 98 112 100 103 99];
    miq=[17 18 24 47 99 99 99 99;18 21 26 66 99 99 99 99;
    24 26 56 99 99 99 99 99;47 66 99 99 99 99 99 99;
    99 99 99 99 99 99 99 99;99 99 99 99 99 99 99 99;
    99 99 99 99 99 99 99 99;99 99 99 99 99 99 99 99];
    I1=yiq(:,:,1);I2=(:,:,2);
    [m n]=size(I1);
    t1=8;ti1=1;
    while(t1
    t1=t1+8;ti1=ti1+1;
    end
    t2=8;ti2=1;
    while(t2
    t2=t2+8;ti2=ti2+1;
    end
    times=0;
    for k=0:ti1-2
    for j=0:ti2-2
    dct8x8(I1(k*8+1:k*8+8,j*8+1:j*8+8),my,times*64+1);
    dct8x8(I2(k*8+1:k*8+8,j*8+1:j*8+8),miq,times*64+1);
    times=times+1;
    end
    block(I2(k*8+1:k*8+8,j*8+1:t2),[8 8], 'dctmtx(8)');
    end
    for j=0:ti2-2
    dct8x8(I1(k*8+1:t1,j*8+1:j*8+8),times*64+1);
    times=times+1;
    end
    dct8x8(I1(k*8+1:t1,j*8+1:t2),times*64+1);
    2.function dct8x8(I,m,s) %定义DCT量化子程序
    T=inline('dctmtx(8)');
    y=blkproc(I,[8 8],T);
    y=round(y./m);
    p=1;te=1;
    while(p<=64)
    for q=1:te
    y1(s+p)=y(te-q+1,q);p=p+1;
    end
    for q=te:-1:1
    y1(s+p)=y(te-q+1,q);p=p+1;
    end
    end
    f=haffman(y1);
    c(s:s+64,1)=f(:,1);c(s:s+64,2)=f(:,2);c(s:s+64,3)=f(:,3)
    3.function c=haffman(I) %定义Huffman编码子程序
    [m,n]=size(I);
    p1=1;s=m*n;
    for k=1:m
    for h=1:n
    f=0;
    for b=1:p1-1
    if(c(b,1)==I(k,h)) f=1;break;end
    end
    if(f==0) c(p1,1)=I(k,h);p1=p1+1;end
    end
    end
    for g=1:p1-1
    p(g)=0;c(g,2)=0;
    for k=1:m
    for h=1:n
    if(c(g,1)==I(k,h)) p(g)=p(g)+1;end
    end
    end
    p(g)=p(g)/s;
    end
    pn=0;po=1;
    while(1)
    if(pn>=1.0) break;
    else
    [pm p2]=min(p(1:p1-1));p(p2)=1.1;
    [pm2,p3]=min(p(1:p1-1));p(p3)=1.1;
    pn=pm+pm2;p(p1)=pn;
    tree(po,1)=p2;tree(po,2)=p3;
    po=po+1;p1=p1+1;
    end
    end
    for k=1:po-1
    tt=k;m1=1;
    if(or(tree(k,1)<9,tree(k,2)<9))
    if(tree(k,1)<9)
    c(tree(k,1),2)=c(tree(k,1),2)+m1;
    m2=1;
    while(tt
    m1=m1*2;
    for h=tt:po-1
    if(tree(h,1)==tt+g)
    c(tree(k,1),2)=c(tree(k,1),2)+m1;
    m2=m2+1;tt=h;break;
    elseif(tree(h,2)==tt+g)
    m2=m2+1;tt=h;break;
    end
    end
    end
    c(tree(k,1),3)=m2;
    end
    tt=k;m1=1;
    if(tree(k,2)<9)
    m2=1;
    while(tt
    m1=m1*2;
    for h=tt:po-1
    if(tree(h,1)==tt+g)
    c(tree(k,2),2)=c(tree(k,2),2)+m1;
    m2=m2+1;tt=h;break;
    elseif(tree(l,2)==tt+g)
    m2=m2+1,tt=h;break;
    end
    end
    end
    c(tree(k,2),3)=m2;
    end
    end
    end
    二.JPEG2000采用小波变换编码,
    小波变换压缩编码实现程序为
    load wbarb;
    subplot(2,2,1),image(X);colormap(map)
    title('原始图象');
    [c,s]=wavedec2(X,2, 'bior3.7');
    thr=20;
    ca1=appcoed2(c,s, 'bior3.7',1);
    ch1=detcoef2('h',c,s,1);
    cv1=detcoef2('v',c,s,1);
    cd1=detcoef2('d',c,s,1);
    a1=wrcoef2('a',c,s, 'bior3.7',1);
    h1=wrcoef2('h',c,s, 'bior3.7',1);
    v1=wrcoef2('v',c,s, 'bior3.7',1);
    d1=wrcoef2('d',c,s, 'bior3.7',1);
    c1=[a1,h1,v1,d1];
    ca1=appcoed2(c,s, 'bior3.7',1);
    ca1=wcodemat(ca1,440, 'mat',0);
    ca1=0.5*ca1
    subplot(2,2,2),image(ca1)
    title('压缩图象一')
    ca2=appcoed2(c,s, 'bior3.7',2);
    ca2=wcodemat(ca2,440, 'mat',0);
    ca2=0.5*ca2;
    subplot(2,2,3),image(ca2)
    title('压缩图象二')
    图象处理实验(七)应用KL变换进行图象的特征提取
    一、实验要求:应用KL变换进行图象的特征提取。熟悉MATLAB的相关命令。
    二、实验目的:掌握如何应用KL变换进行图象的特征提取。
    三、实验内容:选择一幅稍大的灰度图象(最好用纹理图象),按下面步骤进行实验:
    (1)应用9×9的窗口对上述图象进行随机抽样,共抽样200块子图象;
    (2)将所有子图象按列相接变成一个81维的行向量;
    (3)对所有200个行向量进行KL变换,求出其对应的协方差矩阵的特征向量和特征值,按降序排列特征值以及所对应的特征向量;
    (4)选择前40个最大特征值所对应的特征向量作为主元,将原图象块向这40个特征向量上投影,所获得的投影系数就是这个子块的特征向量。
    (5)求出所有子块的特征向量。
    四、实验结果:
    源程序如下:
    clear
    close all
    clc
    M=rand(200,200);
    I=imread('a.bmp');
    [mx,my]=size(I);
    imshow(I);
    title('原始图象');
    for i=1:200
    for j=1:199
    if(ceil(M(i,j)*mx)
    x(i)=ceil(M(i,j)*mx);
    y(i)=ceil(M(i,j+1)*my);
    end
    end
    end
    for i=1:200
    I1(:,:,i)=imcrop(I,[x(i),y(i),8,8]);
    I2(:,i)=reshape(I1(:,:,i),1,81);
    end
    I2=double(I2);
    C=I2'*I2/200;
    [a,s]=eig(C);
    A=a(161:200,;
    U=A*I2';
    figure;
    imshow(U);
    title('特征向量');

    展开全文
  • 数字图像处理实验综合

    千次阅读 2016-05-02 16:38:49
    实验一 图像打开、保存与显示   一、实验目的: 掌握数字图像的基本类型及其表示。熟悉Matlab软件环境,了解Matlab中对图像数据的读入、显示和输出等操作,实现图像文件的打开、显示与保存功能。 二、实验环境...

    实验一  图像打开、保存与显示

     

    一、实验目的:

    掌握数字图像的基本类型及其表示。熟悉Matlab软件环境,了解Matlab中对图像数据的读入、显示和输出等操作,实现图像文件的打开、显示与保存功能。

    二、实验环境:

    计算机、WindowsXP操作系统,Matlab7.0

    三、实验内容:

    实验前准备工作:

    所使用的图像文件都保存在Matlab安装目录下的\toolbox\images\imdemos子目录下。将实验中需要使用的图像文件,事先拷贝到Matlab安装目录下的\work子目录下。(Matlab默认处理当前工作目录下的图像文件)

     

    1、运用Matlab图像处理工具箱中的imread函数分别读入灰度图像pout.tif、二值图像blobs.png、索引图像trees.tif和RGB图像peppers.png,观察相应的图像矩阵,并运用imshow函数显示相应图像。

    代码实现:

    >> I_huidu=imread('pout.tif');

    >> figure(1),imshow(I_huidu);

     

    >> I_erzhi=imread('blobs.png');

    >> figure(2),imshow(I_erzhi);

     

    >> I_erzhi2=imread('circles.png');

    >> figure(3),imshow(I_erzhi2);

     

    >>[I_suoyin,colormap]=imread('trees.tif');

    >> figure(4),imshow(I_suoyin);

    >> imshow(I_suoyin,colormap);

     

    2、对一个RGB彩色图像peppers.png,分别抽取其R、G、B三个分量层,并显示各层图像。

    代码实现:

    >>I_reb=imread('peppers.png');

    >>R=I_reb(:,:,1);

    >>figure(5),imshow(R);

    >>subplot(2,2,1),imshow(I_reb);

    >>subplot(2,2,2),imshow(R);

    >> G=I_reb(:,:,2);

    >> B=I_reb(:,:,3);

    >> subplot(2,2,3),imshow(G);

    >> subplot(2,2,4),imshow(B);

     

    3、向灰度图像pout.tif中分别加入高斯噪声和椒盐噪声,显示并保存带有噪声的图像。

    代码实现:

    >>I=imread('pout.tif');

    >>G=imnoise(I,'gaussian');

    >>figure(6),subplot(1,3,1),imshow(I);

    >>subplot(1,3,2),imshow(G);

    >>J=imnoise(I,'salt & pepper');

    >> J=imnoise(I,'salt &pepper',0.05);

    >>subplot(1,3,3),imshow(J);

     

    >> imwrite(G,'gpout.tif');

    >> imwrite(J,'jpout.tif');

     


    实验二   图像灰度直方图统计

     

    一、实验目的:

    理解并掌握灰度直方图的概念、计算灰度直方图的方法以及如何应用直方图均衡化来增强图像对比度。

    二、实验环境:

    计算机、WindowsXP操作系统,Matlab7.0

    三、实验内容:

    以灰度图像pout.tif为例,运用Matlab编程实现灰度直方图的统计以及直方图均衡化处理过程:

    (1)计算并绘制原始图像的灰度直方图;

    (2)根据离散累计分布函数,对原始灰度直方图进行均衡化处理,绘制均衡化后的灰度直方图;

    (3)生成均衡化处理后的新图像,显示并保存。

    (4)比较原始图像和新图像的对比度。

     

    代码实现:(.m文件)

    grayimage=imread('pout.tif');

    [m,n]=size(grayimage);

    gp=zeros(1,256);

    for i=1:256

      gp(i)=length(find(grayimage==(i-1)))/(m*n);

    end

    subplot(2,2,1),imshow(grayimage);

    subplot(2,2,2),bar(0:255,gp);

    S1=zeros(1,256);

    S2=zeros(1,256);

    temp=0;

    fori=1:256

        temp=temp+gp(i);

        S1(i)=temp;

    end

    S2=round(S1*255);

    newgp=zeros(1,256);

    fori=1:256

        newgp(i)=sum(gp(find(S2==(i-1))));

    end

    subplot(2,2,4),bar(0:255,newgp);

    newgrayimage=grayimage;

    fori=1:256

       newgrayimage(find(grayimage==(i-1)))=S2(i);

    end

    subplot(2,2,3),imshow(newgrayimage);

    imwrite(newgrayimage,'newpout.tif');



    实验三   图像轮廓提取与边缘检测

     

    一、实验目的:

    理解并掌握对二值图像进行轮廓提取的相关算法(比如,掏空内部点法),以及用于图像边缘检测和提取的典型微分算子(梯度算子和拉普拉斯算子)。

    二、实验环境:

    计算机、WindowsXP操作系统,Matlab7.0

    二、实验内容:

    1、以二值图像circles.png(黑色背景白色前景)为例,根据掏空内部点算法,运用Matlab编程实现二值图像的轮廓提取。

     

    代码实现:(.m文件)

    BW=imread('circles.png');

    [m,n]=size(BW);

    BW_buffer=BW;

    for i=2:m-1

       for j=2:n-1

           if(BW(i,j)==255 &&BW(i-1,j-1) && BW(i-1,j)==255 && BW(i+1,j)==255 &&BW(i,j+1)==255 && BW(i,j-1)==255 && BW(i+1,j+1)==255 &&BW(i-1,j+1)==255 && BW(i+1,j-1)==255)

           BW_buffer(i,j)=0;

           end

       end

    end

    figure(1),subplot(1,2,1),imshow(BW);

    subplot(1,2,2),imshow(BW_buffer);

     

    注意:

    (1)使用掏空内部点的方法来提取二值图像的轮廓时,不能直接在原始二值图像矩阵上判断一个点掏空一个点,否则对前面像素的掏空操作会影响到对后面像素的判断结果。

    (2)解决方法:创建原始二值图像矩阵的副本,在原始二值图像矩阵上执行判断操作,即依次判断每个像素点是否为前景中的内部点,如果是,则在副本图像矩阵上执行掏空内部点操作。                     

    2、以灰度图像rice.png为例,利用Matlab图像处理工具箱中的edge函数,分别使用Roberts 算子、Sobel算子、Prewitt 算子对其进行边缘检测。

     

    代码实现:(.m文件)

    I=imread('rice.png');

    [BW1,thresh1]=edge(I,'roberts');

    [BW2,thresh2]=edge(I,'sobel');

    [BW3,thresh3]=edge(I,'prewitt');

    figure(2),subplot(2,2,1),imshow(I);

    subplot(2,2,2),imshow(BW1);

    subplot(2,2,3),imshow(BW2);

    subplot(2,2,4),imshow(BW3);

     

    关于edge函数的使用说明:

    (1)函数格式:BW = edge(I, 'method', thresh)

    (2)格式说明:edge函数输入灰度图像矩阵I,输出二值图像矩阵BW;参数'method'用于指定所使用的边缘检测算子,可以是'roberts'、'sobel'、'prewitt'、'log'、'canny'等;参数thresh用于指定梯度门限值(也称梯度阈值),图像中梯度值大于等于门限值thresh的像素用白色(1)表示,说明这些地方对应边缘,梯度值小于门限值thresh的像素用黑色(0)表示(edge function will ignoreall edges that are not stronger than thresh)。若不指定参数thresh,则edge函数会自动选择阈值。所以edge函数最终将原始灰度图像中的边缘和背景用二值图像的形式展现出来,以突出边缘的位置,达到边缘检测的目的。

     

    3、若向原始图像rice.png中加入高斯噪声,之后再对噪声图像分别运用Roberts 算子、Sobel算子、Prewitt 算子、Log算子(高斯-拉普拉斯算子)进行边缘检测,观察检测结果,试比较4种边缘检测算子的抗噪声干扰能力。

     

    代码实现:(.m文件)

    I=imread('rice.png');

     

    G=imnoise(I,'gaussian');

     

    [BW1,thresh1]=edge(G,'roberts');

    [BW2,thresh2]=edge(G,'sobel');

    [BW3,thresh3]=edge(G,'prewitt');

    [BW4,thresh4]=edge(G,'log');

    figure(3),subplot(2,3,1),imshow(I);

    subplot(2,3,2),imshow(G);

    subplot(2,3,3),imshow(BW1);

    subplot(2,3,4),imshow(BW2);

    subplot(2,3,5),imshow(BW3);

    subplot(2,3,6),imshow(BW4);

     

    4.对图像做均值滤波,处理高斯噪声。

     

    代码实现:(.m文件)

    function d=avefilt(x,n)

    a=ones(n);

    [M,N]=size(x);

    x1=double(x);

    x2=x1;

     

    for i=1:M-n+1 %循环次数

      for j=1:N-n+1%抽取子矩阵

      c=x1(i:i+(n-1),j:j+(n-1)).*a;

      s=sum(sum(c));

      x2(i+fix((n-1)/2),j+fix((n-1)/2))=s/(n*n);

      end

    end

    d=uint8(x2);

     

     

     

    I=imread('rice.png');

     

    G=imnoise(I,'gaussian');

     

    A=avefilt(G,3);

     

    figure(4),subplot(1,3,1),imshow(I);

    subplot(1,3,2),imshow(G);

    subplot(1,3,3),imshow(A);


    实验四   二维图像几何变换

     

    一、实验目的:

    理解并掌握平移、镜像、旋转和比例缩放等二维图像基本几何变换的变换原理以及灰度插值处理过程。

    二、实验环境:

    计算机、WindowsXP操作系统,Matlab7.0

    三、实验内容:

    1、以灰度图像cameraman.tif为例,通过Matlab编程实现水平镜像和垂直镜像变换。

    代码实现:(.m文件)

    %对灰度图像进行处理

    I=imread('cameraman.tif');

    [M,N]=size(I);

    S=I;

    for i=1:M

        for j=1:N

            S(i,j)=I(i,N-j+1); 

            %S(i,N-j+1)=I(i,j);都行

        end

    end

    C=I;

    for j=1:N

        for i=1:M

            C(i,j)=I(M-i+1,j); 

           %C(M-i+1,j)=I(i,j);都行

        end

    end

    figure(1)

    subplot(2,2,1),imshow(I);

    subplot(2,2,2),imshow(S);

    subplot(2,2,3),imshow(C);

     

    %对RGB图像进行处理

    I=imread('football.jpg');

     

    [M,N,L]=size(I);

     

    S=I;

    for k=1:L %i=1:3

        for i=1:M

            for j=1:N

                S(i,j,k)=I(i,N-j+1,k); 

                %S(i,N-j+1)=I(i,j);都行

            end

        end

    end

     

    C=I;

    for k=1:L

        for j=1:N

            for i=1:M

                C(i,j,k)=I(M-i+1,j,k); 

            %C(M-i+1,j)=I(i,j);都行

            end

        end

    end

     

    figure(2)

    subplot(2,2,1),imshow(I);

    subplot(2,2,2),imshow(S);

    subplot(2,2,3),imshow(C);

     

    2、以灰度图像circuit.tif为例,利用Matlab图像处理工具箱中的imresize函数对图像进行比例缩放变换。要求:创建4个figure窗口,分别用于显示原始图像、等比例放大1.5倍后的图像、等比例缩小0.5倍后的图像、缩放为高190宽400的图像(实现不等比例缩放)。并保存缩放后的所有图像文件到当前目录中。

    注意:要使各自的figure窗口保持初始大小,不要最大化figure窗口,因为figure窗口的初始大小才表明了缩放前后图像大小的变化。也可以使用其它图像处理工具软件,分别打开原始图像以及新生成的3幅比例缩放变换后的图像,以观察它们之间的变化。

     

    代码实现:(.m文件)

    I=imread('circuit.tif');

    [M,N]=size(I);

    F=imresize(I,1.5,'nearest');

    imwrite(F,'circuit1_5.tif');

    [M1_5,N1_5]=size(F);

     

    S=imresize(I,0.5,'nearest');

    imwrite(S,'circuit0_5.tif');

    [M0_5,N0_5]=size(S);

     

    J=imresize(I,[190400],'nearest');

    imwrite(J,'circuit190_400.tif');

    [M190_400,N190_400]=size(J);

     

    figure(3),imshow(I);

    figure(4),imshow(F);

    figure(5),imshow(S);

    figure(6),imshow(J);

     

    关于imresize函数的使用说明:

    (1)函数格式:

    B=imresize(A,m, method)

    B=imresize(A,[mrows  ncols], method)

    (2)格式说明:A为原始图像矩阵,B为比例缩放变换后的图像矩阵;method指定缩放过程中使用的插值方法,“nearest”为最邻近插值法(默认值),“bilinear”为双线性插值法;m为缩放倍数,m大于1,图像被放大,小于1,图像被缩小;mrows和ncols用于分别指定变换后图像的高度和宽度,这能克服缩放倍数m只能对高度和宽度等比例缩放的缺陷。

     

    3、以灰度图像cameraman.tif为例,利用Matlab图像处理工具箱中的imrotate函数对图像进行旋转变换。要求:创建3个figure窗口,分别用于显示原始图像、逆时针旋转45°后的图像、顺时针旋转45°后的图像。并保存旋转后的所有图像文件到当前目录中。

    注意:要使各自的figure窗口保持初始大小,不要最大化figure窗口,因为figure窗口的初始大小才表明了旋转前后图像的变化。也可以使用其它图像处理工具软件,分别打开原始图像以及新生成的两幅旋转变换后的图像,以观察它们之间的变化。

     

    代码实现:(.m文件)

    I=imread('cameraman.tif');

    I_45=imrotate(I,45);

    imwrite(I_45,'cameraman45.tif');

     

    I_45N=imrotate(I,-45);

    imwrite(I_45N,'cameraman45N.tif');

    figure(1),imshow(I);

    figure(2),imshow(I_45);

    figure(3),imshow(I_45N);

     

    关于imrotate函数的使用说明:

    (1)函数格式:

    B=imrotate(A,angle)

    B=imrotate(A,angle, method)

    (2)格式说明:A为原始图像矩阵,B为旋转变换后的图像矩阵;angle指定逆时针旋转角度,当angle为负值时,表示顺时针旋转;method指定旋转过程中使用的插值方法,“nearest”为最邻近插值法(默认值),“bilinear”为双线性插值法。

     

    4.对图像做中值滤波,去椒盐噪声。

    代码实现:(.m文件)

    %中值滤波

    functiond=medfilt(x,m,n)

    [M,N]=size(x);

    x1=double(x);

    x2=x1;%保持边界处像素值不变

    fori=1:M-m+1

        for j=1:N-n+1

           c=x1(i:i+m-1,j:j+n-1);

           e=c(1,:); %矩阵变行向量

           for k=2:m

               e=[e,c(k,:)];

           end

           x2(i+(m-1)/2,j+(n-1)/2)=median(e);%取中心像素位置,并赋给其中值

        end

    end

    d=uint8(x2);

     

     

    I=imread('eight.tif');

    J=imnoise(I,'salt& pepper');

    after=medfilt(J,3,3);

    figure(4);

    subplot(1,3,1),imshow(I);

    subplot(1,3,2),imshow(J);

    subplot(1,3,3),imshow(after);


    展开全文
  • 数字图像处理_彩色图像处理1. 实验目的2. 实验流程2.1 彩色图像基本操作2.2 伪彩色处理2.3 彩色图像平滑滤波2.4 RGB转HSI3. 实验代码3.1 彩色图像读取、显示与格式转换3.2 伪彩色变换3.3 彩色图像平滑滤波3.4 RGB...
  • 数字图像处理实验(1)——直方图均衡化 实验题目: 编程实现灰度和彩色图像的直方图均衡化处理。要求给出原始图像的直方图、均衡化图像及其直方图和直方图均衡化时所用的灰度级变换曲线图。注意彩色图像需要编程...
  • HSV与RGB及其在图像处理中的应用

    千次阅读 2018-04-25 20:56:42
    HSV实现在图像处理中,最常用的颜色空间是RGB模型,常用于颜色显示和图像处理,三维坐标的模型形式,非常容易被理解。而HSV模型,是针对用户观感的一种颜色模型,侧重于色彩表示,什么颜色、深浅如何、明暗如何。第...
  • 最近在学习数字图像处理,在matlab实验中多次看到index image,rgb image,gray image....以及rgb2gray(),ind2gray()函数,很好奇索引图像和RGB图像有什么区别,上网查了写资料,发现了索引图像和RGB图像都是彩色图像...
  • Matlab 图像处理实验报告

    千次阅读 2017-03-19 18:50:22
    ①目前,数字图像处理的信息大多是二维信息,处理信息量很大。 ②数字图像处理占用的频带较宽。 ③数字图像中各个像素是不独立的,其相关性大。3.什么是像素? 像素是一个面积概念,是构成数字图像的最小单位。4....
  • 彩色图像处理RGB图像)

    千次阅读 2010-12-07 17:14:00
    %读入一幅图像  fR=rgb(:,:,1);%  fG=rgb(:,:,2);%三种分量RGB的分解 fB=rgb(:,:,3);%  imshow(fB);%显示Blue分量  rgb_img=cat(3,fR,fG,fB);%三个分量组合  imshow(rgb)%显示原...
  • 实验一 图像打开、保存与显示   一、实验目的: 掌握数字图像的基本类型及其表示。熟悉Matlab软件环境,了解Matlab中对图像数据的读入、显示和输出等操作,实现图像文件的打开、显示与保存功能。 二、实验环境...
  • (三)matlab数字图像处理实验-图像灰度变换处理

    万次阅读 多人点赞 2018-01-08 18:44:08
    前两节都是熟悉一下怎么在matlab底下对图片做一些操作,并没有什么卵用,这一节稍微有点卵用,灰度变换一般是图像处理的第一步。 数字图像处理实验1-9点击下列链接有源码和链接: matlab数字图像处理实验 ...
  • %colorbar函数将颜色条添加到坐标轴对象中RGB=imread('drum.bmp') %图像读入I=rgb2gray(RGB); %把RGB图像转化为灰度图像h=[1 2 1;0 0 0;-1 -2 -1]; I2=filter2(h,I); %使用指定的滤波器h对I进行滤波,结果保存在I2中...
  • 数字图像处理matlab实验

    千次阅读 2019-04-28 19:29:43
    一、对图像文件分别进行灰度线性变换、直方图、直方图均衡化操作 rgb=imread(‘lena.bmp’); gray1=rgb2gray(rgb); % 色彩转换成灰度 a=0.5; b=150; % 可根据实际需要进行改变 gray2=a*gray1+b; figure(1) ...
  • 数字图像处理实验5图像复原

    千次阅读 2018-07-23 21:07:59
    一、实验目的 (1)了解图像复原的目的及意义,加深对图像复原理论的认识。 (2)掌握维纳滤波复原基本原理。 (3)掌握约束最小二乘方复原方法。...I=imread('E:\大三课件\大三下\数字图像处理\实验\...
  • 数字图像处理实验(二)

    万次阅读 2017-08-01 16:26:48
    实验目的实验一:图像增强了解图像增强的目的及意义,加深对图像增强的感性认知 1. 掌握直接灰度变换的图像增强方法 2. 掌握灰度直方图的概念及其计算方法 3. 掌握直方图均衡化合直方图规定化得计算过程实验二:...
  • 数字图像处理第六章数字图像处理---彩色图像处理(五) 彩色图像的空间滤波5.1 彩色图像的平滑处理5.2 彩色图像的锐化处理(六) 直接在 RGB 矢量空间中 处理6.1 使用梯度的彩色边缘检测6.2 在 RGB向量空间中分割...
  • 实验图像的基本运算一、实验目的(1)掌握点运算和代数运算的算法实现和概念(2)掌握和几何运算的算法实现和概念(2)掌握灰度变换和几何变换的基本方法(3)理解图像灰度直方图的概念二、实验内容(1)任意选择...
  • matlab数字图像处理实验 1、什么是平滑处理?  首先明白几个名词:  (1)噪声:图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。 1.高斯噪声:高斯噪声是指它的概率密度函数服从高斯分布(即正态...
  • 数字图像处理实验三图像增强

    千次阅读 2018-07-23 21:08:41
    一、实验目的 (1)了解图像增强的目的及意义,加深对图像增强的  感性认识,巩固所学的图像增强的理论知识和相  关算法。 (2)熟练掌握直方图均衡化和直方图规定化的计算过  程。 (3)熟练掌握空域滤波...
1 2 3 4 5 ... 20
收藏数 14,205
精华内容 5,682
关键字:

图像处理rgb实验