Реферат по предмету "Программирование"


Преобразование графического изображения в текст

Преобразование графического изображения в текст Введение В настоящее время, с ростом числа персональных компьютеров, огромное количество информации вводится с бумажных носителей на магнитные диски компьютеров. Разумеется это очень утомительная работа. И было бы неплохо иметь в своем распоряжении программное средство, которое было бы способно воспринимать входное изображение документа, которое вообще говоря

является картинкой, и преобразовывать его в текст, отбрасывая при этом все лишние детали изображения такие как линии разметки, обрамления и т.п Этот вопрос волнует многие фирмы по разработке программного обеспечения и сейчас в мире разработано несколько программ для распознавания машинописного текста. Но это только начальный этап на пути решения данной задачи. Данные программные продукты распознают текст с довольно большой вероятностью ошибки при условии некачественного

изображения. О том, чтобы распознавать рукописный текст пока даже не приходится и говорить. Целью разработки данной программной системы является детальное изучение данного вопроса и создание алгоритма, позволяющего преобразовывать графическое изображение в текст. Единственное отличие данной системы от разработанных ранее это то, что распознавать предстоит иероглифы. Эти знаки имеют существенное отличие от привычной нам кириллицы и латинских символов.

Уже одно то, что они состоят из множества различных узоров отбрасывает идею строить распознавание на аппроксимировании изображения символа с помощью какой либо функции. Хотя здесь можно попробовать использовать фрактальные преобразования, с помощью которых можно описать любое сколь угодно сложное изображение. Но теория, описывающая применение данных преобразований является коммерческой тайной и является недоступной. Технические параметры

Возможности системы. Система обеспечивает ввод сканированного изображения текста из графического файла, записанного в одном из форматов PCX, BMP, WMF, JPEG, GIF. Размер изображения не должен превышать 3000 х 3000 точек. Режим сканирования должен быть выбран так, чтобы размеры отдельного символа иероглифа не превышал 30 пикселов и был не менее 5 пикселов. Допускается наклон строк к горизонтали не более чем на 6.

Расстояние между отдельными строками текста не должно быть меньше 15 максимальной высоты иероглифа. Система обеспечивает разделение введенного текста на отдельные строки и на отдельные символы. Результатом работы является визуальное разделение текста на строки и символы, а также текстовый файл, содержащий координаты каждого выделенного символа текста в порядке выделения. При разделении символов система использует правило начертания иероглифов, в соответствии с которым

отдельный иероглиф вписывается в более или менее правильный квадрат. Следовательно, не гарантируется, что тексты, начертание символов которых не соответствуют данному правилу, будут разбиваться на символы корректно. Также в качестве дополнения к обработке изображения система способна выделять отдельно вертикальные и горизонтальные линии. Данная возможность может быть использована для анализа изображения по отдельным линиям.

Сделаны пробные эксперименты по афинным преобразованиям. Эти преобразования в будущем обещают дать много полезного в области обработки изображений. Аппаратное обеспечение. Для работы системы требуется IBM - совместимый персональный компьютер с процессором не ниже Intel80486sx33, объемом ОЗУ не менее 4 Мб. Сканер любого типа.

Программное обеспечение. Операционная оболочка Windows 95, либо Windows NT или Windows версии 3.1 или 3.11 в комплекте с MS-DOS версии не ниже 30. Программное обеспечение для сканера, обеспечивающее возможность сохранения сканированного изображения в одном из форматов PCX, JPG, BMP, WMF. Описание структуры системы и принципа ее работы

В качестве среды для разработки данной системы выбрана операционная оболочка Microsoft Windows. Это обусловлено тем, что Windows поддерживает работу с графическими изображениями на уровне разработчика приложений. Тем самым из работы исключается вопрос о кодировании своих средств по работе с графикой. Естественно скорость работы системы со стандартными графическими средствами много ниже, чем непосредственная запись в видеопамять, но на данном этапе работы вопрос упирается не в скорость.

Для разработки системы была выбрана среда программирования Borland Delphi производства фирмы Borland International USA, California. Delphi представляет собой среду, поддерживающую визуальное проектирование приложений для Windows. При этом интерфейс пользователя создается путем комбинирования и редактирования стандартных компонентов форм окон, меню, полей ввода, статических текстов, списков различной формы, экранных кнопок

и т.п имеющихся в стандартной библиотеке визуального конструктора. Среда визуального программирования выбрана потому, что она обеспечивает возможность максимально простого, быстрого и качественного создания стандартных фрагментов программы. По сравнению с другими системами визуального программирования Visual FoxPro, DBase for Windows, Microsoft Visual

