在我的程序中图像处理函数是作为 DirectShow 封装类一部分的,我认为这样便于移动和使用.
9. 广阔的图像处理天地
因为写程序的需要,也因为浓厚的兴趣,我在此段期间找了不少图像处理的资料,不过正如前面说过的,图像处理需要数学,大多资料都有一大堆公式,看不看得懂就得看您的造诣了。虽然我看不懂那些公式,但我也得到了很多有益的启示,它们是我从更多更新的角度去看待图像,改变了我的思维方式,例如图像是平面的,但可以把其RGB 分量看作是高度,使图形呈现"立体模式",从而可以对它应用立体几何的方法。
看看我理解的线性放缩吧,这也是下面 D3D 应用的铺垫。
如上图,很容易写出此直线段的方程 y = 2 * x (0<= x <= 10)。我不知道您是怎么理解此方程的,我自己认为以前一点也不理解"映射"这个概念,现在从线性放缩中明白到:x 被映射到 y 上,长度被拉长了 2 倍。这和单单知道方程是两回事,我认为这比原来理解要好。利用这个映射就可以把 11 个像素点(下标为 0 ~ 10)的图像放大为 21 个像素点大小,使用下面程序:
for(y = 0; y < 21; y ++){ x = y / 2; newPicture[y] = oldPicture[x]; } |
就这样把图像的宽度扩大后再扩大高度就可完成整个图像的放大,缩小也一样,把直线段的斜率减小就行。直线段代表线性放大,那么抛物线等曲线呢,分段曲线呢?它们都可以实现放缩,因为都是 x 到 y 的映射,曲线代表的是映射规则。呵呵,都怪中学没学好!
在实际放缩时不可能都除得整数,这时就有两种解决方法,一是插值,上面的右图就是线性插值的示意图,二是取整数部分,也就是最近点法,这两种方法的效果和运算量大家都明瞭,自不必我说。
此放缩原理还可以应用于灰度拉伸等方面,对比度增减就是一个例子。
现在摄像头热门的人脸跟踪也是应用图像处理的,其它高级的物体识别、运动分析等都是基于图像处理,其应用前景十分广阔,您足可投身畅游其中,只要您有足够的兴趣和知识。使用图像处理时您是否有这样一个想法:软件让硬件价值倍增!
查看本文源