程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 角點檢測算子的代碼描述

角點檢測算子的代碼描述

編輯:Delphi

  最簡單的一種角點檢測算子,但是由於采用了非最大化抑制,效果和OpenCV相當。

    TPointInfo = record
      Info: TPoint;
      w: extended;
      Color: TLabColor;
    end;

    TSinglePointInfoArray = array of TPointInfo;
  

  procedure CornerDetect(Width, Height: longint);
  var
    i, j, fi, fj, sum: longint;
  begin
    PointCount := 0;
    for i := 7 to Width - 8 do
      for j := 7 to Height - 8 do begin
        sum := 0;
        for fi := i - 7 to i + 7 do
          for fj := j - 7 to j + 7 do
            sum := sum + abs(ImageGray[i, j] - ImageGray[fi, fj]);
        ImagePoint[i, j] := sum div $100;
      end;
    {標准角點檢測算子部分}
    for i := 7 to Width - 8 do
      for j := 7 to Height - 8 do begin
        sum := ImagePoint[i, j];
        if sum > $20 then begin
          WBPoint[i, j] := true;
          Inc(PointCount);
          for fi := i - 7 to i + 7 do begin
            for fj := j - 7 to j + 7 do
              if ImagePoint[fi, fj] > sum then begin
                WBPoint[i, j] := false;
                Dec(PointCount);
                break;
              end;
            if not WBPoint[i, j] then break;
          end;
        end else
          WBPoint[i, j] := false;
      end;
    {用非最大化抑制來抑制假角點}
    setlength(CornerPoint, PointCount); fi := 0;
    for i := 7 to Width - 8 do
      for j := 7 to Height - 8 do
        if WBPoint[i, j] then begin
          CornerPoint[fi].Info.X := i;
          CornerPoint[fi].Info.Y := j;
          Inc(fi);
        end;
    {輸出為一個點序列}
  end;

  輸入的ImageGray為圖像的灰度描述,WBPoint為Boolean數組,ImagePoint為標准角點檢測算子運行後的檢測值。


  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved