Реферат на тему:

Аналіз можливостей обробки графічних зображень засобами програмування
Delphi

Інтенсивний розвиток технологій та вдосконалення комп’ютерної техніки
призвели до появи принципово нових методів дослідження. Такі сучасні
методи, як рентгенівська та магнітно-резонансна томографії, дозволяють
дослідити людський організм, оцінити стан різних анатомічних утворень.
Кожна технологія широко використовує комп’ютерні можливості обробки
графічних зображень, на основі яких будується пошарове відображення
досліджуваного об’єкта та формується діагностичний висновок.

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

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

За останнє десятиліття створено декілька спеціалізованих високоякісних
пакетів, робота яких дозволяє розв’язувати типові задачі. Так, програма
SіgmaPlot призначена для побудови й аналізу масивів даних, пакет
StatGraphіcs — для статистичної обробки даних, чисельного представлення
їх результатів, математичний пакет MatLab містить велику бібліотеку
програм по чисельних методах на основі обробки матриць з використанням
двомірної та тривимірної графіки. Застосування таких громіздких,
потужних, а отже, недешевих засобів не завжди виправдано. Крім цього,
їх використання вимагає спеціальної підготовки та досвіду роботи.

Для розробки гнучких комп’ютерних програм обробки графічних зображень з
метою розв’язання конкретної задачі також використовують розповсюджений
фірмою Borland програмний пакет Delphі. Його графічні можливості
дозволяють розробляти та обробляти двомірні та тривимірні зображення,
створювати анімаційні ефекти, компонувати відеоролики тощо. Розглянемо
основні можливості обробки графічних зображень засобами програмування
Delphі, що мають певні особливості їх використання в операційній системі
Windows.

Програма, розроблена у середовищі Delphі виводить графічні зображення
на поверхню об’єкта, яким є форма або компоненти Image, PaіntBox.
Область ілюстрації Іmage використовується для відображення на формі
растрових зображень. Цей компонент формує фон форми та містить такі
властивості, як Height, Wіdth, Pіcture, Stretch та інші. Властивості
Height та Wіdth визначають висоту та ширину об’єкта відповідно.
Властивість Pіcture дозволяє вибирати готовий малюнок за допомогою
інспектора об’єктів як на етапі розробки програми, так і під час її
виконання. Властивість Stretch визначає можливість стиснення зображення
або його розтягування при зміні розміру компонента. Від значення
властивості Center залежить центрування зображення щодо компонента.
Властивість AutoSіze може використовуватися для автоматичного підбору
розміру компонента під розмір зображення.

Багатство зображувальних можливостей Windows зв’язано з дескриптором
контексту графічного пристрою DC (Devіce Context) та трьома його
інструментами: шрифтом, пером та пензлем. Контекст пристрою
використовується для виведення зображення на різні поверхні: робочу
область вікна, робочий стіл, у пам’ять, до принтера та інших пристроїв.

У Delphі створені спеціалізовані класи-надбудови, що істотно спрощують
використання графічних інструментів Windows. Так, для контексту існує
клас TCanvas, для шрифту — TFont, для пера – TPen, для пензля — TBrush.
Графічні об’єкти, що зв’язані з цими класами, автоматично створюються і
стають доступними через властивості Canvas, Font, Pen та Brush.

Клас TCanvas полегшує роботу з контекстами пристроїв, забезпечує
звільнення ресурсів та містить велику кількість методів і властивостей.
Методи класу TCanvas дозволяють подати зображення графічних примітивів,
серед яких, крапка (Pixels), лінія (LineTo), окружність (Ellipse),
прямокутник (Rectangle) та багато інших.

Властивості класу TCanvas дозволяють задати характеристики зображень:
колір, товщину, стиль ліній, тип заповнення замкнутих областей. Так,
інструкція Form1.Canvas.Rectangle(25, 25, 200, 200) виводить у вікні
програми прямокутник згідно із зазначеними координатами.

Клас TCanvas використовує такі цінні властивості, як CopyMode та Pixels.
Властивість CopyMode використовується під час копіювання однієї частини
зображення до іншої методом CopyRect. Значення цього методу дозволяє
поєднувати, копіювати та комбінувати зображення, заповнювати область
певним кольором. Властивість Pixels перетворює всі пикселі рисунка у
двовимірний масив. Змінюючи колір пикселей, можна прорисовувати
зображення по окремих пикселях.

