Какой алгоритм я могу использовать, чтобы найти это извлеченное изображение шаблона в этом изображении запроса? - PullRequest
1 голос
/ 18 июня 2020

enter image description here

Я пытаюсь найти местоположение извлеченного изображения шаблона в изображении запроса, я пробовал использовать алгоритм серфинга, но он не может его найти, пожалуйста, какой еще алгоритм я могу использовать, чтобы найти этот шаблон?

1 Ответ

3 голосов
/ 19 июня 2020

То, что вы пытаетесь сделать, относительно просто и понятно, особенно если у вас будет чистый набор данных для отпечатков пальцев.

Вы можете использовать Wavelet Transform для извлечения этих функций.

Он разложит ваши изображения отпечатков пальцев с использованием древовидной архитектуры, и вы сможете извлечь те желаемые части ваших изображений, которые могут вас заинтересовать.

Я почти уверен, что вы можете найти много пакетов на GitHub .

Если вы можете кодировать in Python, PyWavelets также будет выбором, иначе вы можете использовать MATLAB:

Как реализовать в MatLab:

Этот код является всего лишь примером реализованного алгоритма обработки изображений в MatLab.

Исходный код

%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, если они есть. Затем примените этот пакет или пример к своим изображениям, чтобы увидеть, как это будет работать. В этом процессе вы можете столкнуться с некоторыми проблемами, такими как предварительная обработка, которую, возможно, потребуется применить к вашим изображениям, прежде чем вы сопоставите их с помощью каких-либо частотно-временных методов.

Если нет и это задает сторону, возможно, вы сможете начните с здесь , если хотите писать с нуля. В частности, Преобразование дискретных вейвлет-пакетов может быть эффективным алгоритмом для ваших изображений.

Вейвлет-пакет выглядит так же, как деревья . После того, как вы примените их к своим изображениям, вы также можете определить и разработать некоторые математические / статистические критерии для извлечения этих функций из ваших изображений отпечатков пальцев.

...