Matlab数字图像处理之图像运算

时间:2022-03-20 06:47:08

        由于这段时间在做一个图像处理与三维重建的项目,其中数字图像处理的知识是必不可少的,学习matlab也有一段时间了,所以现在抽点时间将这段时间所学的东西做个小总结,加深理解的同时也方便以后有需要时可以查看一下。
         图像运算是图像处理中常用的处理方法,它以图像为单位进行操作,运算的结果是一副新的图像,常常用于图像的高级处理(如图像分割,目标的检测和识别等)的前期处理。具体的图像运算包括点运算,代数运算,几何运算和邻域运算。点运算常用于改变图像的灰度范围及分布,从而改善图像的效果,代数运算常用于医学图像的处理以及图像误差检测,几何运算在图像配准,校正等方面有重要用途,邻域运算主要用在图像滤波和形态学运算方面。
        在Matlab中,数字图像的数据是以矩阵形式存放的,矩阵的每一个元素值对应着一个像素点的像素值,这样一来,对图像的运算就相当于对数据矩阵进行运算。下面用matlab的具体图像运算实例进行介绍:


图像的(线性)点运算:

           在图像处理中,点运算是一种简单而又很重要的技术,对于一副输入图像,若输出图像的每个像素点的灰度值由输入像素点决定,则这样的图像变换就成为图像的点运算。

        A = imread('1.jpg');   %括号内为图像的输入具体路径
        figure(1);                    %图像显示窗口
        imshow(A);                %输出图像A
        B = A +50;                %A图像的灰度值增加50,成为新的图像B
        figure(2);
        imshow(B);           %输出图像B
        C= 1.5 * A;             %A图像的对比度增强,成为新的图像C
        figure(3);
        imshow(C);            %输出图像C
         D = 0.8 * A;            %图像对比度减弱,成为新的图像D
         figure(4);
         imshow(D);             %输出图像D
         E = -double(A) + 255;      %对图像A进行求补,但要注意先把A的类型转化为double型,实际是E = -1 * A + 255;
        figure(5);
        imshow(uint8(E));                   %输出时注意将图像转为原来的 uint8 类型

图像的代数运算:

           图像的代数运算是指对两幅或两幅以上的输入图像进行加减乘除四则运算,它在图像处理中有着广泛的应用,加法运算可以用来降低图像中的随机噪声,减法运算可以用来减去背景,运动背景,进行梯度幅度运算,乘法运算通常用来进行掩模运算,除法运算可以用来归一化。
          图像加法:   
                     A  = imread('1.jpg');
                     B  = imread('2.jpg');
                     C  = imadd(A,B);            %将A,B两幅图像进行相加得到新的图像C
          图像减法:
                     
                     A  = imread('1.jpg');
                     B  = imread('2.jpg');
                     C  = imsubtract(A,B);            %将A,B两幅图像进行相减得到新的图像C
     图像乘法:
                   
                     A  = imread('1.jpg');
                     B  = imread('2.jpg');
                     C  = immultiply(A,B);            %将A,B两幅图像进行相乘得到新的图像C
    图像除法:
                               
                     A  = imread('1.jpg');
                     B  = imread('2.jpg');
                     C  = imdivide(A,B);            %将A,B两幅图像进行相除得到新的图像C


像的几何运算:

             为了达到某种视觉效果,变换输入图像的像素位置,通过把输入图像的像素位置映射到一个新的位置达到改变原图像的显示效果的目的,这一过程成为图像的几何运算,图像的几何运算主要是指对图像进行几何校正,空间变换(缩放,旋转,仿射变换)等运算过程。
                    
            图像的缩放实际上是通过对图像进行插值来实现的,也就是通过增加或减少图像矩阵的行列数来实现对图像的放大和缩小操作,一般常用的插值方法有四种:分别是最近邻插值(nearest),线性插值(linear),三次样条插值(spline),和立方插值(cubic)。
           matlab中实现插值的函数是interp2,其语法格式为: 
                   A = interp2(B, X, Y,method);                   %其中B为原图像,X 和Y为图像的新的行数和列数,method为上面说的四种插值方法
                   A = interp2(B, ntime, method);              %其中B为原图像,ntime为缩放倍数,method为上面说的四种插值方法
                  例如:   B = imread('1.jpg');
                                 A = interp2(B ,200,300,' nearest ' );           %采用最近邻插值法将图像B转换为 [200,300] 的新图像A
                                 C = interp2(B , 2,' linear');                             %采用线性插值法将图像B增大2倍,成为新图像C
                                 D = interp2(B , 300,500,' spline' );             % 采用三次样条法 将图像B转换为 [300,500] 的新图像D
                                 E  = interp2(B, 0.8,'cubic');                         % 采用立方插值法将图像B 缩小为0.8倍的新图像E
                     
                  

图像的邻域运算:

             邻域运算主要作用是对图像进行空域滤波,比如平滑,中值滤波以及边缘检测等,此外,邻域运算还可以对结构图像进行细化。
                      
平滑: 平滑的目的是消除或尽量减少噪声,改善图像的质量。在matlab中用imfilter函数进行平滑操作,B  = imfilter(A, h); 其中A为原图像,h表示卷积核。  
              A  = imread('1.jpg');
              h = ones(3,3)/5;              %制定卷积核
              h(1,1) = 0;
              h (1,3) =0;
              h(3,1) = 0;
              h(1,3) = 0;
             B  = imfilter(A,h);               %平滑处理
             figure(1);
            imshow(B);   
中值滤波:
              中值滤波用一个含有奇数点的滑动窗口,将邻域的像素按灰度级排序,取其中间值为输出像素。它的优点在于能够在抑制随机噪声的同时不使边缘模糊,但对于线,尖顶等细节多的图像不宜采用中值滤波。
              A  =  imread('1.jpg');
             B = medfilt(A);                  %对图像A进行中值滤波
             figure(1);
            imshow(B);
终于总结好了matlab的图像运算,主要是点运算,代数运算,几何运算和邻域运算,这四种方法涵盖了大部分数字图像处理的常用的手段,是数字图像处理的基础内容,但是往往基础的东西便是最重要的东西。~~