Розробка програми для масштабувания зображення

Автор: Пользователь скрыл имя, 26 Февраля 2013 в 20:51, дипломная работа

Описание работы

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

Содержание

ВСТУП……………………………………………………………...……………5
РОЗДІЛ 1 ТЕОРЕТИЧНА ЧАСТИНА ………………………………………...6
1.1 Комп'ютерна графіка……………………………………….….6
1.2 Растрова графіка……………………………………………….7
1.3 Векторна графіка………………………………….………….13
1.4 Формати графічних файлів …………………………………17
1.5 Алгоритми масштабування………………………………….18
1.5.1 EPX/Scale2x/AdvMAME2x…………………...……..21
1.5.2 Eagle Eagle………………………….……………..….22
1.5.3 2xSaI…………………………….………………….…23
1.5.4 Сімейство hqnx………………………………………23
1.5.5 Алгоритм в Паскалі………………………………….24
1.5.6 Алгоритм Копф-Ліщинський……………………….24
1.5.7 Застосування в емуляторах ігрових приставок……24
РОЗДІЛ 2 ПРАКТИЧНА ЧАСТИНА…………………………………………26
2.1 Програма в роботі………………………………………….…26
ВИСНОВКИ........................................................................................................33
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ………………………………...……34
ДОДАТОК…………………………

Работа содержит 1 файл

Ministerstvo_obrazovania_Ukrainy000.doc

— 1.82 Мб (Скачать)

  Оберемо наступні характеристики:

1. коефіцієнт викривлення палітри - обчислюється як відношення різниці кількості кольорів вихідної і модифікованої палітри до кількості кольорів вихідної;

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

3 .ступінь деформації зображення - проводиться контурний аналіз зображення, виділяються межі об'єктів і порівнюються безпосередньо межі (аналізується форма), результат - відсоток викривлення форми.

Для порівняння обрані алгоритми інтерполяції методом найближчого сусіда, білінійна інтерполяція, бікубічна інтерполяція, фільтр Ланцоша. Масштабування застосовувалося до зображення розміром 500х500 пікселів. Воно було зменшено в 4 рази, а потім відновлено різними алгоритмами. Приклад показаний на рис. 3, а також на таблиці 2.

 

 

Рис. 3 – а) оригінальне зображення; б) зменшене зображення; в) збільшення алгоритмом найближчого сусіда; г) збільшення з використання білінійної інтерполяції; д) збільшення з використанням бікубічної інтерполяції; е) використання фільтра Ланцоша

 

 
Алгоритм

Коефіцієнт викривлення палітри

Коефіцієнт викривлення пікселів

Ступінь деформації зображення

Інтерполяція методом  найближчего сусіда

0.3

1.6

2.4

Білінійна інтерполяція

1.8

1.48

1.7

Бікубічна інтерполяція

1.3

1.3

1.3

Фільтр Ланцоша

1.1

1.15

1.06


 

Таблиця 2 – Порівняння алгоритмів масштабування

 

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

 

 

 

Алгоритми

EPX/Scale2x/AdvMAME2x:

