У меня есть изображение, содержащее текст, и я хочу вырезать каждую букву из изображения. Как мне добиться этого с помощью MATLAB?
Как вы сегментируете изображение, содержащее текст?
Ответы (2)
С набором инструментов для обработки изображений
Если у вас есть набор инструментов, вы можете быстро идентифицировать каждую отдельную букву на вашем изображении.
Начиная с изображения в градациях серого, вы должны найти порог сегментации с
level = graythresh(Img);
Затем преобразуйте изображение в двоичный файл с помощью
Img = im2bw(Img,level);
С
Cc = bwconncomp(Img);
вы получаете структуру, которая содержит линейные индексы каждого идентифицированного компонента в его поле
Cc.PixelIdxList
См. документацию по этим функциям, чтобы настроить сегментацию в соответствии с вашими потребностями.
Без набора инструментов для обработки изображений
Вы должны реализовать алгоритм связанного компонента самостоятельно.
Из документации Matlab:
>The basic steps in finding the connected components are:
>
>1. Search for the next unlabeled pixel, p.
>2. Use a flood-fill algorithm to label all the pixels in the connected component containing p.
>3. Repeat steps 1 and 2 until all the pixels are labeled.
Проще всего было бы проверить цвет:
Узнай, какого цвета буквы.
Предположим, это ваше изображение, содержащее букву T, написанную цветом 5:
myImage = round(4*rand(6));
myImage(1:2,:) = 5; %Drawing the top bar of the T
myImage(:,3:4) = 5; %Drawing the leg of the t
myColor = 5;
Теперь, чтобы сохранить только письмо (/ письма):
myImage(myImage~=myColor) = NaN
Теперь вы можете построить его, используя
surf(myImage)
Не так уж сложно расширить это до цветового диапазона (или до набора цветов RGB, в зависимости от того, какой формат у вашего изображения).