Basic, Microsoft Visual C, Gupta SQLWindows и пр. Delphi имеет следующие преимущества. Все вышеперечисленные системы являются интерпретаторами, то есть для выполнения созданных в них программ требуется загрузка модуля интерпретатора языка, либо псевдокомпиляторами, которые формируют программу в виде EXE-модуля, содержащего псевдокод программы определенным образом закодированный текст и модуль интерпретации, выполняющего этот псевдокод. В Delphi результатом генерации проекта является программа

на языке Object Pascal, который компилируется компилятором Borland Pascal 8.0 в EXE - модуль, либо DLL - библиотеку. EXE - модуль содержит процессорный код и может быть запущен непосредственно из Windows. DLL-библиотеку может использовать любое Windows - приложение, в том числе написанное на другом языке. Действительная компиляция обеспечивает значительно большее быстродействие и дает выигрыш по памяти

и дисковому пространству если учитывать ресурсы, потребляемые модулем интерпретации в интерпретирующих системах. В отличие от ряда систем Visual FoxPro, DBase for Windows, Microsoft Visual Basic Delphi обеспечивает возможность визуального конструирования не только интерфейса, но и ряда стандартных модулей программы, не отображаемых на экране. Кроме того, Delphi имеет стандартные средства создания собственных экранных и невидимых компонентов,

что позволяет неограниченно расширять набор объектов, использование которых возможно в любом проекте и ничем не отличается от использования стандартных объектов библиотеки Delphi. В Delphi доступны тексты программы, порожденной визуальным конструктором, причем изменения в них не влияют на возможность дальнейшей обработки их конструктором. Это дает возможность производить требуемую коррекцию работы объектов программы, если она не обеспечивается

визуальным конструктором. Таким образом, Delphi удовлетворяет требованиям удобства, быстроты и качества разработки. Кроме того, использование языка Pascal позволяет обеспечить приемлемую скорость выполнения преобразований, требующих большого объема вычислений за счет действительной компиляции и возможности непосредственной работы с памятью компьютера. Первоначально планировалось создать алгоритм кодирования символа, который бы позволял осущесвлять его однозначную идентификацию рис.

1 . рис. 1 Так в нем планировалось белые пикселы кодировать 0, а черные - 1 и рассматривать их ни как отдельные а группой, т.е. группа белых пикселов - это 0, далее группа черных - 1 и т.д. В результате, символ, заключенный в прямоугольную рис. 1 рамку дает следующий код 010 01010 01010 0101010 010 01010 01010 0101010 010 01010 01010 0101 010 010 01010 0101 01 010 Но на практике оказалось, что данный способ не подходит для решаемой задачи, т.к. он очень сильно привязан

к начертанию символа. При изменении размера символа или при немного отличном начертании его код изменяется очень существенно. При увеличении размера символа появляются дополнительные строки, а значит и дополнительные символы кода. Следовательно однозначное декодирование символа при данных обстоятельствах не представляется возможным. Но данный опыт не прошел даром. Были сделаны соответствующие выводы, а именно Нельзя привязываться к начертанию символа, т.е. к отдельным пикселам.

Нужно анализировать изображение не по пикселам, а по отдельным элементам, таким как линии, кружочки, крючечки. Альтернативой предыдущему выводу является определение плотности изображения в отдельных его частях. Описание метода В разрабатываемой системе используется именно третий метод, т.е. определение плотности изображения в отдельных его частях. Его суть заключается в следующем Вначале на всем изображении выделяется область, ограничивающая отдельный символ.

Затем эта область делится на 9 равных частей рис. 2 . рис. 2 В каждом из 9 квадратов подсчитывается число черных пикселов и делится на площадь данного квадрата, т.е. определяется плотность заполнения в каждом квадрате. Все 9 определенных плотностей преобразуются в формат Х.ХХХ и далее в строку типа Х.ХХХ Х.ХХХ Х.ХХХ Х.ХХХ

Х.ХХХ Х.ХХХ Х.ХХХ Х.ХХХ Х.ХХХ. Преобразование в строку производится для более удобного хранения данных в базе данных структура базы описана в приложении , так как это намного удобнее, чем делать в базе 9 полей для хранения 9 значений плотности. Декодирование символа производится аналогичным способом, только полученные данные сравниваются со значениями хранимыми в базе данных. Описание программы Все операции осуществляются посредством главного меню программы.

Главное меню состоит из следующих пунктов Файл Открыть файл Открывается окно выбора файла. Возможные маски для выбора BMP, PCX, JPG . Если выбранный файл является правильным графическим файлом, то хранимое в нем изображение выводится в окно программы. Выделить линии Перед пользователем появляется диалоговое окно, в котором ему предоставляется возможность выбрать какие линии выделять вертикальные или горизонтальные .

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

