数字图像处理(二)——图像的运算和基本变换

图像的运算和基本变换

  • 图像的算术运算
  • 图像的几何变换
    • 图像的缩放运算
    • 图像的平移运算
    • 图像的旋转运算
      • 几种插值算法简介
        • 最近邻点插值
        • 双线性插值
        • 双三次插值
          • 参考文献

图像的算术运算

图像的算术运算是对两幅输入图像之间进行点对点的加、减、乘、除。
MATLAB提供算术操作函数集合

函数名 功能描述
imabsdiif 两幅图像的绝对差值
imadd 两幅图像的加法
imcomplment 补足一幅图像
imdivide 两个图像的除法
imlincomb 计算两幅图像的线性组合
immultiply 两个图像的乘法
imsubtract 两个图像的减法

使用图像工具箱中的图像运算函数无需再进行数据类型之间的转换,这些函数能够接受uint8和uint16数据,并返回相同格式的图像结果。
图像的算术运算使用以下截取规则使运算结果符合数据范围的要求:超出数据范围的整型数据将被截取为数据范围的极值,分数结果将被四舍五入。
四种运算的函数调用格式:

z=imadd(x,y);% 其中x和y表示需要相加的两幅图像,返回值z表示得到的加法操作结果
z=imsubtract(x,y);% 减法操作
z=immultiply(x,y);% 乘法操作
z=imdivide(x,y);% 除法操作

由于对uint8和uint16数据,每部运算都要进行数据截取,将会减少输出图像的信息量。可使用imlincomb。该函数按照双精度执行所有代数运算操作。仅对最后的输出结果进行截取,该函数的调用格式如下:

z=imlincomb(a,x,b,y,c);% z=a*x+b*y+c
z=imlincomb(a,x,c);% z=a*x+c
z=imlincomb(a,x,b,y);% z=a*x+b*y

图像的几何变换

图像的缩放运算

图像的缩放操作将会改变图像的大小,产生的图像中的像素可能在原图中找不到响应的像素点。一般方法是直接赋值为和它最相近的像素值。也可以通过一些插值算法来计算。

B=imresize(A,scale);% 将图像A以scale为倍数缩放为B
B=imresize(A,[numrows,numcols]);% 将图像A缩放为B,B的行和列分别为numrows和numcols
[Y,newmap]=imresize(X,map,scale);% 将索引图像X缩放为Y
[...]=imresize(...,method);% 将索引图像进行缩放,并采用指定的插值方法或者核函数

图像的平移运算

图像的平移运算就是将图像中所有点按照平移量水平或者垂直移动。

se=strel(1);
se2=translate(se,v);

其中,se是一个用strel函数创建的N维数组;v是一个N维向量;它说明了每一维需要平移的量;se2是与se大小相同的结构元素数组;
之后可以配合imdilate函数配合使用:

J=imdilate(I,se2);

输出的J可以用imshow函数进行显示。

图像的旋转运算

一般图像的旋转是以图像的中心为原点,旋转一定的角度;
旋转后图像的大小一般会改变;
可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像;

B=imrotate(A,angle,method);
B=imrotate(A,angle,method,'crop');

angle表示图像旋转的角度,method用于指定在旋转图像时所使用的的算法,可以为以下几种:'nearest’这个参数是磨人的,为改变图像尺寸时,采用最近邻插值算法;'bilinear’采用双线性插值算法;'bicubic’为采用双三次插值算法;crop指定旋转后的图像是否与输入图像保持相同的尺寸。

几种插值算法简介

最近邻点插值

最近邻点插值又称为零阶插值。它输出的像素值等于距离它映射到的位置最近的输入像素值。对于二维图像,该算法是“取带采样点周围四个相邻像素点中距离最近的一个邻点的灰度值作为该点的灰度值”。最近邻点插值算法是最简单的一种算法,这种算法是当图片放大时,缺少的像素通过直接使用与之最接近的原有像素的颜色生成,也就是照搬旁边的像素。虽然这种方法简单,因此处理的速度很快,但结果通常会产生明显可见的锯齿,效果往往不佳。

双线性插值

双线性插值又称一阶插值。它先对水平方向上进行一阶线性插值,然后再对垂直方向进行一阶线性插值,而不是同时在两个方向上呈线性,或者反过来,最后将两者合并。这种算法是利用周围四个相邻点的灰度值在两个方向上作线性内插以得到待采样点的灰度值,即根据待采样点与相邻点的距离确定相应的权值计算出待采样点的灰度值,由于它是从原图中四个像素中运算的,因此这种算法很大程度上消除了锯齿想想。双线性插值计算量大,但缩放后图像质量高,不会出现像素值不连续的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能使图像轮廓在一定程度上变得模糊。

双三次插值

双三次插值又称为卷积插值。它是一种更加复杂的插值方式,不仅考虑到四个直接邻点灰度值的影响,还考虑到各邻点间灰度值变化率的影响。利用待采样点周围更大邻域内像素的灰度值作三次插值。双三次插值能够克服以上两种算法的不足,计算精度高,但计算量大。
在图像处理工具箱中的函数imrotate可用来对图像进行插值旋转,默认的旋转方法最近邻插值法。
图像缩放函数imresize也可能实现图像的插值,imresize的语法格式:

B=imresize(A,m);

该函数返回的图像B的长宽是图像A的长宽的m倍,m>1,放大图像;m<1,缩小图像。

参考文献

陈刚等. MATLAB在数字图像处理中的应用. 清华大学出版社,2016.

你可能感兴趣的:(数字图像处理,matlab,图像处理)