手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

VB图像处理之二次线性插值的应用

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


  (为了说明算法本身,我们只计算这个图片的红色分量,因为红绿蓝三种颜色的计算方法完全相同)

  假设我们有一个很简单的图片,图片只有4个像素(2*2)

A B
C D
  现在我们要把这个图片插值到9个像素:3*3

A ab B
ac abcd bd
C cd D
  其中大写的字母代表原来的像素,小写字母代表插值得到的新像素。

  想必看到这个图,大家心里已经有了这个算法了。

ab=(A B) / 2
cd=(C D) / 2
ac=(A C) / 2
bd=(B D) / 2
abcd=(ab cd) / 2=(A B C D) / 4
  推导:

ab= A (B-A) / 2
cd=C (D-C) / 2
...
  很简单,对吧,先从一个方向把只涉及两个原始像素的新像素算出来。我们这里假定先计算水平方向。而在算垂直方向的插值的时候,因为ab和cd已经在前面算好了,所以abcd的计算也和计算ac和bd没有任何区别了。

  有可能为有朋友已经想到把原来的图像插值到4*4或5*5的方法了。

A ab1 ab2 B
ac1 ab1cd11 ab2cd21 bd1
ac2 ab1cd12 ab2cd22 bd2
C cd1 cd2 D
  推导:

ab1 = A (B-A) * 1 / 3
ab2 = A (B-A) * 2 / 3 =ab1 (B-A) / 3
cd1 = C (D-C) * 1 / 3
cd1 = C (D-C) * 2 / 3 =cd1 (D-C) / 3
...
  以A和B为例,先求出原始像素的差(A-B)再算出每一步的递增量(A-B) / 3;然后每一个新的点就是在前面那个点的值加上这个递增量就是了。

  这里我们假设A=100, B=255 放大倍率为3,水平方向插值;先计算出原始像素的差:(B-A) = 255-100 =155

  再计算出水平方向每一步的递增量:(A-B) / 3=155 / 3 = 51.7

  这里我们用一个变量DRt来记录这个递增量(这里只用红色来做例子)

ab1 = A DRt = 100 51.7 =151
ab2 = ab1 DRt = 151 51.7 = 202
  好了,其实二次线性算法就是这么一个东西,并不复杂。或许有写朋友会对于我给出的代码产生疑问。很简单的一个算法为什么要写这么多代码。

  其实答案很简单:为了提高速度。

  在VB中“ ”和“-”永远是最快的,“*”要比“/”和“\”快。不论是什么类型的变量都是这样的。

  下面再来分析一下我的程序。

  在我的程序中把两个方向的插值分解成了两个单独的部分。

  先把

A B
C D
  变成:

A ab1...abN B
C cd1...cdN D
  再变成:

A ab1...abN B
ac1 ............. db1
... ............ ...
acN .............. bdN
C cd1...cdN D
  这两个方向的插值算法完全相同

  而Xratio 和Yratio 这两个变量则用来记录水平方向和垂直方向的放大倍率。所以这个过程也能够让图像缩放不按照原始的纵横比进行。

  好了,将这个模块和全局变量添加到上次建立的工程模块中。

  把按钮中的代码改成:

sub command1_click()
 With picture1
  .ScaleMode=3
  .BorderStyle=0
  DibGet .hdc ,0 , 0 , .scalewidth , .scaleheight
  ZoomImage , .scalewidth * 2 , .scaleheight * 2
 End With
 picture2.AutoRedraw=True
 DibPut picture2.hdc
 picture2.refresh
end sub
  图像是否已经放大到原来的两倍了呢?速度不算很慢吧?

  什么?很慢?先编译成EXE再运行吧。下面是效果图:

  原图:


  二次线性插值放大5倍:


  关于二次线性插值就说到这里了,下一次将说一些基本的滤镜效果:锐化、柔化、扩散、雕刻。请大家继续关注

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!