图像的缩放(scale),旋转(rotation),错切(shear)操作

接着上次的平移和镜像操作,这次是缩放、旋转和错切操作。

话说我还从来没在blog中放过图片 = =。这次顺便试一下。所以先放出程序处理后的效果图(顺便把前面的镜像操作的结果也放一下)。


首先是作为程序输入的input.bmp图像:





然后是旋转45度的结果(程序中可任意选择旋转角度):





按X轴镜像后的结果(可选X或Y):




按X轴错切20度以后的结果(可选X或Y,可选角度0~45度):





然后是X方向放大两倍,Y方向不变的结果(可任意选择各个方向的缩放倍数,但偏差太大的话图像效果不好):





在这篇blog里面我就不放完整的代码了。。因为写的太丑。。这五个操作全放在一起写了500多行,太长了。

有需要源码的话可以到这里免费下载:http://download.csdn.net/detail/frozenshore/9351509



主要讲一下思路吧,前面也说过,平移和镜像操作比较简单,因为无需考虑插值(interpolation)。然而如果在缩放、旋转操作中不进行插值的话,那么图像就会出现许多空点,比如像是这样




而计算插值有许多方法,比如最邻近插值、双线性插值、RBF插值等等。在这里我用的是双线性插值,因为效果尚可且操作简单。原理如下:


也就是说,针对点P,寻找四周有值的四个点,然后计算他们的灰度值(在RGB中分别计算三通道),解方程即可。在实际操作中,可以先计算出水平方向的中间点(上图的R,Q点)再计算P点。


再说各个操作的原理。

图象变化其实都是对每个像素点进行变换。都可以用矩阵的形式来表达。设某个像素点转变前的坐标为(x, y),转变后的坐标为(x’, y’),那么对于translation来说,矩阵坐标变换是如下这样的:



mirror操作的变换是这样的:


其中,当sx=1,sy = -1的时候就是针对x轴做镜像变换,反之则是对Y轴做镜像变换


scale操作的变换是这样的:


c, d两个值可任选,当然做完scale以后要记得interpolation


rotation:


就是根据旋转角度进行三角变换,同样需要interpolation


而shear就是以某一系数对单方向的像素点进行变换,例如如果针对X轴做变换的话就是这样:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值