角点检测算子的代码描述
2006-02-04 14:10:15 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨绘い鎺嬪灪閵囧嫰骞囬姣挎捇鏌熸笟鍨妞ゎ偅绮撳畷鍗炍旈埀顒勭嵁婵犲嫮纾介柛灞捐壘閳ь剛鎳撻~婵嬪Ω閳轰胶鐤呯紓浣割儐椤戞瑩宕ョ€n喗鐓曟い鎰靛亝缁舵氨绱撻崘鈺傜婵﹤顭峰畷鎺戔枎閹搭厽袦婵犵數濮崑鎾绘⒑椤掆偓缁夌敻骞嗛悙鍝勭婵烇綆鍓欐俊鑲╃磼閹邦収娈滈柡灞糕偓鎰佸悑閹肩补鈧尙鏁栧┑鐐村灦閹稿摜绮旈悽绋课﹂柛鏇ㄥ灠閸愨偓濡炪倖鍔﹀鈧繛宀婁邯濮婅櫣绱掑Ο璇茶敿闂佺ǹ娴烽弫璇差嚕婵犳碍鏅插璺猴工瀹撳棝姊虹紒妯哄缂佷焦鎸冲畷鎴﹀箻鐠囧弶宓嶅銈嗘尰缁嬫垶绂嶉悙顒佸弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

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