ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Програмна система обробки та аналізу зображень
         

     

    Інформатика, програмування

    Зміст

    Вступ 3


    Технічні параметри 4

    Можливості системи. 4

    Апаратне забезпечення. 4

    Програмне забезпечення. 4

    Опис структури системи та принципи її роботи 5

    Опис методу 6

    Опис програми 7

    Структура бази для зберігання еталонних символів 9

    Текст програми 12

    Введення

    В даний час, із зростанням числа персональних комп'ютерів, величезнакількість інформації вводиться з паперових носіїв на магнітні дискикомп'ютерів. Зрозуміло це дуже стомлююча робота. І було б непоганомати у своєму розпорядженні програмний засіб, який був би здатнийсприймати вхідний зображення документу, яке взагалі кажучи єкартинкою, і перетворювати його в текст, відкидаючи при цьому всі зайвідеталі зображення
    (Такі як лінії розмітки, обрамлення тощо).

    Це питання хвилює багато фірм з розробки програмного забезпеченняі зараз у світі розроблено кілька програм для розпізнаваннямашинописного тексту. Але це тільки початковий етап на шляху вирішення даноїзавдання. Дані програмні продукти розпізнають текст з досить великоюймовірністю помилки за умови неякісного зображення. Про те, щоброзпізнавати рукописний текст поки навіть не доводиться й говорити.

    Метою розробки даної програмної системи є детальне вивченняданого питання і створення алгоритму, що дозволяє перетворюватиграфічне зображення у текст. Єдина відмінність даної системи відрозроблених раніше це те, що розпізнавати належить ієрогліфи. Ці знакимають істотну відмінність від звичної нам кирилиці та латинських символів.
    Вже одне те, що вони складаються з безлічі різних візерунків відкидає ідеюбудувати розпізнавання на апроксімірованіі зображення символу з допомогоюбудь-якої функції. Хоча тут можна спробувати використовувати фрактальніперетворення, за допомогою яких можна описати будь-як завгодно складнезображення. Але теорія, що описує застосування даних перетвореньє комерційною таємницею і є недоступною.
    Технічні параметри


    Можливості системи.

    Система забезпечує введення сканованого зображення тексту зграфічного файла, записаного в одному з форматів: PCX, BMP, WMF, JPEG,
    GIF. Розмір зображення не повинен перевищувати 3000 х 3000 пікселів. Режимсканування повинен бути вибраний так, щоб розміри окремого символу
    (ієрогліфа) не перевищував 30 пікселів і був не менш 5 пікселів. Допускаєтьсянахил рядків до горизонталі не більше ніж на 6 °. Відстань між окремимирядками тексту не повинно бути менше 1/5 максимальної висоти ієрогліфа.
    Система забезпечує поділ введеного тексту на окремі рядки і наокремі символи. Результатом роботи є візуальне розділення текстуна рядки і символи, а також текстовий файл, що містить координати кожноговиділеного символу тексту в порядку виділення. При поділі символівсистема використовує правило накреслення ієрогліфів, відповідно до якогоокремий ієрогліф вписується в більш-менш правильний квадрат.
    Отже, не гарантується, що тексти, накреслення символів яких невідповідають даному правилу, будуть розбиватися на символи коректно.

    Також як доповнення до обробки зображення система здатнавиділяти окремо вертикальні і горизонтальні лінії. Дана можливістьможе бути використана для аналізу зображення по окремих лініях.

    Зроблені пробні експерименти по Афінах перетворень. Ціперетворення в майбутньому обіцяють дати багато корисного в галузі обробкизображень.


    Апаратне забезпечення.

    Для роботи системи необхідно:

    1. IBM - сумісний персональний комп'ютер з процесором не нижче

    Intel80486sx33, об'ємом оперативної пам'яті не менше 4 Мб.

    2. Сканер будь-якого типу.


    Програмне забезпечення.

    1. Операційна оболонка Windows 95, або Windows NT або Windows версії

    3.1 або 3.11 в комплекті з MS-DOS версії не нижче 3.30.

    2. Програмне забезпечення для сканера, що забезпечує можливість збереження сканованого зображення в одному з форматів PCX, JPG,

    BMP, WMF.


    Опис структури системи та принципи її роботи

    У якості середовища для розробки даної системи обрана операційнаоболонка Microsoft Windows. Це обумовлено тим, що Windows підтримуєроботу з графічними зображеннями на рівні розробника додатків. Тимсамим з роботи виключається питання про кодування своїх коштів по роботі зграфікою. Природно швидкість роботи системи зі стандартними графічнимизасобами багато нижче, ніж безпосередній запис в відеопам'ять, але наданому етапі роботи питання впирається не в швидкість.

    Для розробки системи була обрана середовище програмування Borland
    Delphi виробництва фірми Borland International ® USA, California. Delphiявляє собою середовище, що підтримує візуальне проектуваннядодатків для Windows. При цьому інтерфейс користувача створюється шляхомкомбінування та редагування стандартних компонентів (форм (вікон), меню,полів вводу, статичних текстів, списків різної форми, екранних кнопоктощо), наявних в стандартній бібліотеці візуального конструктора. Середавізуального програмування обрана тому, що вона забезпечуєможливість максимально простого, швидкого і якісного створеннястандартних фрагментів програми [1].

    У порівнянні з іншими системами візуального програмування (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 значень щільності.

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


    Опис програми

    Всі операції здійснюються за допомогою головного меню програми.
    Головне меню складається з наступних пунктів:

    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; < p> 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; end; (try) if Result = mrOK then SetRect;end;

    (Визначення градієнтів Gx Gy і в точці [x, y])procedure TMainForm.DefGradient (var Gx, Gy: real; x, y: word);var a, b, c, d, e, g, h, i: byte;begin with Image.Canvas do begin if Pixels [x-1, y-1] = clBlack then a: = 0 else a: = 1; if Pixels [x, y-1] = clBlack then b: = 0 else b: = 1; if Pixels [x +1, y-1] = clBlack then c: = 0 else c: = 1; if Pixels [x-1, y] = clBlack then d: = 0 else d: = 1; if Pixels [x 1, y] = clBlack then e: = 0 else e: = 1; if Pixels [x-1, y 1] = clBlack then g: = 0 else g: = 1; if Pixels [x, y 1] = clBlack then h: = 0 else h: = 1; if Pixels [x +1, y +1] = clBlack then i: = 0 else i: = 1;

    (Градієнт по X)

    Gx: = g + 2 * h + i - a - 2 * b - c; if Gx <0 then Gx: = 0; if Gx = 0 then Gx: = 0.000001;

    (Градієнт по Y)

    Gy: = c + 2 * e + i - a - 2 * d - 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
    AssignFile (OutF, 'tangs.000');
    Rewrite (OutF);
    (Скануємо все зображення) with Image.Canvas do begin for y: = yStart 1 to yEnd-1 do begin for x: = xStart 1 to xEnd-1 do begin

    DefGradient (Gx, Gy, x, y); (Визначити градієнт в точці [x, y])

    ( if Gx + Gy> 0 then Pixels [x, y 200]: = clRed;)

    Qx: = ArcTan (Gy/Gx);

    Qx: = Round (Qx * 180/Pi);

    (Qx: = Round (90 * Gx/4);

    Qy: = Round (90 * Gy/4 );}

    Str (Qx: 2:0, S1);
    (Str (Qy: 2:0, S2);)

    Write (OutF, S1 + ( '' + S2 +) '|');

    (if (Q = Pi/3) then Pixels [x, y 200]: = clRed;) if (Qx> (DetectRectX) 80) and (Qx <100) (and (Q>
    DetectRect * Pi/180)) then

    Pixels [x, y 200]: = clRed; end; (for x)

    WriteLn (OutF, 'End Line'); end; (for y) end; (with Image.Canvas)
    CloseFile (OutF);end;

    procedure TMainForm.DefPlotn;var i, j, x, y, dx, dy, Range, x1, y1: word;
    Count: word;begin x: = xStart; y: = yStart; dx: = Round ((xEnd-xStart +1) div 3); dy: = Round ((yEnd-yStart +1) div 3); x1: = x; y1: = y;
    (Три квадрата по вертикалі) for i: = 1 to 3 do begin if i = 2 then Range: = (yEnd-yStart +1) - 2 * dy else Range: = dy;

    (Три квадрата по горизонталі) for j: = 1 to 3 do begin if j = 2 then Range: = (xEnd-xStart +1) - 2 * dx else Range: = dx;

    (Скануємо всередині квадрата по y) for y: = y1 to y1 + Range do begin

    (Скануємо всередині квадрата по x) for x: = x1 to x1 + Range do begin

    (Підраховуємо число не білих пікселів) if Image.Canvas.Pixels [x, y] clWhite then Inc (Count); end; (for x) end; (for y) x1: = x1 + dx; (Наступний квадрат по горизонталі) end; (for j) y1: = y1 + dy; (Наступний квадрат по вертикалі) end; (for i)end;

    procedure TMainForm.FormCreate (Sender: TObject);begin
    OpenDialog.FileName: = 'c: delphimydirdiplompictpict1.bmp';
    Image.ImageName: = OpenDialog.FileName;end;

    procedure TMainForm.ImageMouseDown (Sender: 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.ImageMouseUp (Sender: 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.ImageMouseMove (Sender: TObject; Shift: TShiftState; X,
    Y: Integer);begin if not BegSelect then Exit; with Image.Canvas do begin

    Rectangle (xStart, yStart, xEnd, yEnd); xEnd: = X; yEnd: = Y;

    Rectangle ( xStart, yStart, xEnd, yEnd); end; (with)end;

    procedure TMainForm.N4Click (Sender: 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 - xStart +1) div 2; xEnd: = xStart 2 * dx - 1; dy: = (yEnd-yStart +1) div 2; yEnd: = yStart 2 * dy - 1;

    x : = xStart + dx; y: = yStart + dy;
    Randomize; for i: = 1 to 50000 do begin

    Rand: = Random (10);

    Case Rand of

    0 .. 3: begin x: = xStart + 1 + (x-xStart +1) div 2; y: = yStart + 1 + (y-yStart +1) div 2; end ;

    4: begin x: = xStart + dx + (x-xStart +1) div 2; y: = yStart + 1 + (y-yStart +1) div 2; end;

    5: begin x: = xStart + 1 + (x-xStart +1) div 2; y: = yStart + dy + (y-yStart +1) div 2; end;

    6 .. 9: begin x: = xStart + dx + (x-xStart +1) div 2; y: = yStart + dy + (y-yStart +1) div 2; end; end; (Case)

    Image.Canvas.Pixels [x, y]: = clBlue; end; (for i)end;

    procedure TMainForm.N7Click (Sender: 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-xStart +1) div Kx; xEnd: = xStart + Kx * dx - 1; dy: = (yEnd-yStart +1) div Ky ; yEnd: = yStart + Ky * dy - 1; x: = xStart; y: = yStart; for i: = 1 to 100000 do begin

    Rand: = Random (Kx * Ky); if ( Rand = 0) or (Rand = 3) or (Rand = 12) or (Rand = 15) then

    Continue;

    K: = (Rand - Kx * (Rand div Kx)) * dx; x: = K + xStart + 1 + (x-xStart +1)/Kx;

    K: = (Rand div Kx) * dy; y: = K + yStart + 1 + (y-yStart +1)/Ky;

    Image.Canvas.Pixels [Round (x), Round (y)]: = clBlue; end; (for i)end;

    procedure TMainForm.Onemore1Click (Sender: TObject);begin
    OneMore;end;

    procedure TMainForm.Mandel;var
    Z, Z0, C: TComplex; i, x, y: word;begin
    Z0: = TComplex.Create (0,0);
    Z: = TComplex.Create (0,0);
    C: = TComplex.Create (0,0); for y: = yStart to yEnd do begin for x: = xStart to xEnd do begin

    C. Assign (x, y);

    Z. Mul (Z0);

    Z. Plus (C); if (Z. Re <2) and (Z. Im <2) then

    Image.Canvas.Pixels [Z. Re, Z. Im]: = clBlue;

    Z. Assign (0,0); end; (for x) end; (for y)
    C. Free;
    Z. Free;
    Z0.Free;end;

    procedure TMainForm.N8Click (Sender: TObject);begin
    Mandel;end;

    procedure TMainForm.Paporotnik;const
    A: array [0 .. 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: array [1 .. 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 b [k]: = Random (10); if b [k]> 3 then b [k]: = 1; end; (for k)

    i: = 1;
    (B [i]: = 1;) for i: = 1 to 10000 do begin newX: = (a [b [i], 0,0] * x + a [b [i], 0,1] * y + a [b [i], 0,2] * z)/100 + a [b [i], 0,3]; newY: = (a [b [i], 1,0] * x + a [ b [i], 1,1] * y + a [b [i], 1,2] * z)/100 + a [b [i], 1,3]; z: = (a [b [i ], 2,0] * x + a [b [i], 2,1] * y + a [b [i], 2,2] * z)/100 + a [b [i], 2,3 ]; x: = newX; y: = newY;

    Color: = Random (65535);

    Color: = Color * 100;

    Image. Canvas.Pixels [Round (300-x + z), Round (350-y)]: = clGreen; end; (for k)end;

    procedure TMainForm.N9Click (Sender: 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-xStart 1;
    LenY: = yEnd-yStart 1 ; xOld: = xStart; yOld: = yStart; for j: = 1 to 3 do begin if j = 2 then dy: = LenY-2 * Round (LenY/3) else dy: = Round (LenY/3); for i: = 1 to 3 do begin if i = 2 then dx: = LenX-2 * Round (LenX/3) else dx: = Round (LenX/3);
    {------------------------------------------------- -----------------}

    BlackCnt: = 0; (Кількість чорних пікселів в квадранті) for y: = yOld to yOld + dy-1 do begin for x: = xOld to xOld + dx-1 do begin if Image.Canvas.Pixels [x, y] clWhite then Inc (BlackCnt); end; (for x) end; (for y)
    {------------------------------------------------- -----------------}

    TotCnt: = dx * dy;

    P: = BlackCnt/TotCnt; (Щільність пікселів в квадранті)

    Str (P: 1:3, S1);

    S: = S + S1 + ''; xOld: = xOld + dx; end; (for i) yOld : = yOld + dy; end; (for j)
    Result: = S;end; (TMainForm.GetDensity)

    procedure TMainForm.N5Click (Sender: TObject);var
    S: string;
    ID: word;begin
    S: = GetDensity;
    ID: = DataTable.RecordCount;
    DataTable.AppendRecord ([ID 1, S]);end;

    procedure TMainForm.N10Click (Sender: TObject);var
    SValue: string [5];
    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: = Copy (S, (i-1) * 6 +1, 5);

    DStr2: = Copy (DataTableOpis.Value, (i-1) * 6 +1, 5);

    NewValue : = NewValue + Abs (StrToFloat (DStr2)-StrToFloat (DStr1)); end; (for i)

    {------------------- ----------------------------------------} if NewValue

    Value: = NewValue;

    ID: = DataTableID.AsInteger; end;

    DataTable.Next; end; (while)
    ShowMessage (IntToStr (ID) );end;end.

    -----------------------< br>[1] Відомо, що при створенні звичайними засобами ( "руками") інтерфейсу користувача для програм, що працюють в графічних середовищах, на це йде більше 80% часу розробки програми.

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status