RSS    

   Реферат: Программная система обработки и анализа изображений

01010            0101

010                010

01010

0101

01

010

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

Но данный опыт не прошел даром. Были сделаны соответствующие выводы, а именно:

·    Нельзя привязываться к начертанию символа, т.е. к отдельным пикселам.

·    Нужно анализировать изображение не по пикселам, а по отдельным элементам, таким как линии, кружочки, крючечки.

·    Альтернативой предыдущему выводу является определение плотности изображения в отдельных его частях.

Описание метода

В разрабатываемой системе используется именно третий метод, т.е. определение плотности изображения в отдельных его частях.

Его суть заключается в следующем:

·  Вначале на всем изображении выделяется область, ограничивающая отдельный символ.

·  Затем эта область делится на 9 равных частей ( рис. 2 ).

 рис. 2

·  В каждом из 9 квадратов подсчитывается число черных пикселов и делится на площадь данного квадрата, т.е. определяется плотность заполнения в каждом квадрате.

·  Все 9 определенных плотностей преобразуются в формат Х.ХХХ и далее в строку типа Х.ХХХ  Х.ХХХ  Х.ХХХ  Х.ХХХ  Х.ХХХ  Х.ХХХ  Х.ХХХ  Х.ХХХ  Х.ХХХ.

Преобразование в строку производится для более удобного хранения данных в базе данных ( структура базы описана в приложении ), так как это намного удобнее, чем делать в базе 9 полей для хранения 9 значений плотности.

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

Описание программы

Все операции осуществляются посредством главного меню программы. Главное меню состоит из следующих пунктов:

1)   Файл

·    Открыть файл

Открывается окно выбора файла. Возможные маски для выбора ( BMP, PCX, JPG ).

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

·    Выделить линии

..... Перед пользователем появляется диалоговое окно, в котором ему предоставляется возможность выбрать какие линии выделять ( вертикальные или горизонтальные ).

1)   Операции

·    Очистить

........... Тот файл, который был открыт открывается снова и все линии появившиеся в процессе работы удаляются.

·    Определить плотность ( учеба )

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

·    Распознать

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

........... Сравнение происходит следующим образом:

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

1)   Преобразования

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

·    Афинное преобразование

·    Узоры

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

·    Лист папоротника

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

1)   Выход

Выход из программы.


Приложение

Структура базы для хранения эталонных символов

Код символа Эталонная строка

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

Эталонная строка - строка, содержащая в себе все 9 плотностей выделенной области.




Текст программы

{$I CdBase.inc}

{$I CdComp.inc}

unit Main;

interface

uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

  Forms, Dialogs, Reg_imag, Menus, Options, CmplSign, DBTables, DB;

type

  TMainForm = class(TForm)

    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 N2Click(Sender: TObject);

    procedure NFileOpenClick(Sender: TObject);

    procedure NSelectClick(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure ImageMouseUp(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X,

      Y: Integer);

    procedure N4Click(Sender: TObject);

    procedure N7Click(Sender: TObject);

    procedure Onemore1Click(Sender: TObject);

    procedure N8Click(Sender: TObject);

    procedure N9Click(Sender: TObject);

    procedure N5Click(Sender: TObject);

    procedure N10Click(Sender: TObject);

  private

    DetectRectX, DetectRectY: real;   { Угол, под которым выделять линии }

    xStart, xEnd, yStart, yEnd: word;

    BegSelect: boolean;

    procedure DefGradient(var 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.N2Click(Sender: TObject);

begin

  Application.Terminate;

end;

procedure TMainForm.NFileOpenClick(Sender: TObject);

begin

  if OpenDialog.Execute then begin

    Image.ImageName := OpenDialog.FileName;

    NSelect.Enabled := True;

  end

  else NSelect.Enabled := False;

end;

procedure TMainForm.NSelectClick(Sender: TObject);

var

  Result: word;

begin

  OptionForm := nil;

  try

    OptionForm := TOptionForm.Create(Self);

    with OptionForm do begin

      RectXEdit.Text := FloatToStr(DetectRectX);

      RectYEdit.Text := FloatToStr(DetectRectY);

      X1Edit.Text := IntToStr(xStart);

      X2Edit.Text := IntToStr(xEnd);

      Y1Edit.Text := IntToStr(yStart);

      Y2Edit.Text := IntToStr(yEnd);

      Result := ShowModal;

      DetectRectX := StrToInt(RectXEdit.Text);

      DetectRectY := StrToInt(RectYEdit.Text);

      xStart := StrToInt(X1Edit.Text);

      xEnd := StrToInt(X2Edit.Text);

      yStart := StrToInt(Y1Edit.Text);

      yEnd := StrToInt(Y2Edit.Text);

    end; { with }

    finally

      OptionForm.Free;

Страницы: 1, 2, 3


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.