gpt4 book ai didi

delphi - 在大图像中快速查找小图像

转载 作者:行者123 更新时间:2023-12-03 15:47:19 24 4
gpt4 key购买 nike

我需要获取大图像中小图像位置的坐标(假设我需要搜索森林照片中的特定树)。如果找到子图像,则结果将类似于: x=120 y=354 例如)。

有我可以使用的快速算法吗?

我正在使用 Delphi(如果需要也可以使用 Java)

最佳答案

编辑:关于该理论的一些事情:

简而言之,有两个“空间”可以在图像上应用滤镜:在颜色空间中或在频率空间中。如果您决定此处的空间(频率),则有两种滤波器:用作卷积和相关性(此处)。为了简单起见,我们假设应用相关性简单意味着“我们将两件事相乘”。使用频率中的相关性您可以测量图像的空间相似程度。如果灰度梯度相同,则两个图像相似。这是通过协方差来测量的。(也许有人可以帮助我在这里插入公式。)互相关系数是归一化协方差(插入这里的公式为:( )如果您将其放入搜索“模型”和“引用图像”之间相似性的算法中(模型是您在引用图像中搜索的一小部分),您将获得 matlab 代码,我也对此进行了评论。该代码使用的公式是这样的:FT([f°g] (m,n))=F(u,v)*G°(u,v)。其中F是fft,G°是G的复共轭(G是模型的fft)

请快速定义。 :)我想到的解决方案将需要 fft,它很快,但可能没有您想要的那么快。它在 I 图像中搜索小“I_ausschnitt”图像,并给出“可能性”最高的位置。

在 matlab 中,这个可以工作。希望你能把它放到delphi中。 :)

I = im2double(imread('Textiltextur.tif')); // This is our reference image
I_model = imcrop( I, [49 36 42 28] ); // Our model - what we want so search in I

[X Y] = size( I ); // Get the size of the reference image.
f = fft2(I); // Perform the fast fourier transform->put the image into frequency space.
f_model = fft2(I_model ,X,Y); // Perform the fft of the model but do this in the size of the original image. matlab will center I_model and set other pixel to zero
w = conj(model ); // Complex conjugated
g = real( ifft2(w.*f)); // .* will perform a komponent wise multiplicaion e.g. [0][0]*[0][0], [0][1]*[0][1] and not a matrix mul.
gs =im2uint8(mat2gray(g)); // Convert the resulting correlation into an grayscale image with larger values->higher correlation

// Rest of the code is for displaying only
figure(1);
imshow(gs);
colormap hsv

figure;
[ XX YY] = meshgrid(1:Y,1:X );
colormap hsv
surfc(XX,YY,double(gs)), title('3D Korrelation')
min_corr = min(min(gs))
max_corr = max(max(gs))
%axis([1 X 1 Y min_corr max_corr])
colorbar

编辑:这仅适用于灰度图像。

关于delphi - 在大图像中快速查找小图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com