插值算法
输出像素一个一个地映射回输入图像。如果一个输出像素映射到输入图像中的采样栅格的整数坐标处的像素点,此时其灰度值就需要基于整数坐标的灰度值进行推断,这就是插值。
最近邻插值
输出像素的值为输入图像中与其最邻近的采样点的像素值。
双线性插值
是用四个点加权平均得到的灰度值的值,作为输出像素灰度值。
高阶插值
双线性插值的平滑效果会使图像的细节退化,而其斜率的不连续性会导致变换产生不希望的结果。高阶插值常用卷积来实现,输出像素的值为输入图像中距离他最近的4x4领域内采样点像素值的加权平均值。
代码实现
a=imread('rectangle.bmp');
b=imrotate(a,30,'nearest');%最近邻插值
c=imrotate(a,30,'bilinear');%双线性插值
d=imrotate(a,30,'bicubic');%三次插值
figure;
subplot(2,2,1);imshow(a);
subplot(2,2,2);imshow(b);
subplot(2,2,3);imshow(c);
subplot(2,2,4);imshow(d);
可以较明显地看出,使用最近邻插值法后,纯白图像与黑色背景相接处地锯齿,要比其他两种插值算法的边缘粗糙。
图像配准
简单地说就是按照基准图像和原图像中作对应点,完成四个点后即可实现图像的转换的对应。
clear;
lin=imread('face.jpg');
lbase=imread('2.jpg');
[height,width,dim]=size(lin);
tform=maketform('affine',[1 0 0;0 -1 0;0 height 1;]);
c=imtransform(lin,tform,'nearest');%先把图像竖直镜像,以便观察效果
figure;
subplot(1,2,1);imshow(c);
subplot(1,2,2);imshow(lbase);
cpselect(c,lbase);%交互式选择基准点
依次按照基准图像的顺序选择图像对应的点,然后将变量输出到工作空间。键入以下代码
tform=cp2tform(fixedPoints,movingPoints,'affine');%仿射变换模型
iout=imtransform(c,tform);%进行变换,从而实现配准
figure;
subplot(1,2,1);imshow(iout);
subplot(1,2,2);imshow(lbase);