Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
Кафедра автоматизованих систем управління
Розрахунково-графічна робота
з дисципліни
“Комп’ютерна графіка”
Варіант теми завдання розрахункової роботи № 28
Тема: “Муар-ефект”.
Муара пов'язаних з обробкою і підготовкою зображень до друку. Муар заважає нам в реалізації з виду гранично простого завдання - повторного факсимільного відтворення раніше надрукованого поліграфічним способом відбитка. Невтаємниченим може здатися, що завдання максимально проста - достатньо лише заново відсканувати оригінал, налаштувати сканер на крайні точки тонового діапазону зображення, і повторно віддруковані отриманий після сканування файл. Дуже часто подібні завдання перед дизайнером ставить замовник, і дуже дивується, якщо дизайнер повідомляє йому про незрозумілі труднощі подібної дії. Надаючи растровий оригінал, і вимагаючи його збільшення раза так в два. І буде гранично впевнений у своїй правоті. Іноді замовнику навіть здається, що дизайнер спеціально ускладнює і "драматизують" обстановку, щоб підвищити власну значимість. Однак, в дійсності, виникнення муара в зображенні, так само як і боротьба з ним - питання не з числа найлегших і передбачуваних в поліграфії, і тому вимагає роз'яснення багатьох, не завжди очевидних теоретичних моментів. Таким чином, завдання цієї публікації - спробувати "погодити" замовника і дизайнера, ввівши обох в курс справи, докладно розповів про причини появи та особливості прояву муара, не забувши згадати також про доступні методи боротьби з цим явищем.
Причини виникнення муар-ефекту.
Найбільш просте і лаконічне пояснення причини виникнення муара мені одного разу вдалося знайти в одному з форумів в інтернеті, присвячених графіці та допечатной підготовці. Для простого наочного прикладу демонстрації явища муара одним учасником форуму було запропоновано додати один до одного два гребінця зі схожим кроком їх зубів, а потім подивитися на те, як будуть виглядати проміжки між зубами пари гребінців в цьому випадку. Тут, по суті, один періодичний процес (крок зубів перше гребінця) накладається на інший (крок зубів другого гребінця). В результаті, чергуються зуби гребінця та просвіти між ними йшли б з певною періодичністю, зумовленої накладенням першого і другого періодів. Не дивлячись на уявну примітивності наведеного прикладу, в цілому він, як не можна краще, демонструє причини виникнення муара простим і наочним способом. Однак перед тим, як читач відірветься від подальшого читання і піде підшукувати підходящу пару гребінців, хотілося б привести більш грамотне і правильне обгрунтування процесу інтерференції, яка виникає в результаті накладення періодичних структур, прояв якого ми бачимо при виникненні муара. Муар - це окремий випадок прояву явища інтерференції. Згадаємо загальний курс фізики. Ймовірно, всі бачили простий досвід з накладенням двох хвильових структур зі схожим періодом (зазвичай це демонструється на прикладі двох розділених променів світла, отриманих від одного джерела). При цьому в місцях, де світлова хвиля приходила в фазі з іншого хвилею, ділянка була більш світлим, у порівнянні з ділянкою, де світлові хвилі виявлялися в протифазі. Візуально це виглядало як періодичне чергування більш світлих і темних ділянок. Не дивлячись на те, що цей досвід звичайно демонструється в курсі загальної оптики і розповідається на прикладі накладення світлових хвиль, явище інтерференції, взагалі притаманне будь-яким періодичним процесам. Відповідно, будь-якого періодичного процесу, при його накладення на інший процес, що повторюється з такою ж частотою, або з частотою, в певній мірі кратною частоті першого процесу, властиво викликати інтерференції. Окремий випадок інтерференції - муар - ми можемо спостерігати при скануванні, повторному раструванні, при друку наших зображень . Таким чином, ми частково розібралися з тим, що ж все-таки це таке - муар, і чим він викликаний.
Муар може бути викликаний цілим рядом причин, починаючи від невірного режиму сканування оригіналів, їх некоректної обробкою і закінчуючи неправильною настройкою растрового процесора на стадії виготовлення форм і самим процесом друку. Нижче ми спробуємо встановити, як саме проявляє себе муар на кожній конкретній стадії обробки та виготовлення зображення, а також наведемо короткі рекомендації по боротьбі з цим явищем малопріятним.
Муар при скануванні.
Добре, коли муар виникає і стає помітний ще на стадії сканування зображення. Якщо поява муара неминуча, добре, коли він проявляється на найбільш ранній стадії. Уважний дизайнер, вчасно помітивши його, докладе всіх зусиль для його усунення. Отже, чим же викликаний муар сканування, і як з ним боротися?
Цей муар зазвичай виникає при скануванні раніше отрастрірованних і надрукованих стандартним типографським способом відтиску. Справа в тому, що сканування є не що інше, як оцифровка зображення, що відбувається з певною частотою. Частота сканування при цьому, по суті, визначає дозвіл сканування, що виражається в вибірках на одиницю довжини оригіналу, звичайно - дюйм (samples per inch, spi). Так як попередньо зображення було отрастріровано з певною частотою, то часто при скануванні, частота попередньо отрастрірованного зображення і частота вибірок сканера збігаються, так як виявляються або однаковими, або в якій то мірі кратним один одному. І виникає муар: деякі пікселі в різних, навіть в однорідних і одноколірні ділянках зображення стають більш світлими, деякі - навпаки, більш темними. Все це повторюється з певною періодичністю по всьому зображенню, що і визначає видимий нам період муара.
Який вихід може бути в цьому випадку - висновок про зміну частоти вибірок сканера. Це дійсно допомагає, але не завжди: справа в тому, що розташування світлочутливих сенсорів в сканері від зміни дозволу сканування не змінюється. Не змінюється відповідно, і частота реальних вибірок сканера. Тому, ця рекомендація дійсно допомагає не завжди, а якщо й допомагає, то лише частково, трохи змінюючи вираженість та період муара.
Другим виходом може бути розфокусування оптики сканера. Це робиться для штучного зниження різкості сканування, щоб сканер декілька значень отриманого їм кольору від декількох сусідніх растрових точок. В результаті, при відносно невеликій втрати різкості по цілому зображення, можна досягти практично повного усунення муара. Жаль тільки, що можливість ручного расфокусування оптики сканера зустрічається, в основному, тільки на дорогих моделях барабанних сканерів.
Третім виходом є застосування опцій, призначених для придушення растра типу Descreen, які присутні практично у всіх скануючих пакетах. Вхідним параметром для успішного придушення растра з використанням опції Descreen є вихідна лініатура растрування сканування оригіналу. Тут головне не помилитися з зазначенням вихідної лініатури растрування. Вказівка помилкової лініатури викличе ще більший і зазвичай ще більш важко учуваючий муар. Негативною стороною цього підходу є те, що в залежності від реалізації фільтра Descreen в конкретному скануючому пакеті, результати його іноді можуть бути не дуже гарні, тому що занадто багато корисних деталей оригіналу при скануванні втрачається. Щоб перевірити, наскільки "сліпий" виявляється Descreen і яка кількість деталей він знищує, спробуйте відсканувати нормальний, чіткий оригінал (навіть без растрової структури) із застосуванням і без застосування цього фільтра та порівняти отримані результати.
Четвертим виходом є відомий і досить широко застосовується прийом, що полягає у повороті оригіналу на 30 градусів щодо направлення осі його сканування. На чому грунтується такий підхід? Спробуємо розібратися докладніше. Ви, мабуть, помічали, що часто при скануванні оригіналу муар виникає в квітах, формуються в основному, жовтою фарбою? Справа в тому, що при раструванні в стандартних умовах, жовтої фарби відповідає кут нахилу растра, що дорівнює нулю (або 90) градусів. У цьому випадку, по суті, збігаються осі напрямки скануючих вибірок і просторових ліній растра, що й викликає сильний муар в жовтому каналі і у всіх суміжних кольорах, таких, як помаранчевий.
П'ятим виходом, ймовірно, є комбінація застосування всіх перерахованих методів боротьби з муаром в зображеннях у розумному співвідношенні, в комбінації з ручною "доведенням" файлу в растровому редакторі.
Муар при повторному раструванні файлу.
Виникнення муара при повторному раструванні файлу обумовлений тим, що частота повторного растрування збіглася з частотою його первинного растрування. Проявляється в графічних файлах цей вид муара зазвичай тільки у випадках, коли "старий" растр від першого растрування не був усунений або був усунутий не повністю. Для усунення муара повторного растрування можна порекомендувати кілька підходів. По-перше, можна спробувати змінити частоту повторного растрування (наприклад, встановити 133 lpi замість вихідних 175). По-друге, спробувати відраструвати файл із застосуванням растром іншого типу (наприклад, стохастичних). У другому випадку відсутність муара буде обумовлено тим, що повторний растр не є періодичним способом растрування за своєю природою, отже, первинний період растрування не співпаде з відсутнім вторинним.
Муар і кут нахилу растра 0 градусів.
Растр - дискретна структура, яка існує для того, щоб друкуючий пристрій, чи це принтер або друкарська машина, могли задавати друкарську фарбу різною кількістю на одиницю площі, створюючи ефект наявності у зображенні напівтонів. Дискретна структура растра, навіть при високій лініатурі візуально розбиває зображення на окремі растрові об'єкти, заважаючи людям з високою гостротою зору розглядати зображення, як безперервний і фотографічний. Растрові точки в рамках однієї фарби, при використанні різних кутів нахилу растра, утворюють візуально помітні просторові лінії. Це частково пояснює чому, наприклад, для різних фарб використовуються стандартизовані (і різні) кути нахилу растра. Перша причина використання фіксованих кутів нахилу растра для відповідних фарб в тому, що різні фарби по-різному впливають на формування зображення. Наприклад, для чорної фарби, як найбільш оптично більш щільною, ніж всі інші фарби, використовується кут нахилу растра, що дорівнює 45 градусам. Справа в тому, що особливістю людського зору є його візуально-психологічна "прив'язка" до геометрично правильним структурам, розташованим під кутом в 0 або 90 градусів по відношенню до розглядається зображенню. І якщо поліграфічний растр, використаний для цього, створював би такі лінії з використанням щільної і контрастнї фарби.
Саме тому для найбільш контрастної і оптично більш щільною фарби, що використовується при стандартному поліграфічному виробництві - чорної - вибраний і повсюдно використовується стандартний кут в 45 градусів. Значення в 45 градусів вибрано як рівновіддаленість значення від осей в 0 і 90 градусів. Вважається, що саме при цьому куті нахилу растра його просторові лінії, що формуються з окремих растрових точок, найменш відволікають спостерігача від споглядання наданого йому сюжету.
Нижче тестове зображення було отрастроване з кутами нахилу растра 0 і 45 градусів. Для пущего академічного ефекту при растерізаціі зображення була обрана досить низька лініатура. Зверніть увагу на візуальне сприйняття зображення з різними кутами нахилу растрових точок і виберіть те, що, по-вашому, менше розбито дискретністю растрової структури. А після прийняття рішення поверніть журнальную смугу на 45 градусів і проведіть повторну оцінку.
Приклад впливу кута нахилу растра на зорове
сприйняття зображення. На малюнках представлені 2 зображення
з кутами растрування 45 і 0 градусів відповідно.
Висновок № 1. Не міняйте кути нахилу растра без чіткого розуміння того, що ви, власне, робите.
Висновок № 2. Не міняйте кути нахилу растра між собою без всякої на те необхідності. Наприклад, обмінявши кути для жовтої та чорної фарб, ви, швидше за все, отримаєте сильно виражену періодичну структуру, дуже схожу на муар.
Висновок № 3. Не використовуйте для будь-яких замовлених фарб кут нахилу растра, що дорівнює нулю. Єдиний випадок, коли це можливо - замовлена фарба є такою ж оптично світлої, як жовта фарба, або ж фарба буде присутня на формі тільки у вигляді плашечних ділянок, не розбитих растрової структурою.
Муар при друку.
Якщо виключити появу муара у пресі, обумовленого поганим станом друкарської машини, то муар на цій стадії може бути викликаний будь-якими катастрофічними помилками попередніх технологічних процесів. Наприклад, він може виникнути, якщо кілька накладаються фарб були отримані з використанням одного і того ж кута нахилу растра, або ж у випадку, якщо друкар банально переплутав форми і, наприклад, відбилася жовта фарба на червоній секції (червоною фарбою, відповідно). З іншого боку, частіше всього муар, що виникає в пресі - це невиявленная вчасно помилка попередніх друку допечатних процесів.
Крім того, муар на стадії друку може виникати при використанні різних текстурованих надрукованих матеріалів. Зазвичай ступінь вираженості цього муара залежить тільки від текстури матеріалу, і це також потрібно враховувати при його підборі.
Де не немає муара.
За законами жанру, муар не виникає там, де не відбувається накладання періодичних структур. Наприклад, ви сміливо можете друкувати 2 фарби з використанням одного і того ж кута нахилу растра для кожної з них. Але лише в тому випадку, якщо не відбувається друк цих фарб в накладення, або ж у тому випадку, якщо перетинаються їх ділянки, де фарба накопичується суцільним шаром, без розбиття зображення растром, який, як ви знаєте, є процесом періодичним. У Вас швидше за все не виникне муара сканування, якщо ви оцифровуються оригінал, отриманий нерегулярними (стохастичними) методами растрування.
Муар-ефект.
Текст програми:
unit untPrincipale;
interface
uses
Forms, Dialogs, StdActns, ActnList, Menus, ExtDlgs, Classes, contnrs, ComCtrls, Controls,
untCalcImage;
type
TfrmPrincipale = class(TForm)
OpenPictureDialog: TOpenPictureDialog;
MainMenu: TMainMenu;
mnuFichier: TMenuItem;
mnuOuvrirImage: TMenuItem;
mnuFermer: TMenuItem;
mnuEnregistrer: TMenuItem;
mnuBarre1: TMenuItem;
mnuQuitter: TMenuItem;
mnuiFiltres: TMenuItem;
mnuFiltreDigital: TMenuItem;
Moire: TMenuItem;
mnuFenetre: TMenuItem;
mnuCascade: TMenuItem;
mnuMosaiqueHorizontale: TMenuItem;
mnuMosaiqueVerticale: TMenuItem;
mnuToutReduire: TMenuItem;
ActionList: TActionList;
actOuvrirImage: TAction;
actFermer: TWindowClose;
actQuitter: TAction;
actMosaiqueHorizontale: TWindowTileHorizontal;
actMosaiqueVerticale: TWindowTileVertical;
actCascade: TWindowCascade;
actToutReduire: TWindowMinimizeAll;
actEnregistrerImageSous: TAction;
SaveDialog: TSaveDialog;
StatusBar: TStatusBar;
ProgressBar: TProgressBar;
procedure mnuQuitterClick(Sender: TObject);
procedure actOuvrirImageExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure actEnregistrerImageSousExecute(Sender: TObject);
procedure actEnregistrerImageSousUpdate(Sender: TObject);
procedure MoireClick(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
private
{ Dйclarations privйes }
public
{ Dйclarations publiques }
procedure ChangeCoordonneesCurseur(X, Y : Integer);
procedure ChangeStatus(Status : string);
procedure FinCalcul;
end;
function FormateNombreDecimal(Texte : string; NegatifAutorise : Boolean; var Valeur : Double) : string;
function FormateNombreEntier(Texte : string; NegatifAutorise : Boolean; var Valeur : Integer) : string;
var
frmPrincipale: TfrmPrincipale;
ListeImages : TObjectList;
Copie : TCalcImage;
implementation
uses
SysUtils,
untMDIImage,
untFiltreAddImageImage, untFiltreSubImageImage, untFiltreMulImageImage, untFiltreDivImageImage, untFiltreANDImageImage, untFiltreORImageImage, untFiltreXORImageImage,
untFiltreGauss;
{$R *.DFM}
function FormateNombreDecimal(Texte : string; NegatifAutorise : Boolean; var Valeur : Double) : string;
var
NumLettre : Integer;
TexteFormate : string;
PointPresent : Boolean;
begin
PointPresent := False;
TexteFormate := '';
if (Texte[1] = '-') and NegatifAutorise then
TexteFormate := '-';
for NumLettre := 1 to Length(Texte) do
begin
if (Texte[NumLettre] = '.') and not PointPresent then
begin
if TexteFormate = '' then
TexteFormate := '0.'
else
TexteFormate := TexteFormate + '.';
PointPresent := True;
end;
if (Texte[NumLettre] in ['0'..'9']) then
TexteFormate := TexteFormate + Texte[NumLettre];
end;
if (TexteFormate = '') or (TexteFormate = '-') then
Valeur := 0
else
Valeur := StrToFloat(TexteFormate);
Result := TexteFormate;
end;
function FormateNombreEntier(Texte : string; NegatifAutorise : Boolean; var Valeur : Integer) : string;
var
NumLettre : Integer;
TexteFormate : string;
begin
TexteFormate := '';
if (Texte[1] = '-') and NegatifAutorise then
TexteFormate := '-';
for NumLettre := 1 to Length(Texte) do
if (Texte[NumLettre] in ['0'..'9']) then
TexteFormate := TexteFormate + Texte[NumLettre];
if (TexteFormate = '') or (TexteFormate = '-') then
Valeur := 0
else
Valeur := StrToInt(TexteFormate);
Result := TexteFormate;
end;
procedure TfrmPrincipale.mnuQuitterClick(Sender: TObject);
begin
Close;
end;
procedure TfrmPrincipale.actOuvrirImageExecute(Sender: TObject);
var
NumFichier : Integer;
begin
if OpenPictureDialog.Execute then
for NumFichier := 0 to OpenPictureDialog.Files.Count - 1 do
begin
ListeImages.Add(TfrmMDIImage.Create(nil));
TfrmMDIImage(ListeImages.Last).OuvrirImage(OpenPictureDialog.Files[NumFichier]);
TfrmMDIImage(ListeImages.Last).Caption := ExtractFileName(OpenPictureDialog.Files[NumFichier]); // Change le titre de la fiche
end;
end;
procedure TfrmPrincipale.FormCreate(Sender: TObject);
begin
Copie := TCalcImage.Create;
ProgressBar.Parent := StatusBar;
ListeImages := TObjectList.Create;
ChangeStatus('Prкt');
end;
procedure TfrmPrincipale.actEnregistrerImageSousExecute(Sender: TObject);
begin
if SaveDialog.Execute then
TfrmMDIImage(MDIChildren[0]).EnregistrerImage(SaveDialog.FileName);
end;
procedure TfrmPrincipale.actEnregistrerImageSousUpdate(Sender: TObject);
begin
if MDIChildCount = 0 then
actEnregistrerImageSous.Enabled := False
else
actEnregistrerImageSous.Enabled := True;
end;
procedure TfrmPrincipale.MoireClick(Sender: TObject);
begin
frmFiltreGauss.ShowModal;
end;
procedure TfrmPrincipale.ChangeCoordonneesCurseur(X, Y: Integer);
begin
if (X = -1) or (Y = -1) then
StatusBar.Panels[1].Text := '(-, -)'
else
StatusBar.Panels[1].Text := Format('(%d, %d)', [X, Y]);
end;
procedure TfrmPrincipale.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
ChangeCoordonneesCurseur(-1, -1);
end;
procedure TfrmPrincipale.ChangeStatus(Status: string);
begin
StatusBar.Panels[2].Text := Status;
StatusBar.Refresh;
end;
procedure TfrmPrincipale.FinCalcul;
begin
ChangeStatus('Prкt');
ProgressBar.Position := 0;
end;
end.
Приклад роботи програми:
Висновок: В даній роботі я розробив програму яка обробляє зображення за допомогою муар-ефекту. Розроблена програма відкриває фотографію чи деяке зображення, фільтрує його, а також за бажанням можна зберегти відредаговане зображення і порівняти зображення до редагування і після.