Как извлечь области текста в изображениях с помощью Matlab?
Я пишу matlab
Программа, которая будет обнаруживать текст в естественных изображениях сцены. Я пользуюсь этой видео лекцией и бумагой. Я понял первые несколько шагов и сделал обнаружение края (я добавляю изображения ниже). Теперь я хочу извлечь (выделить) только текст из конечного изображения. Как я могу это сделать?
Мой код:
i = imread('f:\new.jpg');
i1 = rgb2gray(i);
imshow(i1);
i2 = edge(i1,'canny',0.3);
imshow(i2);
se = strel('square',2);
i3 = imdilate(i2,se);
imshow(i3);
i4 = imfill(i3,'holes');
imshow(i4);
[Ilabel num] = bwlabel(i4);
disp(num);
Iprops = regionprops(Ilabel);
Ibox = [Iprops.BoundingBox];
Ibox = reshape(Ibox,[4 92]);
imshow(i);
hold on;
for cnt = 1:92
rectangle('position',Ibox(:,cnt),'edgecolor','r');
end
Конечное изображение:
1 ответ
Обрезать часть изображения - это взять подматрицу из матрицы, зная, что это ограничивающие индексы. Например, если подматрица растягивается от y1
грести y2
ряд и от x1
столбец к x2
столбец (все границы включительно) вы получите подматрицу с:
submat = mainmat(y1:y2,x1:x2);
Перед извлечением подматриц вы должны получить ограничивающие координаты для каждой буквы. Если у вас есть y
а также x
координаты для одной буквы; Будь то все координаты области изображения или просто координаты края области, вы можете получить ограничивающие координаты с помощью:
% x-coordinates of the region are in the vector x
x1 = min( x(:) );
x2 = max( x(:) );
% y-coordinates of the region are in the vector y
y1 = min( y(:) );
y2 = max( y(:) );
После выполнения описанной выше процедуры для всех букв вы можете разделить буквы одну за другой, но если вы хотите отделить связанные области букв, вам придется проверить, не перекрываются ли прямоугольники, ограничивающие буквы.