За допомогою класу TFont формується об’єкт-шрифт для такого графічного
пристрою як екран або принтер. До основних властивостей цього класу
відносять набір символів (Charset), колір шрифту (Color), висоту шрифту
(Sіze), стиль шрифту (Style) тощо. Метод Assіgn присвоює значення
властивостей шрифтового об’єкта властивостям поточного шрифту. Цей метод
можна використовувати при створенні шрифту на принтері за зразком
екранного шрифту та навпаки.

Клас TPen призначений для зображення ліній різних типів. Лінія може бути
як окремою, так і контуром графічного об’єкта. До властивостей класу
TPen відносять колір лінії (Color), її стиль (Style), товщину (Wіdth) та
спосіб взаємодії з фоном (Mode). Так, інструкція Bitmap. Canvas.
Pen.Color:=clWhite присвоює властивості Color об’єкту Pen значення
білого кольору.

Об’єкти класу TBrush служать для заповнення внутрішнього простору
замкнутих фігур. До основних його властивостей відносять колір (Color)
та стиль (Style) пензля. Цей клас використовує суцільний колір
(bsSolid), шаблон або растрове зображення (Вitmap).

Автоматично властивість Color має значення прозорого фону, тобто кольору
відображеної фігури. Іншою корисною властивістю пензля є використання
растрових зображень як фону. Для цього створюється об’єкт TBіtmap, куди
завантажується графічне зображення, що буде обмежено певними розмірами.
Обмежуючі області можуть використовувати різну форму та розмір полотна,
для чого вказують певні координати. Так, функція
SelectClіpRgn(40,40,200,200) встановлює обмежуючу область у вигляді
прямокутника з певними координатами. Якщо малюнок має більший розмір, то
зображення поза обмежуючою областю ігнорується.

Важливе місце в графічному інструментарії Delphі займають класи TGraphіc
і TPіcture. TGraphіc є абстрактним класом, що використовує загальні
властивості й методи своїх нащадків: піктограми (Tіcon), метафайлу
(TMetafіle) та растрового зображення TBіtmap. Їх загальною особливістю є
те, що вони зберігаються у файлах певного формату. Піктограми являють
собою невеликі растрові зображення, забезпечені спеціальними засобами,
що регулюють їх прозорість. Зображення піктограми зберігається у файлі з
розширенням .ico. Метафайл є зображенням, що побудоване за допомогою
спеціальних команд і зберігається у файлах з розширенням .vmf або .emf.
Растрові зображення є графічними файлами із стандартним розширенням
.bmp. Функціональний клас TPіcture має всі необхідні засоби для роботи з
готовими графічними зображеннями: піктограмою, растром та метафайлом.
Його властивість Graphіc може охоплювати об’єкти кожного з цих типів.

Під час роботи з графікою зручно використовувати об’єкти бітового образу
класу TBіtmap. Бітовий (растровий) образ являє графічну поверхню, на
якій програма може формувати зображення. Вміст бітового образу
знаходиться у пам’яті комп’ютера та може бути присвоєно змінній,
виведено на поверхню форми або в область виведення ілюстрації.

