转载来源:http://m.blog.csdn.net/blog/u010141025/17660559 1.1图像的裁剪: 在实际应用或科研领域,很多时候要对图像裁剪操作。图像裁剪就是在源图像或者大图像中裁剪图像块来,这个图像块一般是多边形的。图像裁剪是图像处理中最基本的操作之一。 使用imcrop函数对图像进行裁剪操作,然后制作出动画效果,该函数有两个参数,一个用来指定裁剪的图像,另一个用来指定裁剪矩形。一般格式如下: imcrop(A,[80,120,100,50]); [80,120,100,50]的含义是:以图像的(80,,10)点位裁剪矩形的左上角坐标,裁剪的宽度是100,高度是50。 用roipoly函数进行多边形区域的裁剪, roipoly(A,c1,c2);c1,c2定义区域的向量。 1.2图像的缩放: 在图像缩放过程中,涉及图像数据的删除与增加。特别是图像放大的时候需要考虑如何自傲扩大后的空隙中加入新的图像颜色数据。增加颜色数据的方法主要根据周围相近像素的颜色值进行插值计算。 使用imresize函数缩放图像.形式为:imreseze(A,n)A为图像,n为放大倍数。 另外一种是:imreseze(A,[n,m])把原有的图像放大为行列分别为n,m的图像。 三种插值方法: 1.最近邻插值法:是imreseze默认的方法, 2.双线性插值方法:格式:imreseze(A,n,'bilinear'). 3.双立方插值方法:格式:imreseze(A,n,'bicubic'). 1.3图像的选转: 使用imrotate函数进行图像的旋转。 一般的格式为:imrotate(A,Angle,Method,Bbox). Angle:旋转地角度,Method:为插值的方法,可以在,nearest、bilinear、bicubic中选着,Bbox为loose是底板放大,显示整个图形,导致图形变小是默认的情况,为crop时旋转图形的底板不变图形可能被切割,一般使用crop形式。 2.1图像的几何变换 图像二维仿射变换MATLAB使用imtransform函数完成图像空间变换。 格式imtransform(A,T)。 其中参数A是要变换的图像,T是由makeform函数产生的变换结构. 在maketform('P',......)函数中,参数P可以议一下 形式: affine:仿射变换形式。 projective:投影变换形式; cusyom:自定义函数变换; box:利用函数中的另外参数产生仿射变换结构; composite:该参数是实现多次调用tformfwd功能; maketform:函数就是利用给定的参数建立变换结构,然后把该变换结构赋予结构变量T。根据得到的结构体变量T,调用imtransform(A,T)函数进行变换。 3:图像的领域操作 领域操作指在图像处理时,处理像素的某领域内各个像素值,输出要处理的像素的新值。领域财政是图像处理(例如图像增强、图像滤波等)时经常用到的操作方法。使用该方法处理图像时一般使用算子模板进行再图像上滑动,划定的时候对模板进过区域进行运算,把计算的结果作为区域中心像素的新值,所以有时领域操作也称为划定领域操作。领域操作方法充分地领用了图像相领像素间的颜色关系,利用相邻像素间的颜色分布对图像进行平滑、增强、边缘提取、滤波、恢复等操作。 |
空间几何变换
将(w,z)坐标系上的图像变换为(x,y)坐标系上的图像,可以表示为: (x,y) = T{(w,z)}
比如:
(x,y) = T{(w,z)} = (w/2, z/2)
仿射变换
仿射变换是一种常用矩阵变换,它可以表示成矩阵的形式:
注意:
(1)上图Scaling中,如果A图宽高位(w1,h1)。现在要求将A图缩放为宽高为(w2,h2)的B图。那如何分别求宽高的缩放率呢?其实可以根据Scaling中的公式。既然知道A和B图的宽高,即知道了图像右下角的坐标(w1,h1)和(w2,h2).所以sx=w2/w1;sy=h2/h1。
(2)
在matlab里面实现
wz = [3 4 1]; T = [2 0 0; 0 3 0; 0 0 1]; xy = wz * T; wz = xy * inv(T);
为了避免归一化参数,我们可以借助maketform函数:
T = [2 0 0; 0 3 0; 0 0 1]; tform = maketform('affine', T); wz = [1 2; 3 4]; xy = tformfwd(wz, tform); wz = tforminv(xy, tform);
我们可以用一个栅格图像来形象的表示这些变换的效果:
这些变换使用的变换矩阵分别是:
对图像应用空间变换
有两种方法:正向映射和反向映射
反向映射的过程是:对每一个输出像素,计算它在输入图像上的位置,根据输入图像上该位置附近的像素值决定输出像素的值。
在matlab中,简单的变换可以直接用单个函数实现。
图像缩放使用:
g = imresize(f, scale); g = imresize(f, [ROW COL]);
图像旋转使用:
g = imrotate(f, angle);
图像剪切使用:
g = imcrop(f, [X, Y, WIDTH, HEIGHT]);
在matlab中使用imtransform实现图像的空间变换。语法是
g = imtransform(f, tform, interp);
其中,interp可以是'nearest','bilinear'或者'bicubic'。
比如:
f = chekerboard(50); s = 0.8; theta = pi/6; T = [s*cos(theta) s*sin(theta) 0; -s*sin(theta) s*cos(theta) 0; 0 0 1]; tform = maketform('affine', T); g = imtransform(f, tform);
双线性滤波:
图像配准
根据两幅图像,算出一个变换参数,使得一幅图像经过这样的变换后和另一图像接近