
一、实验目的
1、理解几何运算的基本概念与定义;
2、掌握在MATLAB中进行插值的方法
3、运用MATLAB语言进行图像的插值缩放和插值旋转。
二、实验原理
插值是常用的数算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。
最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。该算法的数学表示为:
如果
最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。不过,当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。
双线性插值法的输出像素值是它在输入图像中2×2领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。
设,和是要插值点的坐标,则双线性插值的公式为:
双三次插值的插值核为三次函数,其插值邻域的大小为4×4。它的插值效果比较好,但相应的计算量也比较大,在这里不做讨论。
1、图像的缩放
imresize函数的语法格式为:B = imresize(A, m, method)
2、图像的旋转
imrotate的语法格式为:B = imrotate(A, angle, method)
三、实验内容及要求
1.读出图像并显示。
2.将图像放大1.5倍,插值方法使用三种不同方法,显示放大后的图像,比较不同插值方法的结果有什么不同。将图像放大到其它倍数,重复实验;选用其它图像,重复实验。
程序:
figure(1),imshow(A),title('原图像');
B=imresize(A,1.5,'nearest');
figure(2),imshow(B),title('最邻近法');
C=imresize(A,1.5,'bilinear');
figure(3),imshow(C),title('双线性插值');
D=imresize(A,1.5,'bicubic');
figure(4),imshow(D),title('双三次插值');
改变图像,改变放大倍数:
figure(1),imshow(A),title('原图像');
B=imresize(A,2,'nearest');
figure(2),imshow(B),title('最邻近法');
C=imresize(A,2,'bilinear');
figure(3),imshow(C),title('双线性插值');
D=imresize(A,2,'bicubic');
figure(4),imshow(D),title('双三次插值');
3.图像缩小0.8、0.5倍,插值方法使用三种不同方法,显示并比较结果有什么差异。
缩小0.8倍:
figure(1),imshow(A),title('原图像');
B=imresize(A,0.8,'nearest');
figure(2),imshow(B),title('最邻近法');
C=imresize(A,0.8,'bilinear');
figure(3),imshow(C),title('双线性插值');
D=imresize(A,0.8,'bicubic');
figure(4),imshow(D),title('双三次插值');
缩小0.5倍:
figure(1),imshow(A),title('原图像');
B=imresize(A,0.5,'nearest');
figure(2),imshow(B),title('最邻近法');
C=imresize(A,0.5,'bilinear');
figure(3),imshow(C),title('双线性插值');
D=imresize(A,0.5,'bicubic');
figure(4),imshow(D),title('双三次插值');
4.图像分别顺时针旋转30度、45度,插值方法使用三种不同方法,显示旋转后的图像并比较结果有什么不同。
旋转30度:
figure(1),imshow(A),title('原图像');
B=imrotate(A,150,'nearest');
figure(2),imshow(B),title('最邻近法');
C=imrotate(A,150,'bilinear');
figure(3),imshow(C),title('双线性插值');
D=imrotate(A,150,'bicubic');
figure(4),imshow(D),title('双三次插值');
旋转45度:
figure(1),imshow(A),title('原图像');
B=imrotate(A,135,'nearest');
figure(2),imshow(B),title('最邻近法');
C=imrotate(A,135,'bilinear');
figure(3),imshow(C),title('双线性插值');
D=imrotate(A,135,'bicubic');
figure(4),imshow(D),title('双三次插值');
5.(选做内容)用Matlab语言直接编程实现图像的缩放,插值方法采用最近邻插值或双线性插值法。
最邻近程序:
k=2;
figure(1),imshow(F,MAP)
[m,n]=size(double(F));
for i=1:round(k*m)
end;
g=uint8(G);
figure(2),imshow(g,MAP);
