国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

強角點檢測算子的Pascal實現代碼

2019-11-18 17:58:22
字體:
來源:轉載
供稿:網友

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;



上一篇:XP/2003下開放3389最簡單的方法

下一篇:使用類方法控制實例的唯一性

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 揭东县| 烟台市| 华宁县| 镇赉县| 新郑市| 拉萨市| 衡阳市| 韩城市| 涟源市| 诸城市| 密云县| 陆良县| 杭州市| 桑植县| 东台市| 绩溪县| 富裕县| 乳源| 定州市| 江津市| 墨玉县| 双城市| 和林格尔县| 合江县| 搜索| 永康市| 华安县| 新建县| 西城区| 平乐县| 辽中县| 宝鸡市| 南昌市| 米易县| 玉门市| 太湖县| 丽水市| 宣城市| 金门县| 皮山县| 德安县|