2013-05-15 1 views
4

Travailler avec modèle correspondant à d'entrée de données manuscrites mais rencontrer des problèmes pour être très nouveau dans Matlab. Je veux faire correspondre ce modèle
enter image description here
avec celui-ci ..
enter image description hereModèle de caractères manuscrits correspondant dans Matlab

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

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 plotbox ..

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 ce code ne peut souvent pas identifier ce modèle dans l'image source, ne comprenant pas ce qui était faux là-bas. Tout le monde peut aider? Fondamentalement, lorsque je saisis 2 images sur le système, je veux faire leur hauteur similaire. Ensuite, je veux mesurer la largeur de l'image de modèle, puis je veux analyser l'image source en fonction de cette largeur et examiner les valeurs de pixels. du modèle correspondra à l'image source plus de 70% alors je donnerai le résultat qu'il est trouvé, sinon non trouvé.
C'est ce que je pense à faire. Très apprécié si quelqu'un peut aider avec le code ci-dessus en l'éditant ou en donnant des suggestions.

+1

Vous devriez probablement regarder l'enregistrement des images – by0

Répondre

0

Tout d'abord je tiens à vous avertir que size(image1)>size(image2) est une comparaison de vecteurs, généralement vous ne voudrez pas le faire comme ça. (Peut-être avec all ou any).

Cela 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 les entrées qu'il doit correspondre, mais ne fonctionne pas. Parcourez ensuite le code ligne par ligne jusqu'à ce que vous voyiez un comportement inattendu.


Bien sûr, vous pouvez également essayer juste pour rechercher des fonctions de correspondance de motif pour Matlab, il devrait y avoir que vous pouvez trouver sur google, ou peut-être même sur stackoverflow.

Questions connexes