【问题标题】:Matrix Multiplication To Rotate An Image In C#矩阵乘法在 C# 中旋转图像
【发布时间】:2009-10-28 02:06:32
【问题描述】:

我需要编写一个程序,使用矩阵乘法来旋转图像(一个简单的正方形),基于正方形的中心,根据我的需要旋转一定的度数。对此的任何帮助将不胜感激。我几乎不知道自己在做什么,因为我没有看过微积分。

【问题讨论】:

  • 您需要的实际上是线性代数,而不是微积分;)

标签: c# matrix rotation multiplication calculus


【解决方案1】:

看看http://www.aforgenet.com/framework/。这是我在项目中使用的完整的 C# 图像处理框架。我刚刚检查了他们的帮助,他们有一个功能可以满足您的需求-

// create filter - rotate for 30 degrees keeping original image size
RotateBicubic filter = new RotateBicubic( 30, true );
// apply the filter
Bitmap newImage = filter.Apply( image );

这是一个 LGPL 库,所以如果许可是一个问题,如果你链接到他们的二进制文件,你不会有任何问题。他们也是那里的其他图书馆。

如果您决定自己编写,请注意速度,因为 C# 进行数字运算并不是很好。但是有一些方法可以解决它。

【讨论】:

  • 谢谢,这可能是我需要的。这是一个非常大的学校项目的一小部分,所以没有问题:)
  • 如果操作正确,C# 可以非常有效地处理数字。在数值计算应用程序中,通常是在 C# 中复制向量和矩阵会损害性能,而不是 C# 的任何潜在问题。
【解决方案2】:

这是一篇很好的代码项目文章,讨论了您想要什么:

http://www.codeproject.com/KB/GDI-plus/matrix_transformation.aspx

【讨论】:

    【解决方案3】:

    在平面中旋转数字图像归结为大量 2X2 矩阵乘法。这里不涉及微积分!您不需要整个图像处理框架来旋转方形图像 - 除非这在图像质量和速度方面确实对性能非常敏感。

    去阅读维基百科的前半部分article 关于旋转矩阵,这应该会让你有一个好的开始。

    简而言之,确定您的原点(如果您要旋转的地方可能是图像的中心),然后在像素空间中计算您要旋转的像素的坐标,并乘以您的旋转矩阵(见文章。)。完成乘法后,您将获得像素空间中像素的新坐标。在另一个图像缓冲区中写出该像素,您将关闭并旋转。重复。请注意,一旦您知道旋转角度,您只需要计算一次旋转矩阵!

    玩得开心,

    保罗

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 2013-03-26
      • 1970-01-01
      • 2018-04-11
      • 2012-08-11
      • 1970-01-01
      • 2016-07-11
      相关资源
      最近更新 更多