首页 > 代码库 > 2_Matlab图像的空间域变换操作

2_Matlab图像的空间域变换操作

1. 目的:为了达到某种视觉效果,变换输入图像的像素位置,通过把输入图像的像素位置映射到一个新的位置以达到改变原图像显示效果的目的。

2. 操作包括:

? 图像插值(Interpolation)

? 图像缩放(Resizing)

? 图像旋转(Rotation)

? 图像剪切(Cropping)

3.图像差值操作

1)原因:在处理图像的过程中,比如对图像进行缩放及旋转,这时图像中每个像素的值都要发生变化。数字图像的坐标是整数,经过这些变换之后的坐标不一定是整数,使得输入图像的像素点经过空间域变换后也可能落在输出图像中的无效位置上,因此要对变换之后的整数坐标位置的像素值进行估计。

2)插值含义:通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实曲线,用这个重建的函数便可求出任意位置的函数值。

MATLAB 图像处理工具箱提供了 3 种插值方法:最近邻插值(Nearest Neighbor Interpolation)、双线性插值(Bilinear Interpolation)和双三次插值(Bicubic Interpolation)。      

3)插值方法简介

a.最近邻插值

    最近邻插值中,输出图像中每一个像素点的值就是与该点在输入图像中变换位置最临近采样点的值。该算法的数学表示为:

技术分享

    图像空间域变换操作函数默认使用的插值方法。对于索引色图像来讲,它是唯一可用的插值方法。当用这种方法实现大倍数放大处理时,在图像中会明显看出块状效应。

b.双线性插值

 技术分享

Eg.已知的红色数据点与待插值得到的绿色点.

已知函数f在Q11 = (x1,y1)、Q12 = (x1,y2),Q21 = (x2,y1) 以及Q22 = (x2,y2) 四个点的值,求f在点P= (x,y) 的值,看下图。

首先在x方向进行线性插值,得到R1和R2,然后在y方向进行线性插值,得到P.这样就得到所要的结果f(x,y).其中红色点Q11,Q12,Q21,Q22为已知的4个像素点.

第一步:X方向的线性插值,在Q12,Q22中插入蓝色点R2,Q11,Q21中插入蓝色点R1;

第二步 :Y方向的线性插值 ,通过第一步计算出的R1与R2在y方向上插值计算出P点。

c.双三次插值

双三次插值是一种更加复杂的插值方式,它能创造出比双线性插值更平滑的图像边缘,其插值邻域的大小为 4×4。为了计算(u0 ,v0 )  点的像素值,采用双三次插值法的示意图技术分享

第一步,在四条水平直线上分别用三次多项式插值计算点 a、b、c、d 处的灰度值;

第二步,对 a、b、c、d4 点在垂直方向上再做 3 次多项式内插,得到(u0 ,v0 ) 点的像素值。

 

 

4. 图像缩放----imresize

imresize 函数的语法格式为:

    B = imresize(A, m)

    B = imresize(A,m, method)

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

    B = imresize(?,method, n)

    B = imresize(?,method, h)

  这些语句的功能就是按照指定的放大倍数和插值方法等参数将图像A缩放成图像B。其中,参数 m 表示放大倍数,参数 method 表示选用的插值方法,其可选值为 nearest(最近邻插值)、bilinear(双线性插值)和 bicubic(双三次插值)。

  B=imresize(?,method, n)语句在 imresize 函数中引入了一个表征滤波器大小的整数作为参数。在使用双线性插值和双三次插值法缩小图像时,为消除引入的高频成分,imresize 在插值之前使用一个低通滤波器来减弱混叠现象,n 就是这个低通滤波器的大小,表示 n×n 的窗口,默认值为 11×11。如果 n 取值为 0,则表示忽略滤波步骤。 

  B=imresize(?,method, h)语句允许用户自行指定滤波器,其中 h 表示一个二维 FIR 滤波器,例如由函数 ftrans2、fwind1、fwind2 或 fsamp2 生成的滤波器结构。

 5.图像旋转----imrotate()

imrotate 的语法格式为:

      B = imrotate(A, angle)

      B = imrotate(A, angle, method)

      B = imrotate(A, angle, method, bbox)

    函数 imrotate 对图像 A 进行旋转得到图像 B,参数 angle 用于指定图像按逆时针方向旋转的角度,参数 method 用于指定插值的方法,可选的值为 nearest(最近邻插值)、bilinear(双线形插值)及 bicubic(双三次插值),默认值为 nearest。一般来说,旋转后的图像会比原图大,超出原图像的部分值为 0。用户也可以指定 crop 参数对旋转后的图像进行剪切(取图像的中间部分),使返回的图像与原图大小相同。

6.图像剪切-----imcrop

   图像处理工具箱提供函数 imcrop 用于剪切图像中的一个矩形子图,用户可以通过参数指定这个矩形顶点的坐标,也可以用鼠标指针选取这个矩形。

imcrop 函数的语法格式为:

       RGB2 = imcrop(RGB,rect)

       [A,rect] = imcrop(?)

     RGB2=imcrop(RGB,rect)按指定的矩形框 rect 剪切图像,rect 是一个四元向量[xmin ymin width height],分别表示矩形的左上角的坐标、宽度和高度。[A,rect]=imcrop(?)和[x,y,A,rect]=imcrop(?)在用户手动选取剪切图像的同时返回剪切框的参数 rect。

例:交互式裁剪

A=imread(‘C:\Users\Administrator\Desktop\picture\1.png‘);

I=imcrop(A);%交互式裁剪

 

2_Matlab图像的空间域变换操作