Matlab. Программа поиска ЗАДАННОГО слова в тексте на картинке.
Можем Выполнить для Вас подобную или другую работу, пишите в ВК или Телеграм.
тут фрагмент удален. Можем для Вас написать подобную программу. Пишите в ВК или Телеграм.
Можем Выполнить для Вас подобную или другую работу, пишите в ВК или Телеграм.
% Программа поиска слова в графическом изображении текста v1.0
clc; % Очистка командного окна
clear all; % Очистка всех переменных
% Начинаем цикл обслуживания меню выбора файла для анализа
mc=0;
while mc<2
mc=menu('SeLect fiLe with text:','1. TeXt-Line.jpg','2. TeXt-CuRve.jpg','Exit ProgRamm');
% Если нажали нижнюю кнопку
if mc==3
break; % Прерывание цикла и выход из программы
end;
close all; % Закрытие всех ранее открытых граф. окон
switch mc % Выбор вариантов загрузки файлов
case 1
A=imread('TeXt-Line.jpg');
case 2
A=imread('TeXt-CuRve.jpg');
end; % Конец Выбора вариантов загрузки файлов
% Если изображение цветное и матрица А - трёхмерная
if size(A,3)>0
S=rgb2gray(A); % переводим изображение из цветного в серое
else % Если матрица А имеет два измерения
S=A;
end;
clear A;
figure(1); % Вызов 1-го графического окна
imshow(S); % Отображение серого рисунка
%axis('ij');
axis('equal'); % Задаём равномасштабные оси координат
% Приглашение выделить фрагмент текста
title('SeLect text fragment with Up-case SymboLs:');
[x,y]=ginput(2); % Ввод мышкой вершин прямоугольника выделения
x=round(x); y=round(y); % Округляем координаты до целых
B=S(min(y):max(y),min(x):max(x)); % Запоминаем выделенный фрагмент
figure(2);
imshow(B); % Отображение серого рисунка выделенного фрагмента
%axis('ij');
axis('equal'); % Задаём равномасштабные оси координат
hold on;
% Ищем в столбцах выделенного фрагмента
% чёрный отрезок максимальной длины
[mb,nb]=size(B); % Размерности массива B
mmax=0; % Начальное значение максимального размера шрифта
for i=1:nb
m=0; % Инициируем счётчик числа небелых элементов в столбце
for j=1:mb
if B(j,i)<214 % Если текущий элемент НЕ БЕЛЫЙ
% начинаем считать все последующие за ним
% в направлении оси OY НЕ БЕЛЫЕ элементы
m=m+1;
% Запоминаем полученное число, если оно больше
% текущего максимального размера шрифта
mmax=max([mmax,m]);
else % Если цепочка не белых элементов обрывается
m=0; % Обнуляем счётчик числа не белых элементов в столбце
end;
% Отображаем координаты последней проанализированной точки
title(strcat('Row i=',num2str(i),', CoLumn j=',num2str(j),', Font Size=',num2str(mmax)));
pause(0.001);
end;
plot([i i],[1 mb],'b');
end;
hold off;
imshow(B); % Отображение серого рисунка искомого фрагмента
title(strcat('Row i=',num2str(i),', CoLumn j=',num2str(j),', Font Size=',num2str(mmax)));
axis('equal');
figure(1); % Вызов 1-го графического окна
title(strcat('SeLect text fragment for SeaRch with Font Size=',num2str(mmax)));
y(1)=0; y(2)=50;
% Пока ширина (высота) выделенного фрагмента
% больше, чем размер шрифта + 7п.п. продолжаем впроцедуру выделения
while abs(y(1)-y(2))>mmax+7
тут фрагмент удален. Можем для Вас написать подобную программу. Пишите в ВК или Телеграм.
mk=menu('To wide catch!!! Repite SeLection!!!','Ok');
else
title('Text fragment was SeLected!');
break;
end;
end;
clear B; % Очищаем переменную B
S=abs(255-S);
B=S(min(y):max(y),min(x):max(x)); % Запоминаем выделенный фрагмент
[mb,nb]=size(B); % Размерности массива B
[ms,ns]=size(S); % Размерности массива S
%figure(2);
%hold on;
%title(strcat('Row i=',num2str(i),', CoLumn j=',num2str(j),', Font Size=',num2str(mmax)));
%imshow(B); % Отображение серого рисунка выделенного фрагмента
%axis('equal'); % Задаём равномасштабные оси координат
%hold off;
mk=menu('StaRt SeaRch fragment:','1. Yes','2. No');
% Если нажали Yes, то начинаем поиск заданного фрагмента:
if mk==1
C=xcorr2(S,B);
[mC,nC]=max(C);
[Zmax,m]=max(mC);
n=nC(m);
Zmin=min(min(C));
figure(3);
hold on;
%axis('auto');
axis([1 ns 1 ms Zmin Zmax]);
grid on;
[X,Y]=meshgrid(1:ns,1:ms);
mesh(X,Y,C(fix(mb/2)+1:ms+fix(mb/2),fix(nb/2)+1:ns+fix(nb/2)));
for i=1:10
view(0-60/10*i,90-(90-40)/10*i);
pause(0.01);
end;
plot3([m m],[n n],[Zmin Zmax],'ok--','LineWidth',2)
plot3([1 m],[n n],[Zmin Zmin],'ok--','LineWidth',2)
plot3([m m],[1 n],[Zmin Zmin],'ok--','LineWidth',2)
hold off;
figure(1);
hold on;
imshow(S); % Отображение инверсного рисунка
plot([m m],[1 n],'or--','LineWidth',2)
plot([1 m],[n n],'or--','LineWidth',2)
hold off;
clear mC; clear nC;
clear X; clear Y;
end;
%clear S; clear B; clear C;
end; % Конец цикла обслуживания меню выбора файла для анализа