2015-03-28 4 views
1

Я пытаюсь написать программное обеспечение для распознавания рукописного ввода и нуждаюсь в пользовательском вводе. Я могу успешно использовать функцию imfreehand (с параметром, closed = 0), чтобы пользователь мог писать поверх пустой оси графика. Тем не менее, у меня есть две проблемы с этим:Как получить бесплатный вход пользователя в matlab?

  1. Я не могу контролировать толщину линий
  2. Я не могу преобразовать мазня в образ

мне нужно сделать 2, потому что, я буду сравнивая почерк с обучающими изображениями, хранящимися в библиотеке.

Любая идея о том, как преодолеть эти или любые альтернативы?

Спасибо.

ответ

2

Чтобы ответить на ваш второй вопрос, вы можете использовать getframe. Вот минимальный Exemple:

% --- Free hand drawing 
imfreehand('closed', 0); 

% --- Get the image 
axis off 
F = getframe; 
Img = F.cdata; 

% --- Display the image 
figure 
imshow(Img); 

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

Это немного сложнее, чтобы сделать все в чистоту в отношении приложения из-за цветами фона и оси чешуи, но вот попробовать:

clf 
xl = get(gca, 'Xlim'); 
yl = get(gca, 'Ylim'); 

h = imfreehand('closed', 0); 

% --- Get the curve coordinates 
C = get(h, 'Children'); 
pos = C(5).Vertices; 

% --- Re-plot the curve with a thick line 
clf 
plot(pos(:,1), pos(:,2), 'k', 'Linewidth', 5); 
xlim(xl); 
ylim(yl); 

% --- Get the image 
F = getframe; 
Img = rgb2gray(F.cdata); 
Img(Img>0) = 255; 

% --- Display the image 
clf 
imshow(Img); 

Надеется, что это помогает!

+0

Спасибо. Я выполнил эскиз и использовал функцию getframe для захвата графика. Оно работает. Тем не менее, было бы неплохо, если бы я мог контролировать толщину самописца, чтобы пользователь мог рисовать с более толстыми линиями, вместо того, чтобы линия стала толстой после того, как он будет сделан. – rajendra