Распознать Этот пункт противоположен предыдущему. С помощью мышки выделяется нужный символ и выбирается данный пункт. Происходит определение плотности выбранного символа и далее в базе осуществляется поиск записи, у которой поле с эталонной строкой более сходно с плотностью выделенного символа. Сравнение происходит следующим образом Определяется и складываются между собой разности между плотностями

эталонного и выделенного символами для каждого квадрата. Тот эталонный символ, у которого полученная сумма окажется наименьшей считается эквивалентом для выделенного. Преобразования Эти преобразования являются экспериментальными и не являются целью поставленной задачи. Полученные результаты при более глубоком исследовании могут быть в дальнейшем использованы для обработки изображений. Афинное преобразование Узоры Эти два пункта строят изображение пользуясь афинными преобразованиями

с различными коэффициентами. В зависимости от этих коэффициентов изображения получаются различными. Лист папоротника Опять же основываясь на афинных преобразованиях строится лист папоротника. Данное преобразование имеет огромное практическое значение, так как относительно сложное изображение лист папоротника строится с помощью одной формулы. Выход Выход из программы. Приложение Структура базы для хранения эталонных символов

Код символаЭталонная строка Код символа - однозначно идентифицирует хранимый символ. Так как в базе хранятся эталоны иероглифов, для которых в русском алфавите нет примера начертания, то для замены распознанного символа нужно еще хранить и его эталонное изображение. Но так как целью данной работы является не замена распознанных символов на эталонные, а только соотнесение с эталоном, то для экономии дискового пространства решено хранить не эталонное изображение символа,

а только его уникальный код, с помощью которого можно однозначно идентифицировать символ. Эталонная строка - строка, содержащая в себе все 9 плотностей выделенной области. Текст программы I CdBase.inc I CdComp.inc unit Main interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, Regimag, Menus, Options,

CmplSign, DBTables, DB type TMainForm classTForm MainMenu TMainMenu N1 TMenuItem N2 TMenuItem Image TMultiImage N3 TMenuItem NFileOpen TMenuItem OpenDialog TOpenDialog NSelect TMenuItem N4 TMenuItem N5 TMenuItem N6 TMenuItem N7 TMenuItem Onemore1 TMenuItem N8 TMenuItem N9 TMenuItem

DataTable TTable N10 TMenuItem DataTableOpis TStringField DataTableID TFloatField procedure N2ClickSender TObject procedure NFileOpenClickSender TObject procedure NSelectClickSender TObject procedure FormCreateSender TObject procedure ImageMouseDownSender TObject Button TMouseButton Shift

TShiftState X, Y Integer procedure ImageMouseUpSender TObject Button TMouseButton Shift TShiftState X, Y Integer procedure ImageMouseMoveSender TObject Shift TShiftState X, Y Integer procedure N4ClickSender TObject procedure N7ClickSender TObject procedure Onemore1ClickSender

TObject procedure N8ClickSender TObject procedure N9ClickSender TObject procedure N5ClickSender TObject procedure N10ClickSender TObject private DetectRectX, DetectRectY real Угол, под которым выделять линии xStart, xEnd, yStart, yEnd word BegSelect boolean procedure DefGradientvar Gx, Gy real x,y word procedure SetRect procedure DefPlotn procedure

AfinConvert procedure OneMore procedure Mandel procedure Paporotnik function GetDensity string public Public declarations end var MainForm TMainForm implementation R .DFM procedure TMainForm.N2ClickSender TObject begin Application.Terminate end procedure TMainForm.NFileOpenClickSender TObject begin if OpenDialog.

Execute then begin Image.ImageName OpenDialog.FileName NSelect.Enabled True end else NSelect.Enabled False end procedure TMainForm.NSelectClickSender TObject var Result word begin OptionForm nil try OptionForm TOptionForm.CreateSelf with OptionForm do begin RectXEdit.Text FloatToStrDetectRectX

RectYEdit.Text FloatToStrDetectRectY X1Edit.Text IntToStrxStart X2Edit.Text IntToStrxEnd Y1Edit.Text IntToStryStart Y2Edit.Text IntToStryEnd Result ShowModal DetectRectX StrToIntRectXEdit.Text DetectRectY StrToIntRectYEdit.Text xStart StrToIntX1Edit.Text xEnd StrToIntX2Edit.

