Я пытаюсь придумать систему подсчета баллов для некоторых исследований в области поведенческой психологии.
Я прошу людей нарисовать букву, а затем обвести ее на графическом планшете. Я хочу оценить точность этого обведения. Итак, вы рисуете любую букву ("а"), затем делаете это снова, после чего я оцениваю, насколько она похожа на ту, которую вы нарисовали в первый раз. Рисунки хранятся в виде расположения пикселей.
Точность оценивается как близость к оригинальной букве. Метод не должен допускать изменения масштаба, поворота или положения. Концептуально это похоже на область между двумя линиями, только линии очень нерегулярны, поэтому интегралы (насколько мне известно) не работают.
Я пишу в MATLAB, но любая концептуальная помощь была бы признательна. Я пробовал суммировать минимальное расстояние между всеми нарисованными пикселями, но это дает хорошие (низкие) оценки хорошо расположенным одиночным точкам.
Должно быть, это уже делалось, но мне не везет с поиском. Любая помощь будет очень признательна!
--- Частичное решение с использованием метода, предложенного @Bill ниже. Не работает, так как градиент bwdist слишком крутой. Вместо красивого второго изображения, которое показывает Билл, оно больше похоже на оригинал.
%% Letter to image
im = zeros(1080,1920,3); % The screen (possible pixel locations)
% A small square a bit like the letter 'a', a couple of pixels wide.
pixthick = 5;
im(450:450+pixthick,[900:1100],:) = 1;
im(550:550+pixthick,[900:1100],:) = 1;
im([450:550],900:900+pixthick,:) = 1;
im([450:570],1100:1100+pixthick,:) = 1;
subplot(2,1,1); imagesc(im); %% atransbw = bwdist(im(:,:,1)<0.5); subplot(2,1,2);
imagesc(atransbw);