图像插值方法

来源:互联网 发布:时间碎片软件 编辑:程序博客网 时间:2024/05/16 06:50

一、图像插值
所谓图像插值就是一个图像数据的再生过程,利用己知采样点的灰度值计未知采样点的灰度值,在给定的空间范围内,从有限的离散采样数据复原出原来连续的图像信号。


1.1怎么理解图像插值
比如,图像放大算法,假设原图像是mXn大小,现在我们扩大两倍,一种简单的方法是,我们假想一个2mX2n大小的网格,它与原图像有相同大下的间隔,然后将其收缩,使其准确的跟原图像匹配,当然收缩后的图像网格间隔要小于与图像的间隔,那么肯定有些点不能与原图像像素点有对应,为了对覆盖的每一个点赋予灰度值,我们在原图像中,寻找最接近的像素,并把其赋给2mX2n网格中的新像素,当我们对所有的像素点都赋予灰度值后,即2mX2n个点都被赋予像素值后,就把图像扩展到原来规定的大小,得到放大的图像;
简单来说,就是补充数据


1.2 常用的图像插值方法
最近邻(nearestneighbor)插值是最简便的插值算法,它以插值像素点周围离最近的己知像素的灰度值作为插值像素点的灰度值,所以又称为像素复写印ixrePlication)或零阶保持(zero一orderholding)插值。
最近邻插值运算简单快速,能够保持插值图像边缘的清晰,但边缘轮廓出显著的锯齿现象,图像背景产生马赛克,形成伪边缘,视觉效果差,重构误大。
作为对最近邻点法的一种改进,这种方法是“利用周围4个邻点的灰度值在两个方向上作线性内插以得到待采样点的灰度值”,即根据待采样点与相邻点的距离确定相应的权值计算出待采样点的灰度值。
双线性内插法由于考虑了待采样点周围四个直接邻点对待采样点的影响,因此基本克服了前者灰度不连续的缺点,其计算量有所增大。但进一步看,由于此方法仅考虑四个直接邻点灰度值的影响,而未考虑到各邻点间灰度值变化率的影响,
因此具有低通滤波器的性质,使缩放后图像的高频分量受到损失,图像的轮廓变得较模糊。用此方法缩放后的图像与原图像相比,仍然存在由于计算模型考虑不周而产生的图像质量退化与精度降低的问题


二、几何变换
一个空间变换需要两个独立的算法首先,需要一个算法来定义几何变换本身,用来描述每个像素如何从其初始位置移动到终止位置,即每个像素的运动。同时,还需要一个用于灰度插值的算法,即对空间变换后的像素赋予灰度值

三、常见操作
3.1 图像的缩放
matlab中可以用imresize函数对图像进行缩放,使用形式:
imresize(A,n)A为图像,n为放大倍数。
imresize(A,[n,m])把原有的图像放大为行列分别为n,m的图像。
三种插值方法:
1.最近邻插值法:是imreseze默认的方法,
2.双线性插值方法:格式:imresize(A,n,’bilinear’).
3.双立方插值方法:格式:imresize(A,n,’bicubic’).

clear;clc;close all;f=imread('lenna.bmp');f=rgb2gray(f);[m,n]=size(f);X=1:m;Y=1:n;[X,Y]=meshgrid(X,Y);%生成网格矩阵X1=1:0.5:m;Y1=1:0.5:n;[X1,Y1]=meshgrid(X1,Y1);生成网格矩阵J=interp2(X,Y,f,X1,Y1,'nearest');进行插值运算figure,imshow(f)figure,imshow(J)

3.2图像的旋转
一般的格式为:imrotate(A,Angle,Method,Bbox).
Angle:旋转地角度,
Method:为插值的方法,nearest、bilinear、bicubic
Bbox:loose和crop

3.3图像的裁剪
使用imcrop函数对图像进行裁剪操作,
imcrop(A,[80,120,100,50]);
[80,120,100,50]的含义是,以图像的(80,,10)点位裁剪矩形的左上角坐标,裁剪的宽度是100,高度是50。

3.4图像的几何变换
图像二维仿射变换MATLAB使用imtransform函数完成图像空间变换。
imtransform(A,T)
A:是要变换的图像
T:是由makeform函数产生的变换结构.
在maketform(‘P’,……)函数中,
参数P:
affine:仿射变换形式。
projective:投影变换形式;
cusyom:自定义函数变换;
box:利用函数中的另外参数产生仿射变换结构;
composite:该参数是实现多次调用tformfwd功能;

I=imread('peppers.png'); Ta = maketform('affine', ...[cosd(30) -sind(30) 0; sind(30) cosd(30) 0; 0 0 1]');% 创建旋转参数结构体Ia = imtransform(I,Ta); %实现图像旋转  Tb = maketform('affine',[5 0 0; 0 10.5 0; 0 0 1]'); %创建缩放参数结构体Ib = imtransform(I,Tb);%实现图像缩放  
0 0