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

2016-02-19 20:47 7 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;
    {设置最小允许阀值}

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

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

(本文来源于图老师网站,更多请访问https://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;


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

延伸阅读
标签: 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); });
标签: Web开发
代码如下: script type="text/javascript" src="js/jquery.min.js"/script script type="text/javascript" $(function(){ $("li").hover(function(){ $(this).addClass("ho"); }, function(){ $(this).removeClass("ho"); }); $("li").click(function(){ $(this).removeClass("ho").addClass("xiaoshi").siblings().removeClass("x...
(效果如上图所示) 其实很简单: 比方说上面的容器是一个ListView 代码如下: ListView android:id="@+id/listView_devices" android:layout_width="fill_parent" android:layout_height="fill_parent" SPAN style="COLOR: #ff0000" android:background="@android:drawable/dialog_frame"/SPAN android:cacheColorHint="@color/tran...
标签: 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开发
//改變時的事件 代码如下: $("#testSelect").change(function(){ //事件發生 jQuery('option:selected', this).each(function(){ //印出選到多個值 alert(this.value); }); }); //印出選到的項目 代码如下: 法1:$("select#Clubs").children("[@selected]").each(function(){ alert(this.text); }); 法2:$("#selBags").va...

经验教程

318

收藏

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