实验三 图像的几何运算实验目的1、 理解几何运算的基本概念与定义;2、 掌握在MA TLAB 中进行插值的方法3、 运用MATLAB 语言进行图像的插值缩放和插值旋转。
实验原理几何运算可改变图像中各物体之间的空间关系。
这种运算可以被看成是将(各)物体在图像内移动。
一个几何运算需要两个独立的算法。
首先,需要一个算法来定义空间变换本身,用它来描述每个像素如何从其初始位置“移动”到终止位置,即每个像素的“运动”。
同时,还需要一个用于灰度插值的算法,这是因为,在一般情况下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过来也如此。
因此插值就是对变换之后的整数坐标位置的像素值进行估计。
MATLAB 提供了一些函数实现这些功能。
插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。
最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。
该算法的数学表示为:()()k f x f x = 如果1111()()22k k k k x x x x x -++<<+ 最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。
不过,当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。
双线性插值法的输出像素值是它在输入图像中2×2领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。
设''''1,1,,m i m n j n a i m b j n <<+<<+=-=-,'i 和'j 是要插值点的坐标,则双线性插值的公式为:''(,)(1)(1)(,)(1)(1,)(1)(,1)(1,1)g i j a b g m n a b g m n a bg m n abg m n =--+-++-++++把按照上式计算出来的值赋予图像几何变换对应于''(,)i j 处的像素,即可实现双线性插值。
双三次插值的插值核为三次函数,其插值邻域的大小为4×4。
它的插值效果比较好,但相应的计算量也比较大,在这里不做讨论。
1、图像的缩放MATLAB图像处理工具箱中的函数imresize可以用上述的三种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。
imresize函数的语法格式为: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、图像的旋转在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值法。
imrotate的语法格式为:B = imrotate(A, angle, method)函数imrotate对图像进行旋转,参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。
一般说来旋转后的图像会比原图大,超出原图部分值为0。
例:I = imread('rice.tif');J = imrotate(I, 30, 'bilinear');imshow(I); title('原图像')figure, imshow(J); title('旋转后的图像')实验内容及要求1.读出lena.tif图像并显示。
2.将图像放大1.5倍,插值方法使用三种不同方法,显示放大后的图像,比较不同插值方法的结果有什么不同。
将图像放大到其它倍数,重复实验;选用其它图像,重复实验。
clear,clcclose allf=imread('C:\Documents and Settings\Administrator\桌面\文件接收柜\lena.tif');A = imresize(f, 1.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 放大图和原图一样基本无差别放大很精确。
3.图像缩小0.8、0.5倍,插值方法使用三种不同方法,显示并比较结果有什么差异。
4.图像分别顺时针旋转30度、45度,插值方法使用三种不同方法,显示旋转后的图像并比较结果有什么不同。
clear,clcclose allI=imread('C:\Documents and Settings\Administrator\桌面\文件接收柜\lena.tif');E = imrotate(I, 30, 'nearest');F= imrotate(I, 30, 'bilinear');G = imrotate(I, 30, 'bicubic');imshow(I); title('原图像')figure, imshow(E); title('nearest 旋转后的图像') figure, imshow(F); title('bilinear 旋转后的图像') figure, imshow(G); title('bicubic 旋转后的图像')实验四 图像的空域滤波实验目的1、理解图像滤波的基本定义及目的;2、掌握空域滤波的基本原理及方法;3、掌握用MA TLAB 语言进行图像的空域滤波的方法。
实验原理1、均值滤波均值滤波是在空间域对图像进行平滑处理的一种方法,易于实现,效果也挺好。
设噪声η(m,n)是加性噪声,其均值为0,方差(噪声功率)为σ2,而且噪声与图像f (m,n)不相关。
其有噪声的图像f ’(m, n)为:'(,)(,)(,)f m n f m n m n η=+ (4.1)经均值滤波处理后的图像g (m, n)为:(,)(,)(,)(,)1111(,)'(,)[(,)(,)](,)(,)i j si j si j si j sg m n f i j f i j i j f i j i j N N N Nηη∈∈∈∈==+=+∑∑∑∑∑∑∑∑ (4.2) 其中s 是(m, n )点的领域内的点集。
除了对噪声有上述假定之外,该算法还基于这样一种假设:图像是由许多灰度值相近的小块组成。
这个假设大体上反映了许多图像的结构特征。
(4.2)式表达的算法是由某像素领域内各点灰度值的平均值来代替该像素原来的灰度值。
可用模块反映领域平均算法的特征。
对于四点领域和八点领域,可分别由下述摸板表征:11005010111111155550101005M ⎛⎫ ⎪⎛⎫ ⎪⎪⎪== ⎪ ⎪ ⎪ ⎪⎝⎭ ⎪ ⎪⎝⎭(4.3)211199911111111119999111111999M ⎛⎫ ⎪⎛⎫ ⎪⎪⎪== ⎪ ⎪⎪ ⎪⎝⎭ ⎪ ⎪⎝⎭(4.4)模版沿水平和垂直两个方向逐点移动,相当于用这样一个模块与图像进行卷积运算,从而平滑了整幅图像。
模版内各系数和为1,用这样的模版处理常数图像时,图像没有变化;对一般图像处理后,整幅图像灰度的平均值可不变。
2、中值滤波中值滤波是一种非线性处理技术,能抑制图像中的噪声。
它是基于图像的这样一种特性:噪声往往以孤立的点的形式出现,这些点对应的象素很少,而图像则是由像素数较多、面积较大的小块构成。
下面举一个均值滤波的例子:I=imread(‘rice.tif ’);J=imnoise(I, ‘salt&pepper ’, 0.02); h=fspecial(‘average ’, 3);I2=filter2(h, J); % 本句也可改写为:I2 = imfilter(J, h); subplot(1,3,1), imshow(I), title(‘原图像’); subplot(1,3,2), imshow(J), title(‘加噪声图像’); subplot(1,3,3), imshow(I2, [ ]), title(‘均值滤波后图像’);(注意“imshow(I2, [ ])”中的参数“[ ]”!它表示由程序自动调整图像数据的类型与范围,以便正确显示图像)程序执行的结果如图:在MA TLAB图像处理工具箱中,提供了medfilt2函数用于实现中值滤波。
medfilt2函数的语法格式为:B = medfilt2(A) %用3×3的滤波窗口对图像A进行中值滤波。
B = medfilt2(A,[m n]) %用指定大小为m×n的窗口对图像A进行中值滤波。
以下举例说明:I=imread(‘rice.tif’);J=imnoise(I, ‘gaussian’, 0.02);I2=medfilt2(J, [3, 3]);subplot(1,3,1), imshow(I), title(‘原图像’);subplot(1,3,2), imshow(J), title(‘加噪声图像’);subplot(1,3,3), imshow(I2), title(‘中值滤波后图像’);运行的结果如图;实验要求1、读出“lena.tif”这幅图像。