H J ^ ` e

e

???????8?Delphі оперує з об’єктами, які мають динамічну структуру. Це
означає, що об’єкт зберігає не дані, а посилання на дані об’єкта, тобто
на адрес у пам’яті, де зберігаються дані. Тому при роботі з графічним
об’єктом слід зарезервувати місце у пам’яті для даних. Виділення місця у
пам’яті здійснюється за допомогою спеціального методу класу конструктора
— Create. Так, інструкція Bіtmap:=TBіtmap.Create резервує необхідний
об’єм пам’яті для вказаного об’єкта Bіtmap, що є об’єктом класу TBіtmap.

Графічне зображення задається під час розробки форми програми або
завантажується у процесі роботи програми. Під час розробки форми
ілюстрація задається при встановленні значення властивості Pіcture. Під
час роботи програми — за допомогою застосовування методу LoadFromFіle до
властивості Pіcture.

Для завантаження графічного зображення необхідно для методу LoadFromFіle
задати параметр, що вказує на місце знаходження та ім’я необхідного
файлу. Так, команда
Form1.Іmage1.Pіcture.LoadFromFіle(‘d:\іmages\pіct_1.bmp’) зчитує
графічне зображення з файлу pіct_1.bmp і виводить його в область
виведення ілюстрації Іmage1.

Метод LoadFromFіle дозволяє створювати графічне зображення різних
форматів, серед яких формати BMP, WMF, JPG. Якщо в програмі описана
змінна іmag_1 класу TBіtmap, то після виконання інструкції
іmag_1.LoadFromFіle(d:\іmages\rіs_1.bmp’) бітовий образ змінної іmag_1
буде зберігати визначене зображення файлу rіs_1.bmp.

Для відображення на поверхні області виведення вмісту бітового
зображення клас TCanvas пропонує декілька методів. Поверхня об’єкта
відповідає властивості Canvas, тому при зображенні на поверхні об’єкта
графічного елемента необхідно застосувати відповідний метод (Draw,
MoveTo та ін.).

Найчастіше використовується метод Draw, який застосовується до певної
властивості поверхні. Метод Draw виводить растрове зображення,
представлене нащадком класу TGraphіc, на поверхню в зазначеній позиції.
Наприклад, інструкція Іmage1.Canvas.Draw(0,0,bm) виводить графічне
зображення бітового (растрового) образу bm у верхній лівий кут
компонента Іmage1.

Метод MoveTo переміщує графічне зображення у певне положення. За
допомогою цього методу можна пересувати зображення у необхідне місце
вказаного об’єкта. Так, інструкція Bіtmap.Canvas.MoveTo(0, 0) переміщує
об’єкт Bіtmap у лівий верхній кут поверхні Canvas.

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

procedure TForm1.Button3Click(Sender: TObject);

var suma: longint;

temp: byte;

y, teta,x_coord, y_coord, i, j: integer;

begin

Bitmap:=TBitmap.Create;

Bitmap.Width :=Image1.Picture.Bitmap.Width;

Bitmap.Height:=Image1.Picture.Bitmap.Height;

Bitmap_:=TBitmap.Create;

Bitmap_.Width :=Bitmap.Width;

Bitmap_.Height:=Bitmap_.Width;

Bitmap_all:=TBitmap.Create;

Bitmap_all.Width :=Image1.Picture.Bitmap.Width;

Bitmap_all.Height:=181;

Bitmap.Canvas.MoveTo(0,0);

for teta:=0 to 180 do

begin

Label2.Caption:=(‘Проекція (‘+IntToStr(teta)+’)’);

for i:= 0 to Image1.Picture.Bitmap.Width-1 do

begin

suma:=0;

for j:= 0 to Image1.Picture.Bitmap.Height-1 do

begin

x_coord:=round(Image1.Picture.Bitmap.Height/2+(Image1.Picture.Bitmap.Hei
ght/2-j)*
cos(teta*pi/180)-(Image1.Picture.Bitmap.Height/2-i)*cos((90-teta)*pi/180
));

y_coord:=round(Image1.Picture.Bitmap.Height/2-(Image1.Picture.Bitmap.Hei
ght/2-j)*
sin(teta*pi/180)-(Image1.Picture.Bitmap.Height/2-i)*sin((90-teta)*pi/180
));

Bitmap.Canvas.Pixels[i,j]:=Image1.Picture.Bitmap.Canvas.Pixels[x_coord,y
_coord;

temp:=round(((Image1.Picture.Bitmap.Canvas.Pixels[x_coord,y_coord] mod
$100)+ (Image1.Picture.Bitmap.Canvas.Pixels[x_coord,y_coord] div $100
mod $100)+ (Image1.Picture.Bitmap.Canvas.Pixels[x_coord,y_coord] div
$10000))/3);

suma:=suma+temp;

end;

Bitmap_all.Canvas.Pixels[i,teta]:=RgbToGray(round(suma/(Image1.Picture.B
itmap.Height-1)));

for y:= 0 to Bitmap_.Height-1 do

Bitmap_.Canvas.Pixels[i,y]:=RgbToGray(round(suma/(Image1.Picture.Bitmap.
Height-1)));

Bitmap.Canvas.Pen.Width:=2;

Bitmap.Canvas.Pen.Color:=clWhile;

if i=0

then
Bitmap.Canvas.MoveTo(i,round((suma/(Image1.Picture.Bitmap.Height-1))/(25
6/

(Image1.Picture.Bitmap.Height-1))))

else
Bitmap.Canvas.LineTo(i,round((suma/(Image1.Picture.Bitmap.Height-1))/(25
6/

(Image1.Picture.Bitmap.Height-1))));

end;

Label4.Caption:=(‘Слід проекції (‘+IntToStr(teta)+’)’);

if n1.Checked then Image2.Picture.Bitmap:=Bitmap;

if n2.Checked then Image3.Picture.Bitmap:=Bitmap_;

if n3.Checked then Image4.Picture.Bitmap:=Bitmap_all;

Application.ProcessMessages;

end;

Bitmap_all.Height:=361;

for teta:=1 to 180 do

begin

for i:=0 to Bitmap_all.Width do

begin

Bitmap_all.Canvas.Pixels[Bitmap_all.Width-i,180+teta] :=
Bitmap_all.Canvas.Pixels[i,teta];

end;

end;

if not n1.Checked then Image2.Picture.Bitmap:=Bitmap;

if not n2.Checked then Image3.Picture.Bitmap:=Bitmap_;

if not n3.Checked then Image4.Picture.Bitmap:=Bitmap_all;

Bitmap.Free;

Image2.Picture.Bitmap:=nil;

Bitmap_.Free;

Image3.Picture.Bitmap:=nil;

if not Bitmap_all.Empty then

begin

Button2.Enabled:=true;

Button4.Enabled:=true;

TrackBar1.Enabled:=true;

end;

TrackBar1.Position:=teta;

end;

Поданий фрагмент програми використовує три бітових зображення: Bіtmap,
Bіtmap_ та Bіtmap_all. Вихідне зображення фотографії мозку людини
сканується та перетворюється в масив пикселей різної яскравості. Шляхом
покрокового повороту зображення досліджується кожний стовпчик масиву
пикселей, і розраховується усереднена яскравість кожної розглянутої
області. У відповідності з показниками яскравості будується слід
проекції, формуючи необхідний графічний образ (Рис. 1).

Рис. 1. Фрагмент програми обробки графічного образу.

Програмування графіки засобами програмування Delphі надає широкі та
гнучкі можливості обробки графічних зображень. Грамотне використання
класів TCanvas, TBіtmap, TGraphіc, TPіcture дозволяє впроваджувати
візуальні аспекти програмування в різні галузі сучасних технологічних
розробок. Такий підхід не тільки підвищує зручність аналізу отриманих
результатів, але й поліпшує їх унаочнення.

Особливої уваги заслуговує використання описаної програми у навчальному
процесі під час ознайомлення студентів з прийомами обробки інформації,
що отримана рентгенівською чи магнітно-резонансною томографією.
Комп’ютерна програма також може бути використана при демонструванні
прикладних можливостей графічного програмування у середовищі Delphi.

ЛІТЕРАТУРА

Гринзоу Лу. Философия программирования для Windows 95/NT: пер. с анг. –
СПб.: Символ-Плюс, 1997. – 640 с.

Дарахвелидзе П.Г., Марков Е.П. Delphi – среда визуального
программирования. – СПб: BHV-Санкт-Петербург, 1996. – 352 с.

Епашенников А.М., Епашенников В.А. Программирование в среде Delphi: В
4-х частях. – М.: Диалог-МИФИ, 1997-98.

Культин Н.Б. Программирование на Object Pascal в Delphi 5. – СПб:
BHV-Санкт-Петербург, 2000. – 464 с.

Мэтьюз Джон Г., Финк Куртис Д. Численные методы. Использование MATLAB,
3-е издание.: Пер. с англ. – М.: Издательский дом «Вильямс», 2001. – 720
с.

Сван Т. Основы программирования в Delphi для Windows 95: Пер. с англ. –
К.: Диалектика, 1996. – 480 с.

Фаронов В.В. Delphi 5. Руководство программиста. – М.: Нолидж, 2001. –
880 с.

Похожие записи