图像旋转模糊失真, 求失真最小的算法 或者方安 UP有分

huanyun 2003-11-29 10:01:22
彩色图像 用插值 整个图像就边了
请问高手使用什么方法旋转
...全文
72 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
魔芋 2003-12-03
  • 打赏
  • 举报
回复
用数码相机
101monster 2003-12-03
  • 打赏
  • 举报
回复
顶!呵呵,关注!
andone 2003-12-03
  • 打赏
  • 举报
回复
gz
wangweixing2000 2003-12-03
  • 打赏
  • 举报
回复
gz
s6283 2003-12-03
  • 打赏
  • 举报
回复
我现在用的方法是先插值放大再旋转,效果还可以,不知道谁有更好方法?
abiaozsh 2003-12-03
  • 打赏
  • 举报
回复
basic的代码:

平滑旋转,没有锯齿!!!!

pic(x,y)源图像数组
pic2(x,y)目标图像数组

仅仅是算法,自己再加以改动就可以了

For a = -r1 To r1
For B = -r1 To r1
If a * a + B * B < r2 Then
X = a * Cos(s) + B * Sin(s)
Y = B * Cos(s) - a * Sin(s)

x_big = Int(X) + 1
y_big = Int(Y) + 1
x_sml = Int(X)
y_sml = Int(Y)

temp_color = pic(x_big + wid, y_big + hei)
a_color_r = (temp_color And &HFF)
a_color_g = ((temp_color And 65280) \ &H100)
a_color_b = ((temp_color And &HFF0000) \ &H10000)

temp_color = pic(x_big + wid, y_sml + hei)
b_color_r = (temp_color And &HFF)
b_color_g = ((temp_color And 65280) \ &H100)
b_color_b = ((temp_color And &HFF0000) \ &H10000)

temp_color = pic(x_sml + wid, y_big + hei)
c_color_r = (temp_color And &HFF)
c_color_g = ((temp_color And 65280) \ &H100)
c_color_b = ((temp_color And &HFF0000) \ &H10000)

temp_color = pic(x_sml + wid, y_sml + hei)
d_color_r = (temp_color And &HFF)
d_color_g = ((temp_color And 65280) \ &H100)
d_color_b = ((temp_color And &HFF0000) \ &H10000)

t_color_r = (a_color_r * (Y - y_sml) + b_color_r * (y_big - Y)) * (X - x_sml) + (c_color_r * (Y - y_sml) + d_color_r * (y_big - Y)) * (x_big - X)
t_color_g = (a_color_g * (Y - y_sml) + b_color_g * (y_big - Y)) * (X - x_sml) + (c_color_g * (Y - y_sml) + d_color_g * (y_big - Y)) * (x_big - X)
t_color_b = (a_color_b * (Y - y_sml) + b_color_b * (y_big - Y)) * (X - x_sml) + (c_color_b * (Y - y_sml) + d_color_b * (y_big - Y)) * (x_big - X)
t_color = RGB(t_color_r, t_color_g, t_color_b)

pic2( a + xC, B + yC)= t_color


End If
Next B
Next a
anni 2003-12-03
  • 打赏
  • 举报
回复
听说一定要做三点或更多点的滤波,点越多效果越好,但耗时会更多,需要数字信号处理的知识!!要用到MMX来计算一些转换!
HUNTON 2003-12-01
  • 打赏
  • 举报
回复
虽然不知GDI+是如何实现插值的,但本人提出的三点插值法效果也很好,希望对你有帮助,看看。http://expert.csdn.net/Expert/topic/1979/1979443.xml?temp=.8082392
HUNTON 2003-12-01
  • 打赏
  • 举报
回复
对你的问题用双线性插值比较多。三点插值法只是一个方法,在你这里可能也不是很好用,主要是三点不好取。如果你想试的话就这样取试试:浮点坐标为(x.a,y.b),如果a>=b,则取(x,y),(x+1,y),(x+1,y+1),否则取(x,y),(x,y+1),(x+1,y+1)
huanyun 2003-12-01
  • 打赏
  • 举报
回复
谢谢 HUNTON 给定的一个点 如何得到它的三个顶点?
:)
还有其他的方法没
crazybit 2003-11-30
  • 打赏
  • 举报
回复
你可以看看CXImage的实现,双线性插值算法,但速度和质量比GDI+差的实在是太多了。
huanyun 2003-11-30
  • 打赏
  • 举报
回复
GDI+是怎么样做的呢
Kevin1121 2003-11-30
  • 打赏
  • 举报
回复
关注!
huanyun 2003-11-29
  • 打赏
  • 举报
回复
高手 帮忙啊
huanyun 2003-11-29
  • 打赏
  • 举报
回复
谢谢楼上的patblt()是系统函数
我需要自己处理象素内容 而且要支持1, 4, 8, 16, 24, 32的位图
应该是比较麻烦了
enoloo 2003-11-29
  • 打赏
  • 举报
回复
up.
用双 dc+patblt()
或用 setworldtransform(..),用于矩阵旋转。
我只会这些。
学习...

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