强角点检测算子的Pascal实现代码
来源:互联网 发布:java怎样处理高并发 编辑:程序博客网 时间:2024/04/29 05:51
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;
{设置最小允许阀值}
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;
{用非最大化抑制来抑制假角点}
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;
- 强角点检测算子的Pascal实现代码
- 角点检测算子的代码描述
- Harris角点检测算子
- Moravec角点检测算子
- Harris角点检测算子
- Harris角点检测算子
- Moravec + Forstner 角点检测算子
- Moravec角点检测算子和Harris角点检测算子
- 角点检测算子(Harris, KLT, SIFT)
- forstner算子和Moravec角点检测算子
- 角点检测算子(Harris, KLT, SIFT,SUSAN)
- 图像局部特征点检测算子综述
- ICCV 2013的人脸特征点检评测及代码
- ICCV 2013的人脸特征点检评测及代码
- ICCV 2013的人脸特征点检评测及代码
- 基于SMO方法的支持向量机Pascal代码实现
- mini-pascal部分实现的语法分析器,代码only
- 求强连通子图的方法以及简单实现
- 七种VC延时方式
- 开发asp.net自定义控件(asp.net学习笔记二) 选择自 cashcho 的 Blog
- 开发asp.net自定义控件(asp.net学习笔记三) 选择自 cashcho 的 Blog
- 针对 .NET 开发人员的存储过程评估
- 求职面试自我介绍一分钟
- 强角点检测算子的Pascal实现代码
- 存储过程相关资料
- 实现Lucas-Kanade光流计算的Delphi类
- VC++多线程编程
- 打包的具体操作步骤
- SQL存储过程在.NET数据库中的应用
- 搜索引擎中几种语言模型的性能比较
- 如何告诉spring初始化指定配置文件中的javabean
- 一个基于JS日历的WebControl日历控件