数字图像处理与机器视觉-5-图像几何变换(1)


首先明确一点,图像几何变换不改变像素的值。例如,平移,旋转,镜像等。但是也会遇到特殊情况 ,比如旋转角度不是90°的整数倍,会出现原图像素在新图中没有位置(映射后位置不为整数),这时候还需要用插值法来补充。

几何变换过程可以概括为:



其中x和y坐标映射关系分别为:


假设原图为I,变换后的图为J,新图J中的点(x1,y1),算法大概原理是:

1.确定变换后新图J的尺寸(w,h);
2.通过逆变换求得新图中点(x1,y1)在原图中对应的点(x0,y0),需要注意的是,逆变换后的点坐标可能不是整数,需要通过插值转换成整数;
3.判断(x0,y0)是否在原图区域内,如果在,则将I(x0,y0)的像素值赋给J(x1,y1);不在则直接将J(x1,y1)赋为(0,0);

下面来见识下图像变换里最最基础的变换

图像平移

这个应该是几何变换中最简单了,不用考虑变换后像素点坐标不为整数的情况,变换函数为:


矩阵变换:

木有接触过 灰度形态学,书上的方法先不管了,有兴趣的可以敲下书上示例代码;

按照之前的变换算法,MATLAB实现如下:

function O = translate(I,x,y)
%translate image I 
%   Detailed explanation goes here

[m,n] = size(I);

O = zeros(m,n);

for i = 1 : m
    for j = 1 : n
        if i - x > 0 && i - x < m + 1 && j - y > 0 && j - y < n + 1
            O (i,j) = I(i - x, j - y);
%         else  %这里默认超过边界的像素为0,黑色
%             O (i,j) = 0;
%         end
    end
end

O = uint8(O);

end
上效果图:


图像镜像

分为水平镜像和垂直镜像,话不多说,直接上矩阵表达式:



MATLAB实现:

imtransform 用于一般的二维空间变换

B = imtransform(A, TFORM,method);

TFORM是具体的变换类型, method是选择变换后用哪种插值方法

定义变换类型的函数为,T = maketform(transformtype,Matrix);

transformtype有如下几个选项(参见'maketform'函数用法)

'affine':在二维或n维仿射变换,什么是仿射变换,可以理解为线性变换+平移;变换前是直线的,变换后依然是直线,并且比例保持不变。参考 如何通俗的讲解仿射变换

'projective':在二维或n维投影变换;

'custom':用户自定义变换;

'box':每个维度的独立仿射变换(平移和缩放);

'composite':任意多个基本变换的组合;

效果图:


总的来说,平移和镜像变换都比较简单,理解起来没有什么难度,就是要多熟悉下MATLAB函数和处理方法。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值