我可以使用什么算法在这个查询图像中找到这个提取的模板图像?

What algorithm can I use to find this extracted template image in this query image?

我试图在查询图像中找到提取的模板图像的位置,我尝试使用冲浪算法但无法找到它,请问我可以使用什么其他算法来找到这个模板?

您尝试做的事情相对简单明了,尤其是如果您有一个干净的指纹数据集。

您可以使用 Wavelet Transform 提取这些特征。

它会使用树结构分解您的指纹图像,您可以提取图像中您感兴趣的部分。

我很确定您可以在 GitHub 上找到很多包。

如果你可以在Python中编码,PyWavelets也是一个选择,否则你可以使用MATLAB:


如何在MatLab中实现:

这段代码只是在 MatLab 中实现图像处理算法的一个例子。

Source Code

%WAVELET

clear all;
clc;

data=imread('sidikjari5.jpg');
r=data(:,:,1);
g=data(:,:,2);
b=data(:,:,3);

gray=double(0.333*r+0.333*g+0.333*b)/512;

[m, n] = size(gray);

%=================== WAVELET LV 1 ===================%

mm=m/2;
nn=n/2;
for i=1:mm
    for j=1:nn
        cb1=(gray(i*2-1,j*2));
        %cb1=double(cb1);
        cb2=(gray(i*2,j*2-1));
        %cb2=double(cb2);
        ca(i,j)=sqrt(cb1^2+cb2^2);
    end
end
[m1,n1]=size(ca);

for i=1:mm
    for j=1:nn
        cb1=(gray(i*2-1,j*2-1));
        cb2=(gray(i*2,j*2-1));
        cv(i,j)=(cb1+cb2)/2;
    end
end
[m2,n2]=size(cv);

for i=1:mm
    for j=1:nn
        cb1=(gray(i*2-1,j*2-1));
        cb2=(gray(i*2-1,j*2));
        ch(i,j)=(cb1+cb2)/2;
    end
end
[m3,n3]=size(ch);

for i=1:mm
    for j=1:nn
        cb1=(gray(i*2-1,j*2-1));
        cb2=(gray(i*2,j*2));
        cd(i,j)=(cb1+cb2)/2;
    end
end
[m4,n4]=size(cd);

l1=figure;
imshow(l1);
subplot(2,2,1);
imshow(ca);
title('ca');
subplot(2,2,2);
imshow(ch);
title('ch');
subplot(2,2,3);
imshow(cv);
title('cv');
subplot(2,2,4);
imshow(cd);
title('cd');

%=================== WAVELET LV 2 ===================%

mmm=m1/2;
nnn=n1/2;
for i=1:mmm
    for j=1:nnn
        cb1=(ca(i*2-1,j*2));
        cb2=(ca(i*2,j*2-1));
        ca2(i,j)=sqrt(cb1^2+cb2^2);
    end
end
[mm1,nn1]=size(ca2);

for i=1:mmm
    for j=1:nnn
        cb1=(ca(i*2-1,j*2-1));
        cb2=(ca(i*2,j*2-1));
        cv2(i,j)=(cb1+cb2)/2;
    end
end
[mm2,nn2]=size(cv2);

for i=1:mmm
    for j=1:nnn
        cb1=(ca(i*2-1,j*2-1));
        cb2=(ca(i*2-1,j*2));
        ch2(i,j)=(cb1+cb2)/2;
    end
end
[mm3,nn3]=size(ch2);

for i=1:mmm
    for j=1:nnn
        cb1=(ca(i*2-1,j*2-1));
        cb2=(ca(i*2,j*2));
        cd2(i,j)=(cb1+cb2)/2;
    end
end
[mm4,nn4]=size(cd2);

l2=figure;
imshow(l2);
subplot(2,2,1);
imshow(ca2);
title('ca2');
subplot(2,2,2);
imshow(ch2);
title('ch2');
subplot(2,2,3);
imshow(cv2);
title('cv2');
subplot(2,2,4);
imshow(cd2);
title('cd2');

%=================== WAVELET LV 3 ===================%

mmmm=mm1/2;
nnnn=nn1/2;
for i=1:mmmm
    for j=1:nnnn
        cb1=(ca2(i*2-1,j*2));
        cb2=(ca2(i*2,j*2-1));
        ca3(i,j)=sqrt(cb1^2+cb2^2);
    end
end
[mmm1,nnn1]=size(ca3);

for i=1:mmmm
    for j=1:nnnn
        cb1=(ca2(i*2-1,j*2-1));
        cb2=(ca2(i*2,j*2-1));
        cv3(i,j)=(cb1+cb2)/2;
    end
end
[mmm2,nnn2]=size(cv3);

for i=1:mmmm
    for j=1:nnnn
        cb1=(ca2(i*2-1,j*2-1));
        cb2=(ca2(i*2-1,j*2));
        ch3(i,j)=(cb1+cb2)/2;
    end
end
[mmm3,nnn3]=size(ch3);

for i=1:mmmm
    for j=1:nnnn
        cb1=(ca2(i*2-1,j*2-1));
        cb2=(ca2(i*2,j*2));
        cd3(i,j)=(cb1+cb2)/2;
    end
end
[mmm4,nnn4]=size(cd3);

level1=[ca cv;
        ch cd;];
level2ca=[ca2 cv2;
          ch2 cd2];
level3ca=[ca3 cv3;
          ch3 cd3];

l3=figure;
imshow(l3);
subplot(2,2,1);
imshow(ca3);
title('ca3');
subplot(2,2,2);
imshow(ch3);
title('ch3');
subplot(2,2,3);
imshow(cv3);
title('cv3');
subplot(2,2,4);
imshow(cd3);
title('cd3');     
 
%=================== EKSTRAKSI CIRI WAVELET LV 3 ===================%

rerataca3 = mean2(ca3); %fitur
reratach3 = mean2(ch3); %fitur
reratacv3 = mean2(cv3); %fitur
reratacd3 = mean2(cd3); %fitur

sdevca3 = std2(ca3); %fitur
sdevch3 = std2(ch3); %fitur
sdevcv3 = std2(cv3); %fitur
sdevcd3 = std2(cd3); %fitur

varca3 = sdevca3^2; %fitur
varch3 = sdevch3^2; %fitur
varcv3 = sdevcv3^2; %fitur
varcd3 = sdevcd3^2; %fitur

x=[rerataca3  reratach3 sdevca3 sdevch3  varca3  varch3]

更新

我建议在 GitHub 上寻找已经开发的软件包,或者搜索类似的 MatLab 示例(如果有)。然后,将该包或示例应用到您的图像,看看它是如何工作的。在此过程中,您可能会遇到一些问题,例如在使用任何时频方法映射图像之前可能需要对图像进行预处理。

如果不是,那么你可以从 here, if you would like to write from scratch. More specifically, Discrete Wavelet Packet Transforms 开始,这对你的图像来说可能是一种有效的算法。


小波包的设计好像和trees差不多。将它们应用到图像后,您还可以定义和设计一些 mathematical/statistical 标准以从指纹图像中提取这些特征。