我需要编写一个程序,使用矩阵乘法来旋转图像(一个简单的正方形),基于正方形的中心,根据我的需要旋转一定的度数。对此的任何帮助将不胜感激。我几乎不知道自己在做什么,因为我没有看过微积分。
3 回答
看看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# 进行数字运算并不是很好。但是有一些方法可以解决它。
这是一篇很好的代码项目文章,讨论了您想要的内容:
http://www.codeproject.com/KB/GDI-plus/matrix_transformation.aspx
在平面中旋转数字图像归结为许多 2X2 矩阵乘法。这里不涉及微积分!您不需要整个图像处理框架来旋转方形图像 - 除非这在图像质量和速度方面对性能非常敏感。
去阅读维基百科关于旋转矩阵的文章的前半部分,这应该会让你有一个好的开始。
简而言之,确定您的原点(如果您要旋转的地方可能是图像的中心),然后在像素空间中计算您要旋转的像素的坐标,并乘以您的旋转矩阵(参见文章.)。完成乘法后,您将获得像素空间中像素的新坐标。在另一个图像缓冲区中写出该像素,您将关闭并旋转。重复。请注意,一旦您知道旋转角度,您只需要计算一次旋转矩阵!
玩得开心,
保罗