角点检测算子的代码描述

王朝delphi·作者佚名  2006-01-09
宽屏版  字体: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有