旋转算法
在旋转前:
(2.12)
如果平面的所有点绕远点逆时针旋转 °,则它的变换公式为:
(2.13)
由此可以推出
= = (2.14)
它的矩阵形式为:
(2.15)
其中,(x,y)为原图坐标,(x^', y^')为旋转后的坐标。它的逆变换公式为:
(2.16)
逆变换用矩阵形式表示为: (2.17)
旋转是围绕坐标轴原点(0,0)进行的,如果是围绕一个指定点(a,b)旋转,则要先将坐标系平移到该点,再进行旋转,然后平移回到新的坐标原点。
同理,旋转后得到的图像像素也有可能在原图像中找不到相应的像素点,因此旋转处理也要用到插值法。由于双线性插值法在图像处理性能上要好过最近邻插值,因此,我们只应用双性插值这一种方法对图像进行旋转处理。
灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像元的个数。确定图像像元的灰度值范围,以适当的灰度间隔为单位将其划分为若干等级,以横轴表示灰度级,以纵轴表示每一灰度级具有的像元数或该像元数占总像元数的比例值,做出的条形统计图即为灰度直方图。
图像的缩放和旋转程序设计
Bitmap类、BitmapData类和Graphics类是C#图像处理中最重要的3个类,如果要用C#进行图像处理,掌握了这3个类就掌握了C#图像处理的基本方法,为以后编写更复杂的数字图像处理算法打下基础。
Bitmap类设计
Bitmap类
Bitmap对象封装了GDI+中的一个位图,此位图由图形及其属性的像素数据组成。因此Bitmap是用于处理由像素数据定义的图像的对象。该类的主要方法和属性如下:
GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色。
PixelFormat属性:返回图像的像素格式。
Palette属性:获取或设置图像所使用的颜色调色板。
Height属性和Width属性:返回图像的高度和宽度。
LockBits方法和UnlockBits方法:分别锁定和解锁系统内存中的位图像素。在基于像素点的图像处理方法中使用LockBits和UnlockBits是一个很好的方式,这两种方法可以使我们通过指定像素的范围来控制位图的任意一部分,从而消除了通过循环对位图的像素逐个进行处理的需要。每次调用LockBits之后都应该调用一次UnlockBits。
LockBits方法的定义如下:
Public BitmapData LockBits (Rectangle rect,ImageLockMode flags,PixelFormat format);
LockBits方法使用3个类型,分别为Rectangle、ImageLockMode枚举和PixelFormat枚举的参数,并返回一个类型为BitmapData的对象。其中矩形参数定义了要在系统内存中锁定的位图的一部分;ImageLockMode枚举提供了对数据的访问方式,表3.1所示是它的成员;PixelFormat枚举表示像素的格式,表3.2所示是它的主要成员。
表3.1 ImageLockMode的成员
成员 描述
ReadOnly 位图的锁定部分只用于读操作
ReadWrite 位图的锁定部分用于读操作和写操作
UserInputBuffer 读取和写入像素数据的缓存由用户分配
WriteOnly 位图的锁定部分只用于写操作 C#图像的缩放与旋转处理程序设计(11):http://www.youerw.com/jisuanji/lunwen_7214.html