资源描述:
《数字图像处理实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验三图像的几何运算实验目的1、理解几何运算的基本概念与定义;2、掌握在MATLAB中进行插值的方法3、运用MATLAB语言进行图像的插值缩放和插值旋转。实验原理几何运算可改变图像中各物体之间的空间关系。这种运算可以被看成是将(各)物体在图像内移动。一个几何运算需要两个独立的算法。首先,需要一个算法来定义空间变换本身,用它来描述每个像素如何从其初始位置“移动”到终止位置,即每个像素的“运动”。同时,还需要一个用于灰度插值的算法,这是因为,在一般情况下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过来也如
2、此。因此插值就是对变换之后的整数坐标位置的像素值进行估计。MATLAB提供了一些函数实现这些功能。插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。该算法的数学表示为:如果最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。不过,当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。双线
3、性插值法的输出像素值是它在输入图像中2×2领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。设,和是要插值点的坐标,则双线性插值的公式为:把按照上式计算出来的值赋予图像几何变换对应于处的像素,即可实现双线性插值。双三次插值的插值核为三次函数,其插值邻域的大小为4×4。它的插值效果比较好,但相应的计算量也比较大,在这里不做讨论。1、图像的缩放MATLAB图像处理工具箱中的函数imresize可以用上述的三种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。imresize函数的语
4、法格式为:B=imresize(A,m,method)这里参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。B=imresize(A,m,method)返回原图像A的m倍放大的图像(m小于1时效果是缩小)。例:I=imread('ic.tif');J=imresize(I,1.25);imshow(I),title('原图像')figure,imshow(J),title('放大后的图像')2、图像的旋
5、转在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值法。imrotate的语法格式为:B=imrotate(A,angle,method)函数imrotate对图像进行旋转,参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后的图像会比原图大,超出原图部分值为0。例:I=imread('rice.tif');J=imrotate(I,30,'bi
6、linear');imshow(I);title('原图像')figure,imshow(J);title('旋转后的图像')实验内容及要求1.读出lena.tif图像并显示。2.将图像放大1.5倍,插值方法使用三种不同方法,显示放大后的图像,比较不同插值方法的结果有什么不同。将图像放大到其它倍数,重复实验;选用其它图像,重复实验。clear,clccloseallf=imread('C:DocumentsandSettingsAdministrator桌面文件接收柜lena.tif');A=imresize(f,1
7、.5,'nearest');B=imresize(f,1.5,'bilinear');C=imresize(f,1.5,'bicubic');imshow(f),title('原图像')figure,imshow(A),title('nearest放大后的图像')figure,imshow(B),title('bilinear放大后的图像')figure,imshow(C),title('bicubic放大后的图像')Nearest放大图像像素很低又轻微马赛克;Bilinear放大图无马赛克但比原图像素低;Bicubic放大图
8、和原图一样基本无差别放大很精确。2.图像缩小0.8、0.5倍,插值方法使用三种不同方法,显示并比较结果有什么差异。3.图像分别顺时针旋转30度、45度,插值方法使用三种不同方法,显示旋转后的图像并比较结果有什么不同。clear,clccloseallI=imread('C: