WEB开发网
开发学院软件开发Delphi 角点检测算子的代码描述 阅读

角点检测算子的代码描述

 2006-02-04 14:10:15 来源:WEB开发网   
核心提示: 最简单的一种角点检测算子,但是由于采用了非最大化抑制,角点检测算子的代码描述,效果和OpenCV相当, TPointInfo = record Info: TPoint; w: extended; Color: TLabColor; end; TSinglePointInfoArray = array o
 

最简单的一种角点检测算子,但是由于采用了非最大化抑制,效果和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为标准角点检测算子运行后的检测值。


Tags:检测 算子 代码

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接