网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.用delphi制作抖动窗体.
.网站上传漏洞利用程序.
.DBGrid中用光标键控制Cell.
.用Delphi实现文件下载的几种方法.
.win2000/xp/2003下不能关闭程序的.
.用Delphi对SQL-DMO进行封装的一种.
.delphi7从入门到精通之四.
.控件移动类的实现之一.
.模拟Nokia手机输入的编辑框.
.为OICQ添加显示IP和端口功能.
.关于精简BDE的一点疑问----我的几.
.玩转Windows桌面图标.
.回调函数与Delphi的事件模型.
.软件注册加密技术.
.使用Delphi创建IIS虚拟目录.
.怎么样知道硬盘上有哪几个分区或.
.组件实例的命名规则.
.VCL消息处理机制的内幕.
.DBGridEh实现单击标题栏排序方法.
.在Delphi中使用动态图标.

强角点检测算子的Pascal实现代码

发表日期:2006-2-4


procedure CornerDetect(sWidth, sHeight: longint; Quality: extended);
var
  i, j, fi, fj: longint;
  a, b, c, sum, MinAccept, MaxEigenvalue: extended;
begin
  FeatureCount := 0;
  {
  下面采用Good Feature To Track介绍的方法
  J. Shi and C. Tomasi "Good Features to Track", CVPR 94
  }
  for i := 1 to sWidth - 2 do
    for j := 1 to sHeight - 2 do begin
      dx[i, j] := ImageGray[i - 1, j - 1] + 2 * ImageGray[i - 1, j] + ImageGray[i - 1, j + 1]
        - (ImageGray[i + 1, j - 1] + 2 * ImageGray[i + 1, j] + ImageGray[i + 1, j + 1]);
      dy[i, j] := ImageGray[i - 1, j + 1] + 2 * ImageGray[i, j + 1] + ImageGray[i + 1, j + 1]
        - (ImageGray[i - 1, j - 1] + 2 * ImageGray[i, j - 1] + ImageGray[i + 1, j - 1]);
      dxy[i, j] := ImageGray[i + 1, j - 1] + ImageGray[i - 1, j + 1]
        - (ImageGray[i - 1, j - 1] + ImageGray[i + 1, j + 1]);
    end;
  {求取Sobel算子的Dx, Dy, Dxy
  Dx:
  |1 0 -1|
  |2 0 -2|
  |1 0 -1|
  Dy:
  |-1 -2 -1|
  | 0  0  0|
  | 1  2  1|
  Dxy
  |-1  0  1|
  | 0  0  0|
  | 1  0 -1|}
  MaxEigenvalue := 0;
  for i := 2 to sWidth - 3 do
    for j := 2 to sHeight - 3 do begin
      a := 0; b := 0; c := 0;
      for fi := i - 1 to i + 1 do
        for fj := j - 1 to j + 1 do begin
          a := a + sqr(dx[fi, fj]);
          b := b + dxy[fi, fj];
          c := c + sqr(dy[fi, fj]);
        end;
      a := a / 2; c := c / 2;
      Eigenvalues[i, j] := (a + c - sqrt((a - c) * (a - c) + b * b));
      if Eigenvalues[i, j] > MaxEigenvalue then MaxEigenvalue := Eigenvalues[i, j];
    end;
  {求取矩阵
    |∑Dx*Dx   ∑Dxy|
  M=|               |
    |∑Dxy   ∑Dy*Dy|
  的特征值
  λ= ∑Dx*Dx + ∑Dy*Dy - ((∑Dx*Dx+∑Dy*Dy)^2-4*(∑Dx*Dx * ∑Dy*Dy - ∑Dxy * ∑Dxy))^1/2}
  MinAccept := MaxEigenvalue * Quality;
  {设置最小允许阀值}

  for i := 8 to sWidth - 9 do
    for j := 8 to sHeight - 9 do
      if Eigenvalues[i, j] > MinAccept then begin
        WBPoint[i, j] := true;
        Inc(FeatureCount);
      end else
        WBPoint[i, j] := false;

  for i := 8 to sWidth - 9 do
    for j := 8 to sHeight - 9 do
      if WBPoint[i, j] then begin
        sum := Eigenvalues[i, j];
        for fi := i - 8 to i + 8 do begin
          for fj := j - 8 to j + 8 do
            if sqr(fi - i) + sqr(fj - j) <= 64 then
              if (Eigenvalues[fi, fj] >= sum) and ((fi <> i) or (fj <> j)) and (WBPoint[fi, fj]) then begin
                WBPoint[i, j] := false;
                Dec(FeatureCount);
                break;
              end;
          if not WBPoint[i, j] then break;
        end;
      end;
  {用非最大化抑制来抑制假角点}

  setlength(Features, FeatureCount); fi := 0;
  for i := 8 to sWidth - 9 do
    for j := 8 to sHeight - 9 do
      if WBPoint[i, j] then begin
        Features[fi].Info.X := i;
        Features[fi].Info.Y := j;
        Features[fi].Index := 0;
        Inc(fi);
      end;
  {输出最终的点序列}
end;


上一篇:巧用Delphi制作溅射屏幕 人气:4257
下一篇:实现Lucas-Kanade光流计算的Delphi类 人气:4694
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