仿射变换
几何变换会对图像的像素之间的空间关系加以修改,被称为“橡皮布变换”,常常用来实现图像配准。图像配准指的是取两张相同场景的图像并加以对准,从而可以将它们合并,以便目测或者定量比较。
tform 结构和 makeform 函数
tformfwd计算正变换,tforminv计算逆变换
代码示例
% 该代码用到了vistformfwd函数% 定义为function vistformfwd(tform,wdata,zdata,N),N默认值为10。T1 = [3 0 0;0 2 0;0 0 1]; % 水平缩放因子为3,垂直缩放因子为2tform1 = maketform('affine',T1);figure;vistformfwd(tform1,[0 100],[0 100]); % 建立点的栅格结构,使用tformfwd进行变换,显示变换前后图像T2 = [1 0 0;.2 1 0;0 0 1];tform2 = maketform('affine',T2); % 水平剪切figure;vistformfwd(tform2,[0 100],[0 100]);Tscale = [1.5 0 0;0 2 0;0 0 1]; % 缩放Trotation = [cos(pi/4) sin(pi/4) 0;-sin(pi/4) cos(pi/4) 0;0 0 1]; % 旋转Tshear = [1 0 0;.2 1 0;0 0 1]; % 剪切T3 = Tscale * Trotation * Tshear;tform3 = maketform('affine',T3);figure;vistformfwd(tform3,[0 100],[0 100]);
运行结果
图像空间变换
代码示例
% 线性等角变换f = checkerboard(50); % 产生一个一面为8个正方形的测试板,每个的边长均为50s = 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);g1 = imtransform(f,tform); % 双线性插值g2 = imtransform(f,tform,'nearest'); % 最近邻内插,比双线性速度快但效果差g3 = imtransform(f,tform,'FillValue',0.5); % 用于输入图像区域外的像素颜色T2 = [1 0 0;0 1 0;50 50 1];tform2 = maketform('affine',T2); % 纯平移% g4 = imtransform(f,tform2);g5 = imtransform(f,tform2,'XData',[1 400],'YData',[1 400],'FillValue',0.5);subplot(2,3,1);imshow(f);title('原图像');subplot(2,3,2);imshow(g1);title('默认双线性插值');subplot(2,3,3);imshow(g2);title('最近邻内插');subplot(2,3,4);imshow(g3);title('填充图像区域外的像素颜色');subplot(2,3,6);imshow(g5);title('平移,指定输出空间位置');
运行结果
图像配准
代码示例
g = imread('aaa.tif');% 图像bbasepoints = [83 81;450 56;43 293;249 392;436 442];inputpoints = [68 66;375 47;42 286;275 434;523 532];gp = imtransform(g,tform,'XData',[1 502],'YData',[1 502]);imshow(gp); % 图像c
如果觉得《【图像处理】MATLAB:几何变换与图像配准》对你有帮助,请点赞、收藏,并留下你的观点哦!