图象旋转后失真如何解决???

godmangj 2003-07-20 08:48:31
图象在旋转后,由于计算的误差,转化后的点不能与原来的点一一对应,
出现图象的失真,有没有什么算法可以解决?
...全文
1012 19 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
shenghuafen 2003-09-12
  • 打赏
  • 举报
回复
正在学习图像处理,用matlab做了一下处理,觉得蛮有意思的。
ThenLong 2003-09-01
  • 打赏
  • 举报
回复
gz 上面的都是牛人,pf
yyt98032 2003-08-01
  • 打赏
  • 举报
回复
呵呵,我现在在研究这个问题,并且找到了完美的解决方法,几乎就没有变形 。是用的一中全新的算法,没有用插值法
jesjes 2003-07-25
  • 打赏
  • 举报
回复
什么是3点纠正?还有卫片?能不能共享一下你的劳动成果?
liulanghai 2003-07-24
  • 打赏
  • 举报
回复
当然可以,这就是所谓的纠正。我也做完了,假如上面的旋转自由变换做完了,1个小时,这就搞定了,就是界面费点功夫。3点纠正嘛。但是卫片的纠正其实是个很复杂的问题。但都差
不多。
jesjes 2003-07-24
  • 打赏
  • 举报
回复
如果根据一幅参考图像来调整当前图像,存在平移,缩放,旋转,是否还可以这样做呢?
liulanghai 2003-07-22
  • 打赏
  • 举报
回复
哦,对了,你先放大数据,比方说*8000.然后计算旋转结果/8000。即使有误差,也不大了吧。我做的好像没有怎么失真。
liulanghai 2003-07-22
  • 打赏
  • 举报
回复
呵呵,正好碰到我呀,我做了。
双线性和双3次我估计速度上跟不上的,假如你觉得转起来停滞的效果也可以,你可以考虑采用。另外小图像的旋转速度上也是可以接受的。但是略大点图像1024*1024*3的图像,你看看photoshop都不是实时更新的。我觉得小图像的旋转,还是可以接受的,一般的旋转算法就可以了,但略做优化,速度是可以实时的。最好采用对DIB直接旋转成DIB,不要对象素旋转然后
在组成DIB,确定时,重新对像素阵列旋转。大图像比方说100M-800M旋转,你要分块处理,不
然内存和速度都将不许可。图像的数据组织也将影响旋转的算法,思想都差不多。

我做的和photoshop自由变换效果基本一样。

wangweixing2000 2003-07-22
  • 打赏
  • 举报
回复
是真是避免不了的,原理都很简单,这方面的算法也很多自己改进改进!网上到处都是!
寻开心 2003-07-21
  • 打赏
  • 举报
回复
楼主的意思大概是和以前的一个朋友的问题相近。
他是说,把一个图片连续旋转,旋转一圈,回到初始状态,旋转后的图片和最初的图片不一样了。
这个解决方法是,始终保留你的初始图象,旋转都是从初始图象开始。
例如,图象一次旋转45度,第二次旋转90度的操作,不是在第一次旋转45度的基础上再旋转45度,而是在原始图片上直接旋转90度。

至于每次旋转当中的图象的精度的问题,如同Riemann的说法,要保持精度就要使用好的插值办法
jackiesun 2003-07-21
  • 打赏
  • 举报
回复
用matlab的旋转试试。
寻开心 2003-07-21
  • 打赏
  • 举报
回复
其实在图象处理的时候,大多数情形下,都是假定原始图象不是一个离散点图象,而是连续的图象,像素点的颜色表示的是像素点在图象上所占据的矩形区域的中心点的颜色,整个连续图象在两个像素点中间是使用插值方式实现连续的,插值办法就是上面所说的。

无论移动,缩放,还是旋转,确定新图象点的颜色,都是根据新像点矩形在老图象上占据的区域内部的颜色的平均值来确定的。

基本原理就是这样,对于不同的应用有不同的简化方式和处理手段。
寻开心 2003-07-21
  • 打赏
  • 举报
回复
道理相当于新点的位置对应于原始图象的一个位置,可是该位置不是恰好位于像素点上,而是位于四个像素的中间位置,因此需要使用这四个像素的颜色插值来获得。
双线性就是沿着两个互相垂直的方向,都使用线性的插值。
标准的公式,不是上面给的,标准的公式应该是:
C[xi, yi], C[xi+1, yi]之间线性插值得到Cx1
C[xi, yi+1], C[xi+1, yi+1]之间线性插值得到Cx2
上面这两步插值都是使用fx作为插值因子
然后Cx1和Cx2之间再次线性插值,这个步骤使用fy作为插值因子

最终的公式是:
c(x,y) = (1-fy) * ( (1-fx)*c(xi, yi) + fx*c(xi+1, yi) ) +
fy * ( (1-fx)*c(xi,yi+1) + fx*c(xi+1,yi+1) )
这是先X方向后Y方向,也可以倒过来处理,效果不同,差异很小。
寻开心 2003-07-21
  • 打赏
  • 举报
回复
反算
给定一个旋转后的点的坐标Xn,Yn根据反向旋转计算得到在原始图象上的位置Xo, Yo
如果Xo,Yo的坐标非整数,则假定Xo = Xi + fx; Yo = Yi + fy
其中Xi和Yi都是整数,fx和fy都是0到1之间的小数,那么
该点的
颜色数值 C[Xn,Yn] = 1/2* (
C[Xi, Yi]*(1-fx)+ C[Xi+1, Yi]*fx
+ C[Xi,Yi+1]*(1-fy)+ C[Xi+1,Yi+1]*fy
}
kaolaxiong 2003-07-21
  • 打赏
  • 举报
回复
那位高手给段插值算法的代码,参考1下
HUNTON 2003-07-21
  • 打赏
  • 举报
回复
用双线性插值应该比较普遍吧
Riemann 2003-07-20
  • 打赏
  • 举报
回复
PhotoShop哪有那么完美,它也有失真,不过是真度较小罢了。楼主由三次样条插值试试看,应该效果会改善不少。
godmangj 2003-07-20
  • 打赏
  • 举报
回复
插值算法固然可以降低失真,但有没有更完美的算法实现不失真,我看过PhotoShop中的旋转
无论你如何旋转,图象都不会失真!是如何实现的呢?那位高手可以指教?
lsywinn 2003-07-20
  • 打赏
  • 举报
回复
这个问题对于非矢量图肯定是要失真的,不过你可以采用比较好的插值算法来降低失真,一般二次插值和最小二乘法用的比较多,可以查看一些图象处理方面的书籍
发帖
机器视觉

4373

社区成员

图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
帖子事件
创建了帖子
2003-07-20 08:48
社区公告
暂无公告