Text yStart StrToIntY1Edit.Text yEnd StrToIntY2Edit.Text end with finally OptionForm.Free end try if Result mrOK then SetRect end Определение градиентов Gx и Gy в точке x,y procedure TMainForm.DefGradientvar Gx, Gy real x,y word var a, b, c, d, e, g, h, i byte begin with Image.Canvas do begin if Pixelsx-1,y-1 clBlack then a 0 else a 1 if

Pixelsx,y-1 clBlack then b 0 else b 1 if Pixelsx1,y-1 clBlack then c 0 else c 1 if Pixelsx-1,y clBlack then d 0 else d 1 if Pixelsx1,y clBlack then e 0 else e 1 if Pixelsx-1,y1 clBlack then g 0 else g 1 if Pixelsx,y1 clBlack then h 0 else h 1 if Pixelsx1,y1 clBlack then i 0 else i 1 Градиент по X Gx g 2h i - a - 2b - c if Gx 0 then Gx 0 if Gx 0 then

Gx 0.01 Градиент по Y Gy c 2e i - a - 2d - g if Gy 0 then Gy 0 end with Image end procedure TMainForm.SetRect var x, y word Gx, Gy, Qx, Qy real OutF TextFile S1,S2 string begin AssignFileOutF, tangs.000 RewriteOutF Сканируем все изображение with Image.Canvas do begin for y yStart1 to yEnd-1 do begin for x xStart1 to xEnd-1 do begin

DefGradientGx,Gy,x,y Определить градиент в точке x,y if GxGy 0 then Pixelsx,y200 clRed Qx ArcTanGyGx Qx RoundQx180Pi Qx Round90Gx4 Qy Round90Gy4 StrQx20, S1 StrQy20, S2 WriteOutF, S1 S2 if Q -Pi3 or Q Pi3 then Pixelsx,y200 clRed if Qx DetectRectX80 and Qx 100 and Q DetectRectPi180 then

Pixelsx,y200 clRed end for x WriteLnOutF, End Line end for y end with Image.Canvas CloseFileOutF end procedure TMainForm.DefPlotn var i, j, x, y, dx, dy, Range, x1, y1 word Count word begin x xStart y yStart dx RoundxEnd-xStart1 div 3 dy RoundyEnd-yStart1 div 3 x1 x y1 y Три квадрата по вертикали for i 1 to 3 do begin if i 2 then

Range yEnd-yStart1 - 2dy else Range dy Три квадрата по горизонтали for j 1 to 3 do begin if j 2 then Range xEnd-xStart1 - 2dx else Range dx Сканируем внутри квадрата по y for y y1 to y1Range do begin Сканируем внутри квадрата по x for x x1 to x1Range do begin Подсчитываем число не белых пикселов if Image.Canvas.Pixelsx,y clWhite then IncCount end for x end for y x1 x1dx

Следующий квадрат по горизонтали end for j y1 y1dy Следующий квадрат по вертикали end for i end procedure TMainForm.FormCreateSender TObject begin OpenDialog.FileName cdelphimydirdiplompictpict1.bmp Image.ImageName OpenDialog.FileName end procedure TMainForm.ImageMouseDownSender

TObject Button TMouseButton Shift TShiftState X, Y Integer begin if Button mbRight then begin Image.ImageName OpenDialog.FileName Exit end BegSelect True with Image.Canvas do begin Pen.Mode pmXor Pen.Color clGreen Pen.Style psDot Brush.Style bsClear xStart X yStart Y xEnd

X yEnd Y end with end procedure TMainForm.ImageMouseUpSender TObject Button TMouseButton Shift TShiftState X, Y Integer begin BegSelect False with Image.Canvas do begin Pen.Mode pmCopy Pen.Color clBlack Pen.Style psSolid Brush.Style bsSolid end with end procedure TMainForm.

ImageMouseMoveSender TObject Shift TShiftState X, Y Integer begin if not BegSelect then Exit with Image.Canvas do begin RectanglexStart, yStart, xEnd, yEnd xEnd X yEnd Y RectanglexStart, yStart, xEnd, yEnd end with end procedure TMainForm.N4ClickSender TObject begin Image.ImageName

OpenDialog.FileName end Афинное преобразование procedure TMainForm.AfinConvert var dx, dy, Rand word A, B, C, D, E, F real x, y word i longint begin A 0.5 B 0.5 E 0 C 0.3 D 0 F 1 dx xEnd-xStart1 div 2 xEnd xStart 2dx - 1 dy yEnd-yStart1 div 2 yEnd yStart 2dy - 1 x xStartdx y yStartdy