EPX («Eric's Pixel eXpansion»,  піксельний збільшення Еріка) - алгоритм, розроблений Еріком Джонстоном  з LucasArts приблизно в 1992 році , при  портуванні движка SCUMM з IBM PC (дозвіл 320 × 200, 256 квітів) на перші кольорові  комп'ютери Macintosh, де дозвіл було вище приблизно удвічі.

Алгоритм працює наступним чином:

  A - \ 1

C P B - / 3 4

  D

 Якщо C == A => 1 = A

 Якщо A == B => 2 = B

 Якщо B == D => 4 = D

 Якщо D == C => 3 = C

 Якщо 3 або більше пікселів з A, B, C, D однакові: 1 = P, 2 = P, 3 = P, 4 = P

Наступні реалізації цього алгоритму (такі як AdvMAME2x і Scale2x, розроблені приблизно в 2001 році) мають  іншу (більш ефективну), але функціонально  ідентичну, реалізацію:

  A - \ 1

C P B - / 3 4

  D

1 = P; 2 = P; 3 = P; 4 = P;

 Якщо C == A і  C! = D і A! = B => 1 = A

 Якщо A == B і  A! = C і B! = D => 2 = B

 Якщо B == D і  B! = A і D! = C => 4 = D

 Якщо D == C і  D! = B і C! = A => 3 = C

AdvMAME4x/Scale4x - це  просто двічі застосований EPX.

 

Scale3x/AdvMAME3x:

Алгоритм AdvMAME3x/Scale3x - не те ж саме, що EPX, але вони досить схожі між собою:

A B C - \ 1 2 3

D E F> 4 5 6

G H I - / 7 8 9

1 = E; 2 = E; 3 = E; 4 = E; 5 = E; 6 = E; 7 = E; 8 = E; 9 = E;

 Якщо D == B і  D! = H і B! = F => 1 = D

 Якщо (D == B і  D! = H і B! = F і E! = C) або (B == F і B! = D і F! = H і E! = A) => 2 = B

 Якщо B == F і  B! = D і F! = H => 3 = F

 Якщо (H == D і  H! = F і D! = B і E! = A) або (D == B і D! = H і B! = F і E! = G) => 4 = D

5 = E

 Якщо (B == F і  B! = D і F! = H і E! = I) або (F == H і F! = B і H! = D і E! = C) => 6 = F

 Якщо H == D і H! = F і D! = B => 7 = D

 Якщо (F == H і  F! = B і H! = D і E! = G) або (H == D і H! = F і D! = B і E! = I) => 8 = H

 Якщо F == H і  F! = B і H! = D => 9 = F

 

Eagle Eagle:

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

 

Спочатку: | Потім:

. . . - \ CC | S T U - \ 1 лютого

. C. - / CC | V C W - / 3 4

. . . | X Y Z

              | Якщо V == S == T => 1 = S

              | Якщо T == U == W => 2 = U

              | Якщо V == X == Y => 3 = X

              | Якщо W == Z == Y => 4 = Z

Таким чином, одиночний  чорний піксел на білому фоні при застосуванні даного алгоритму розчиниться. Ця помилка  виправлена ​​в алгоритмах 2xSaI і HQ3x.

 

2xSaI:

2xSaI, (2x Scale and Interpolation, дворазове збільшення і інтерполяція), є удосконаленням алгоритму Eagle. Був розроблений Дереком Ліау Кия Фа (Derek Liauw Kie Fa), також відомим як Kreed, спочатку для використання в емуляторах, де і понині є досить популярним алгоритмом. Багато популярних емулятори, такі як ZSNES, Jnes, DOSBox і VisualBoyAdvance, мають підтримку даного алгоритму виводу. Для використання алгоритму в не-GPL продуктах розробнику доведеться переписати його без використання коду, написаного Kreed.

 

Сімейство hqnx:

Максим Стьопін  розробив алгоритми hq2x, hq3x і hq4x для збільшення в пропорціях 2:1, 3:1 і 4:1 відповідно. Колір  кожного пікселя порівнюється з  вісьмома сусідніми, сусіди позначаються як близькі й далекі, далі використовується пре-генерована таблиця для відшукання необхідного співвідношення значень для кожного з 4, 9 або 16 вихідних пікселів. Алгоритм hq3x відмінно згладжує діагональні лінії з нахилом ± 1:2, ± 1:1 і ± 2:1 (за умови відсутності антиалиасинга на вході алгоритму); лінії з іншим коефіцієнтом нахилу будуть представлені як ламані з вищезазначених діагональних. Добре згладжуються круті криві. На відміну від 2xSaI, до висновку застосовується антиалиасинг.

Зображення, збільшене  в 3 рази методом найближчого сусіда

Зображення, отримане при використанні алгоритму hq3x.

 

Алгоритм в  Паскалі:

При цьому перетворенні початок координат і напрямок осей старої і нової вісі координат однакова, але масштаб по осях різний.

Нехай відрізок одиничної довжини на вихідної вісі X стає відрізком довжини Sx на новій вісі Х ', а одиничний відрізок на колишній осі Y стає відрізком довжиною Sy на нової. Тоді точка (x, y) в колишній системі має координати (x * Sx, y * Sy) у новій системі. Перетворення масштабування виконуються за допомогою матриці масштабування.

 

Алгоритм Копф-Ліщинський:

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

 

Застосування в емуляторах ігрових приставок:

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

Високооптимізовані  алгоритми дають чітку і різку картинку з мінімальним розмиттям. Алгоритми масштабування піксельної графіки були реалізовані для безлічі емуляторів, 2D-ігрових движків і движків для ігор-переробок, наприклад, для AdvanceMAME, DOSBox, і ScummVM. Вони отримали високу оцінку серед геймерів, які стали переробляти гри,

написані в 80-х  і 90-х. В даний час такі фільтри  використовуються в комерційних  емуляторах Xbox Live, Virtual Console, і PSN для  того, щоб класичні ігри низького дозволу  краще виглядали на дисплеях високого дозволу. До таких ігор належать Sonic's Ultimate Genesis Collection, Castlevania: The Dracula X Chronicles, Castlevania: Symphony of the Night, і Akumajō Dracula X Chi no Rondo .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Розділ 2. ПРАКТИЧНА ЧАСТИНА

 

 

2.1 Програма в роботі

 

Створена програма, виконує масштабування зображення, за допомогою повзунків «масштаб в ширину на» та «масштаб в высоту на» ми можемо обрати необхіний відсоток для зменшення, або збільшення зображення.

 

 

Рис. 4 – Інтерфейс програми

 

 

 

 

Для початку  роботи потрібно обрати в робочому меню вкладку «Файл» та натиснути «Открыть» і знайти необхідне зображення:

 

 

Рис. 5 – Пошук зображення

 

 

 

 

 

 

 

 

 

 

 

 

Обравши зображення, можна починати роботу з ним:

 

Рис. 6 – Робота з зображенням

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При масштабуванні  зображення ,знизу, можна побачити полосу виконання обробки:

 

Рис. 7 – Полоса прогресу виконання

 

 

 

 

 

 

 

 

 

 

 

 

Після налаштувань  користувача, програма може зберегти зображення натиснув «Файл», а потім «Сохранить как» або Сохранить»:

 

Рис. 8 – Збереження зображення

 

 

 

 

 

 

 

 

 

 

 

 

Якщо результат  не втішив користувача, то можна почати все спочатку шляхом натискання вкладки  «Вернуть оригинал»:

 

Рис. 9 – Повернення оригіналу

 

 

 

 

 

 

 

 

 

 

 

 

Якщо ж не обрати зображення та вибрати функцію «Масштабировать», то програма виведе таке повідомленя:

 

 

Рис. 10 – Повідомлення про помилку

 

 

 

 

 

 

 

 

 

 

 

 

ВИСНОВКИ

Після виконання  роботи, робимо висновки:

  1. Закріплення теоретичного матеріалу по темі коп’ютерна графіка.
  2. Розроблення власного алгоритму масштабуваня.
  3. Реалізація алгоритму в програмі, для подальшого використання.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ

 

  1. Аладьев В.З. Тупло В.Г. Turbo Pascal для всех. -К.: Техника, 1993. -176с.
  2. Бартків А.Б. та ін.Турбо Паскаль: Алгоритми і програми. -К.: Вища школа, 1992.
  3. Джонс Ж., Харроу К. Решение задач в Турбо Паскаль. -М.:Финансы и статистика, 1991. -720с.
  4. Довгаль С.И., Сбитнев А.И. Интерфейс современной программной системы Турбо Паскаль 7.0. -К.: Информсистема-сервис, 1994. -416с.
  5. Дж. Лі, Б. Уер. Тривимірна графіка та анімація. — 2-е вид. — М. : Вільямс, 2002. — 640 с.
  6. Д. Херн, М. П. Бейкер. Комп'ютерна графіка й стандарт OpenGL. — 3-е вид. — М. : Вільямс, 2005. — 1168 с.
  7. Е. Енджел. Інтерактивна комп'ютерна графіка. Вступний курс на базі OpenGL. — 2-е вид. — М. : Вільямс, 2001. — 592 с.
  8. Аладьев В.З. Тупло В.Г. Turbo Pascal для всех. -К.: Техника, 1993. -176с.
  9. Бартків А.Б. та ін.Турбо Паскаль: Алгоритми і програми. -К.: Вища школа, 1992. -248с.
  10. Турбо Паскаль 7.0. -К.: Информсистема-сервис, 1994. -416с.
  11. Йенсен К., Вирт Н. Паскаль. Руководство пользователя и описание языка. -М.: Финансы и статистика, 1989. -256с.
  12. Паскаль для персональных компьютеров: Справочное пособие. -М.: Высшая школа, 1991. -365с.
  13. Перминов О.Н. Программирование на языке Паскаль.  Справочник. -М.: Радио и связь., 1989. -129с.
  14. Фаронов В.В. Турбо Паскаль 7.0. Практика программирования. Учебное пособие. -М.: Нолидж, 1997. -432с.
  15. Никулин Е. А. Компьютерная геометрия и алгоритмы машинной графики. — СПб: БХВ-Петербург, 2003. — 560 с. — 3000 экз. — ISBN 5-94157-264-6
  16. Компьютер рисует фантастические миры (ч.2) // Компьютер обретает разум = Artificial Intelligence Computer Images / под ред. В.Л. Стефанюка. — М.: Мир, 1990. — 240 с. — 100 000 экз. — ISBN 5-03-001277-X (рус.); 7054 0915 5 (англ.)
  17. Дональд Херн, М. Паулин Бейкер. Компьютерная графика и стандарт OpenGL = Computer Graphics with OpenGL. — 3-е изд. — М.: «Вильямс», 2005. — С. 1168. — ISBN 5-8459-0772-1
  18. Эдвард Энджел. Интерактивная компьютерная графика. Вводный курс на базе OpenGL = Interactive Computer Graphics. A Top-Down Approach with Open GL. — 2-е изд. — М.: «Вильямс», 2001. — С. 592. — ISBN 5-8459-0209-6
  19. Сергеев Александр Петрович, Кущенко Сергей Владимирович. Основы компьютерной графики. Adobe Photoshop и CorelDRAW - два в одном. Самоучитель. — М.: «Диалектика», 2006. — С. 544. — ISBN 5-8459-1094-3
  20. Кнабе Г. А. Энциклопедия дизайнера печатной продукции. Профессиональная работа. — К.: «Диалектика», 2005. — С. 736. — 3000 экз. — ISBN 5-8459-0906-6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ДОДАТКИ

 

 

 

 

 

 

 

 

 

 

 

 

 

ДОДАТОК А 
КОД ПРОГРАМИ  

unit Unit1;

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtDlgs, Menus, ExtCtrls, Buttons, ComCtrls, StdCtrls, Gauges;

 

type

  TForm1 = class(TForm)

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    N5: TMenuItem;

    OpenPictureDialog1: TOpenPictureDialog;

    SavePictureDialog1: TSavePictureDialog;

    N7: TMenuItem;

    N8: TMenuItem;

    ScrollBox1: TScrollBox;

    Image1: TImage;

    GroupBox1: TGroupBox;

    Gauge1: TGauge;

    ComboBox1: TComboBox;

    ComboBox2: TComboBox;

    StaticText1: TStaticText;

    StaticText2: TStaticText;

    StaticText3: TStaticText;

    StaticText4: TStaticText;

    procedure N2Click(Sender: TObject);

    procedure N4Click(Sender: TObject);

    procedure N5Click(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    procedure N7Click(Sender: TObject);

    procedure N8Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

  i,j,k,n: Longint;

  ColCount, t: integer;

  Filename,s: string;

  BM: TBitmap;

  dx,dy: real;

implementation

 

{$R *.dfm}

 

procedure Interpolate(var bm: TBitMap; dx, dy: single);

var

  bm1: TBitMap;

  z1, z2: single;

  k, k1, k2: single;

  x1, y1: integer;

  c: array [0..1, 0..1, 0..2] of byte;

  res: array [0..2] of byte;

  x, y: integer;

  xp, yp: integer;

  xo, yo: integer;

  col: integer;

  pix: TColor;

begin

  Form1.Image1.AutoSize:=False;

  bm1 := TBitMap.Create;

  bm1.Width := round(bm.Width * dx);

  bm1.Height := round(bm.Height * dy);

  for y := 0 to bm1.Height - 1 do begin

    for x := 0 to bm1.Width - 1 do begin

      xo := trunc(x / dx)-t;

      yo := trunc(y / dy)-t;

      x1 := round(xo * dx)+t;

      y1 := round(yo * dy)+t;

Информация о работе Розробка програми для масштабувания зображення