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

2016-02-19 20:47 11 1 收藏

图老师小编精心整理的强角点检测算子的Pascal实现代码希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - 编程语言 】

  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;
    {用非最大化抑制来抑制假角点}

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

    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;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1624529.html

延伸阅读
标签: Web开发
实现方法: 代码如下: !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" html xmlns="http://www.w3.org/1999/xhtml" head title浮动广告/title style type="text/css" #qqonline{ background-color:red; border:...
标签: Web开发
经过分析,网上的参考,终于搞定了~~ jQuery插件代码: 代码如下: jQuery.fn.selectItem = function(targetId) { var _seft = this; var targetId = $(targetId); this.toggle( function() { var A_top = $(this).offset().top + $(this).outerHeight(true); // 1 var A_left = $(this).offset().left; targetId.bgiframe(); targ...
标签: Web开发
在 Ajax 应用中,显示一个 Dialog(以 Div 方式显示)前,都会先建一个 Mask。因为经常会用到,所以写成了一个 jQuery 插件,方便自己的使用。 代码如下: (function($){ $.extend({ documentMask: function(options){ // 扩展参数 var op = $.extend({ opacity: 0.8, z: 10000, bgcolor: '#000' }, options); // 创建一个 Mask 层...
标签: Web开发
兼容: opera 9.6 + chrome 2.0 + FF 3 + IE 6 效果:一边输入一边实现验证   环境:ruby 1.8.6 + rails 2.1.0 + windows 核心代码: html: 浏览器禁用javascript时显示提示信息: 代码如下: noscript div style="color:red"您的浏览器不支持javascript,部分功能无法使用/div /noscript 当浏览器禁用JS后,提交按钮不可用,实现客户...
标签: Web开发
代码如下: var boardDiv = "div style='background:white;width:100%;height:100%;z-index:999;position:absolute;top:0;margin-top:100px;'加载中...\/div"; $(window).load(function(){ //window.alert("ok"); $(document.body).append(boardDiv); });

经验教程

945

收藏

46
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部