4 votes

Correspondance de modèles de caractères manuscrits en Matlab

Travailler avec correspondance des modèles de la saisie de données manuscrites, mais ils sont confrontés à certains problèmes parce qu'ils sont très nouveaux dans Matlab. Je veux faire correspondre ce modèle
enter image description here
avec celui-ci..
enter image description here

Jusqu'à présent, je l'ai fait :

function result=test(image1,image2)
%*********************************************************

    image1=rgb2gray(image1);
    image2=rgb2gray(image2);

% check which one is target and which one is template using their size

if size(image1)>size(image2)
    Target=image1;
    Template=image2;
else
    Target=image2;
    Template=image1;
end

% find both images sizes
[r1,c1]=size(Target);
[r2,c2]=size(Template);
% mean of the template
image22=Template-mean(mean(Template));

%corrolate both images
M=[];
for i=1:(r1-r2+1)
    for j=1:(c1-c2+1)
        Nimage=Target(i:i+r2-1,j:j+c2-1);
        Nimage=Nimage-mean(mean(Nimage));  % mean of image part under mask
        corr=sum(sum(Nimage.*image22));
        %warning off
        M(i,j)=corr/sqrt(sum(sum(Nimage.^2)));
    end 
end
% plot box on the target image
result=plotbox(Target,Template,M);

Pour la boîte à idées

function result=plotbox(Target,Template,M)

%*********************************************************
[r1,c1]=size(Target);
[r2,c2]=size(Template);

[r,c]=max(M);
[r3,c3]=max(max(M));

i=c(c3);
j=c3;
result=Target;
for x=i:i+r2-1
   for y=j
       result(x,y)=255;
   end
end
for x=i:i+r2-1
   for y=j+c2-1
       result(x,y)=255;
   end
end
for x=i
   for y=j:j+c2-1
       result(x,y)=255;
   end
end
for x=i+r2-1
   for y=j:j+c2-1
       result(x,y)=255;
   end
end

Et pour les tests, j'utilise

% read Template image
im1=imread('C:\Users\Shuvro\Desktop\New folder\1.jpg');
% read Traget Image
im2=imread('C:\Users\Shuvro\Desktop\New folder\2.jpg');
% apply templete matching using power of the image
result1=test(im1,im2);
figure,
subplot(2,2,1),imshow(im1);title('Template');
subplot(2,2,2),imshow(im2);title('Target');
subplot(2,2,3),imshow(result1);title('Matching Result using tmp');

Mais souvent, ce code ne peut pas identifier le modèle dans l'image source, ne comprenant pas ce qui ne va pas.
En fait, lorsque j'entre 2 images dans le système, je veux que leur hauteur soit similaire. Ensuite, je veux mesurer la largeur de l'image modèle et ensuite je veux scanner l'image source selon cette largeur et examiner les valeurs des pixels. Lorsque ces valeurs de pixels du modèle correspondent à l'image source à plus de 70%, je donnerai le résultat qu'il est trouvé, sinon non trouvé.
Je vous remercie si quelqu'un peut vous aider avec le code ci-dessus en le modifiant ou en donnant des suggestions.

0voto

Dennis Jaheruddin Points 10154

Tout d'abord, je tiens à vous avertir que size(image1)>size(image2) est une comparaison vectorielle, vous ne voudrez généralement pas le faire de cette manière. (Peut-être avec all o any ).

Ceci étant dit :

Dans ce cas précis, la seule façon de comprendre pourquoi votre code ne fait pas ce que vous attendez est de charger des entrées qui devraient correspondre mais ne le font pas. Ensuite, passez en revue le code ligne par ligne jusqu'à ce que vous voyiez un comportement inattendu.


Bien sûr, vous pouvez aussi essayer de rechercher des fonctions de filtrage pour Matlab, il devrait y en avoir quelques-unes que vous pouvez trouver sur Google, ou peut-être même sur stackoverflow.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X