【问题标题】:Delphi compare 2 similar imagesDelphi 比较 2 个相似图像
【发布时间】:2016-01-02 12:41:10
【问题描述】:

无论如何在 Delphi 中比较 2 个相似的图像(不一样)。

这里有一些例子:

&

这里很明显,我们不能逐像素比较, 所以我的想法是对每个图像的像素值求和,然后比较它们:

function CalcPix( img : TImage) : longint;
var
  s : longint;
  i, j : integer;
begin
  s := 0;

  for i := 0 to img.Height do
  begin
     for j := 0 to img.Width do
     begin
      if img.Canvas.Pixels[i,j] <> clWhite then
        s := s + img.Canvas.Pixels[i, j];
     end;
  end;

  Result := S;
end;

结果是:

1)14836072057

2)16750850318

如您所见,它们并没有那么接近,如果我一次使用 4 到 5 张图像执行此过程,它总是会给我错误的结果。

还有其他方法吗?比如改变颜色或对比度等。

【问题讨论】:

  • 我假设“比较”是指应用一些算法来返回两个图像之间的相关程度?这种相关性需要关于您认为相似和不相似的规则。在您的示例中,您的意思似乎与排除旋转或平移变换类似。然而,拉伸或歪斜,或某种类型的曲率扭曲呢?你想达到什么目的,结果应该采取什么形式?您想要是/否匹配,还是指示相关强度的一维结果(即:94% 的匹配概率等)。
  • 是的,只有旋转和平移,我的目标是找出图像是否相同(旋转/平移后)
  • 您是在寻找相似之处,还是在寻找除了平移/缩放/旋转之外的相同之处?有一个完整的特定研究领域(图像检索),涵盖确定图像相似性的主题。
  • 您可以比较直方图。直方图应该保持相当稳定,如果图像不太相似,则可以提供良好的分离。
  • @Yassine “如果它是同一张图片”停止重复自己并准确回答“相同”是什么,即比较标准/算法。没有它,您将无法编写代码。可能你的像素求和方法不够好。

标签: image delphi compare computer-vision


【解决方案1】:

以下是关于您所拥有的选项的好文章:https://stackoverflow.com/a/844113/7735 这需要一些背景知识,而且性能最佳的解决方案很难从头开始实施,因此使用某种库是最简单的。这是 Delphi 的 OpenCV 包装器:https://github.com/Laex/Delphi-OpenCV

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2020-04-02
    相关资源
    最近更新 更多