Randomize for i 1 to 50000 do begin Rand Random10 Case Rand of 0 3 begin x xStart 1 x-xStart1 div 2 y yStart 1 y-yStart1 div 2 end 4 begin x xStart dx x-xStart1 div 2 y yStart 1 y-yStart1 div 2 end 5 begin x xStart 1 x-xStart1 div 2 y yStart dy y-yStart1 div 2 end 6 9 begin x xStart dx x-xStart1 div 2 y yStart dy y-yStart1 div 2 end end Case Image.Canvas.Pixelsx,y clBlue end for i end procedure

TMainForm.N7ClickSender TObject begin AfinConvert end procedure TMainForm.OneMore var dx, dy, Rand, Kx, Ky word A, B, C, D, E, F real x, y, K real i longint begin Kx 4 Ky 4 dx xEnd-xStart1 div Kx xEnd xStart Kxdx - 1 dy yEnd-yStart1 div Ky yEnd yStart Kydy - 1 x xStart y yStart for i 1 to 10 do begin

Rand RandomKxKy if Rand 0 or Rand 3 or Rand 12 or Rand 15 then Continue K Rand - KxRand div Kx dx x K xStart 1 x-xStart1 Kx K Rand div Kxdy y K yStart 1 y-yStart1 Ky Image.Canvas.PixelsRoundx,Roundy clBlue end for i end procedure TMainForm.Onemore1ClickSender TObject begin OneMore end procedure

TMainForm.Mandel var Z, Z0, C TComplex i, x, y word begin Z0 TComplex.Create0,0 Z TComplex.Create0,0 C TComplex.Create0,0 for y yStart to yEnd do begin for x xStart to xEnd do begin C.Assignx,y Z.MulZ0 Z.PlusC if Z.Re 2 and Z.Im 2 then Image.Canvas.PixelsZ.Re,Z.Im clBlue Z.Assign0,0 end for x end for y

C.Free Z.Free Z0.Free end procedure TMainForm.N8ClickSender TObject begin Mandel end procedure TMainForm.Paporotnik const A array0 3, 0 2, 0 3 of integer 0,0,0,0,0,20,0,0,0,0,0,0, 85,0,0,0,0,85,11,70,0 10,85,0, 31 41,0,0,10,21,0,21,0,0,30,0, -29,40,0,0,10,19,0,56,0,0,30,0 var b array1 15000 of word k, n, i word newX, newY, z, x, y real Color longint begin x 0 y 0 z 0 Randomize for k 1 to 15000 do begin bk

Random10 if bk 3 then bk 1 end for k i 1 bi 1 for i 1 to 10000 do begin newX abi,0,0x abi,0,1y abi,0,2z 100 abi,0,3 newY abi,1,0x abi,1,1y abi,1,2z 100 abi,1,3 z abi,2,0x abi,2,1y abi,2,2z 100 abi,2,3 x newX y newY Color Random65535 Color Color100 Image.Canvas.PixelsRound300-xz, Round350-y clGreen end for k end procedure TMainForm.N9ClickSender TObject begin Paporotnik end function

TMainForm.GetDensity string var i, j byte LenX, LenY, x, y, xOld, yOld, dx, dy word BlackCnt, TotCnt word P real Плотность пикселов в квадранте S, S1 string begin Определяем плотность в 9 квадрантах выделенного диапазона S LenX xEnd-xStart1 LenY yEnd-yStart1 xOld xStart yOld yStart for j 1 to 3 do begin if j 2 then dy LenY-2RoundLenY3 else dy RoundLenY3 for i 1 to 3 do begin if i 2 then dx

LenX-2RoundLenX3 else dx RoundLenX3 BlackCnt 0 Кол-во черных пикселов в квадранте for y yOld to yOlddy-1 do begin for x xOld to xOlddx-1 do begin if Image.Canvas.Pixelsx,y clWhite then IncBlackCnt end for x end for y TotCnt dxdy P BlackCntTotCnt Плотность пикселов в квадранте StrP13, S1 S SS1 xOld xOlddx end for i yOld yOlddy end for j

Result S end TMainForm.GetDensity procedure TMainForm.N5ClickSender TObject var S string ID word begin S GetDensity ID DataTable.RecordCount DataTable.AppendRecordID1, S end procedure TMainForm.N10ClickSender TObject var SValue string5 S, DStr1, DStr2, OldS string Value,

NewValue real i byte ID word begin S GetDensity OldS S DataTable.First Value 100 ID 0 while not DataTable.EOF do begin NewValue 0 for i 1 to 9 do begin DStr1 CopyS, i-161, 5 DStr2 CopyDataTableOpis.Value, i-161, 5 NewValue NewValue AbsStrToFloatDStr2-StrToFloatDStr1 end for i if

NewValue Value then begin Value NewValue ID DataTableID.AsInteger end DataTable.Next end while ShowMessageIntToStrID end end.



Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.