数字图像处理

数字图像处理的主要两种方法:空域法和频域法;
图像变换主要两种重要方式:图像几何变换(空间变换)和图像正交变换,其中图像几何变换属于空域法。

几何变换

图像几何变换大体包含:刚性变换,仿射变换,透视变换,弹性变换。广义来讲,非线性变换包含投影变换;投影变换包含仿射变换;仿射变换包含刚体变换。 图像几何变换又称为图像空间变换,它将一副图像中的坐标位置映射到另一幅图像中的新坐标位置。我们学习几何变换就是确定这种空间映射关系(即变换矩阵),以及映射过程中的变化参数。其中基础的变换矩阵包含:恒等变换、尺度变换(scaling)、剪切或错切或错位变换(shearing-垂直或水平变换)、旋转变换(rotation)、平移变换(translation)、翻转变换(flip)

刚体变换(rigid transformation)

只改变物体位置,不改变物体形状,即一幅图像中的两点间的距离经变换到另一幅图像中后仍然保持不变。刚体变换仅局限于平移、旋转和反转(镜像)。

仿射变换(affine transformation)

一幅图像中的直线经过后映射到另一幅图像上仍为直线,并且保持平行关系,仿射变换适应于平移、旋转、缩放和反转(镜像)情况。 仿射变换是从一个二维坐标系变换到另一个二维坐标系,属于线性变换,包括旋转,缩放,平移,错切操作。
在这里插入图片描述
通过已知3对坐标点可以求得变换矩阵。所以仿射变换可以由一个矩阵A和一个向量B给出:
在这里插入图片描述
仿射变换的方程组有6个未知数,所以要求解就需要找到3组映射点,三个点刚好确定一个平面。
不同A和B矩阵对应的各种基本仿射变换:
在这里插入图片描述
仿射变换改变物体位置和形状,但保持二维图像的“平直性”和“平行性”:

平直性:直线经仿射变换后还是直线,圆弧经仿射变换后还是圆弧;

平行性:直线之间的相对位置关系保持不变,平行线经仿射变换后依然为平行线,直线上点的位置顺序不会发生变化;

向量间夹角可能会发生变化;

通过仿射变换将图片中的每个像素点按照一定的规律映射到新的位置,仿射变化需要一个转换矩阵。opencv提供了函数 cv2.getAffineTransform(pos1,pos2),根据源图像和目标图像上三个对应的点来自动创建变换矩阵,其输出就是仿射矩阵M,最后这个矩阵会被传给函数 cv2.warpAffine() 来实现仿射变换。

透视变换(perspective transformations)或 投影映射

一幅图像中的直线经过后映射到另一幅图像上仍为直线,但平行关系基本不保持。

透视变换是从一个二维坐标系变换到一个三维坐标系,属于非线性变换。通过已知4对坐标点可以求得变换矩阵。彻底改变物体的位置和形状。
在这里插入图片描述
opencv提供了函数 cv2.getPerspectiveTransform(pos1,pos2),根据源图像和目标图像上四个对应的点来自动创建变换矩阵,其输出就是仿射矩阵M,最后这个矩阵会被传给函数 cv2.warpPerspective() 来实现仿射变换。

弹性变换(elastic transformation)(非线性变换或弯曲变换 curved transformation)

一幅图像上的直线映射到另一幅图像上不一定是直线,可能是曲线。
在这里插入图片描述
弹性变形论文最早是由Patrice等人在2003年ICDAR上发表:《Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis》

具体实现步骤:

对原始图像A进行仿射变换(三点法),得到图像B;

对图像B中的每个像素点随机生成一个在x和y方向的位移,记为Δx和Δy,范围(-1,1),从而得到一个随机位移场(random displacement fields);

生成服从高斯分布的kernal,记为N(0,δ),对上一步生成的随机位移场进行卷积操作;

然后用一个控制因子α,再和卷积操作后的随机位移场相乘,用以控制其变形强度;

最后,将随机位移场施加到图像B上,得到变形后的图像C。具体操作如下:

首先,生成一个和imageB大小一样的meshgrid网格meshB,网格中的每个值就是像素的坐标,比如说meshgrid网格大小为512x512,则meshgrid中的值为(0, 0), (0, 1), …, (511, 0), (511, 511);然后将随机位移场和meshB网格相加,这就模拟了imageB中的每个像素点在经过随机位移场的作用后,被偏移的位置,meshB与随机位移场相加后的结果记做imageC;最后,对其进行双线性插值,得到图像C。

代码如下:
在这里插入图片描述

插值算法

原图变换到对应图像上的方式会有一些没有被填充的点,解决这种问题一般用差值的方式,常见的有最近邻插值法、双线性插值法、双三次插值法、区域插值算法。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值