2013-05-15 4 views
4

Работа с Соответствие шаблону ввода рукописных данных, но сталкиваются с некоторыми проблемами для того, чтобы быть очень новым в Matlab. Я хочу, чтобы соответствовать этому шаблону
enter image description here
с этим ..
enter image description hereСовпадение рукописного символа в Matlab

До сих пор я сделал это:

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); 

Для 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 

И для тестирования я использую ..

% 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'); 

Но этот код часто не может идентифицировать этот шаблон в исходном изображении, не понимая, что случилось с ним. Любой может помочь?
В основном, когда я ввожу 2 изображения в систему, я хочу, чтобы их высота была одинаковой. Затем я хочу измерить ширину изображения шаблона, а затем я хочу сканировать исходное изображение в соответствии с этой шириной и исследовать значения пикселей. Когда эти значения пикселей шаблона будет соответствовать исходному изображению более 70%, тогда я дам результат, что он будет найден, иначе не будет найден.
Это то, что я собираюсь сделать. Очень ценю, сможет ли кто-нибудь помочь с вышеуказанным кодом, отредактировав его или давая советы.

+1

Возможно, вам стоит взглянуть на регистрацию изображения – by0

ответ

0

Прежде всего, я хочу предупредить вас, что size(image1)>size(image2) - это векторное сравнение, как правило, вы не захотите это делать. (Возможно, с all или any).

Это, как говорится:

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


Конечно, вы также можете просто попытаться найти соответствия шаблону функции для MATLAB, должен быть какой-то, что вы можете найти на Google, или, возможно, даже на StackOverflow.