Сопоставление шаблона рукописного символа в Matlab

Работа с сопоставлением шаблона рукописного ввода данных, но сталкиваюсь с некоторыми проблемами из-за того, что он очень новичок в 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);

Для сюжетбокса..

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%, я дам результат, что он найден, в противном случае нет найдено.
Это то, что я думаю сделать. Очень признателен, если кто-нибудь может помочь с приведенным выше кодом, отредактировав его или дав предложения.


person ridoy    schedule 15.05.2013    source источник
comment
Вам, вероятно, следует взглянуть на регистрацию изображений   -  person Omar Wagih    schedule 09.06.2013


Ответы (1)


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

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

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


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

person Dennis Jaheruddin    schedule 08.05.2014