【发布时间】: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