- •Звітна документація про проходження науково-виробничої практики
- •Календарний план проходження практики
- •Щоденник практики
- •Науково-творче завдання: «Методи обробки зображень»
- •1. Методи на основі динамічних моделей
- •2. Методи на основі декомпозиції на власні вектори
- •3. Методи класифікації елементів зображень
- •4. Методи визначення контурів елементів зображень та сегментації
4. Методи визначення контурів елементів зображень та сегментації
Для визначення контурів зображень використовують статистичний аналіз фрагментів зображення та їх взаємну кореляцію з метою знаходження стрибкоподібних змін кольору і освітленості. Велика група методів заснована на використанні математичних моделей, що відображають певну взаємодію між окремими пікселями або фрагментами зображень. Також для розв’язання задач розпізнавання об’єктів застосовують різні методи фільтрації, наприклад інверсні фільтри, фільтри Вінера, Байєса. При цьому використовують аналогію між динамікою зображень та фізичними процесами, наприклад дифузії. Для розв’язання деяких задач використовують стохастичні моделі.
Ряд методів визначення контурів зображень реалізовано в середовищі Matlab. У випадку динамічного фону дані методи не дозволяють отримати інформативний результат, так як перетворюють зображення в безліч контурних об’єктів. В цьому можна переконатись здійснивши розпізнавання контурів зображення за допомогою функції edge, вибравши один з запропонованих фільтрів Собеля, Превіта, Робертса, лапласіан-гаусіана або за методом Канні.
Розпізнавання об’єктів за допомогою визначення контурів виконується функцією edge. Найкращий результат отримано за методом Канні, що представлено на рис. 3. Суть методу полягає в пошуку локальних ділянок з перепадами яскравості. Перепади яскравості шукають за допомогою фільтрації по кожній з осей координат одномірним фільтром лапласіан-гаусіана. У методі Канні для класифікації перепадів на "слабкі" і "сильні" використовується два пороги – нижній і верхній. "Слабкі" границі відзначаються в результуючому зображенні, тільки якщо вони з'єднані з "сильними". Для зображень, що зіпсовані шумом, даний метод забезпечує найкраще виявлення границь у порівнянні з іншими методами функції edge та методом сегментації, але вимагає істотно більшого часу.
Алгоритми сегментації зображень базуються на одній з двох характеристик сигналу яскравості – розривності або однорідності. В першому випадку підхід базується на розбитті зображення на основі різких змін сигналу, таких як перепади яскравості на зображенні. Зазвичай пошук розривів здійснюється за допомогою ковзних масок. Друга категорія методів базується на визначенні однорідності зображення згідно наперед обраних критеріїв. Прикладами таких методів є порогова обробка, злиття та розбиття областей. За допомогою Mathlab сегментацію можна виконати застосовуючи функцію qtdecomp за методом розподілу. Суть методу полягає в наступному. Зображення розбивається на блоки, що не перекриваються. Кожний блок за допомогою деякого критерію перевіряється на однорідність. Якщо блок неоднорідний, то він розбивається на блоки меншого розміру. Процес завершується тоді, коли жодний з блоків не може бути розділений.
Рисунок 3 – Розпізнавання об’єктів за допомогою функції edge.
Завдання:
А.
1. В чому полягає суть двовимірної згортки зображення?
2. Розгляньте використання функції roifill для усунення дефектів напівтонового зображення.
3. Реалізуйте за допомогою функції nlfilter операцію усереднення з порогом, в цілях фільтрації імпульсного шуму.
4. Перевірте чи є зображення напівтоновим, бінарним, палітровим чи повнокольоровим за допомогою функцій isind, isgray, isrgb,isbw.
5. Реалізуйте перетворення повнокольорового зображення в напівтонове, а напівтонового в палітрове за допомогою функцій im2double, gray2ind.
Б. Алгоритми і програми
Написати програму, що буде виконувати розпізнавання контурів елементів зображення.
Опис програми
Головне вікно програми являє собою меню з трьома кнопками: «відкрити зображення», «зберегти результат» та «розпізнати». А також тут знаходиться список з якого можна вибирати значення параметра «дельта», що відіграє важливу роль в процесі розпізнавання контурів елементів зображення. Значення цього параметра в деяких випадках потрібно змінювати для забезпечення кращого результату розпізнавання. Оскільки зображення можуть бути будь-якої якості та чіткості, то змінивши значення даного параметра можна досягти максимальної якості розпізнавання контурів.
Кнопка «відкрити зображення» відкриває діалогове вікно, що дає можливість завантажити в програму зображення для подальшого його використання.
Кнопка «розпізнати» запускає процес розпізнавання контурів елементів зображення. Під час цього виводиться статус протікання процесу, що дає можливість оцінити тривалість обробки зображення. Після завершення розпізнавання результат виводиться в окремому вікні.
Кнопка «зберегти результат» відкриває діалогове вікно, що дає можливість зберегти результат розпізнавання контурів на певний носій інформації.
Головне вікно програми має наступний вигляд:
Вікно в якому відображається вхідне зображення для розпізнавання:
Вікно програми в якому відображається результат розпізнання контурів елементів зображення:
Програмна реалізація:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtDlgs;
type
TForm1 = class(TForm)
OpenPictureDialog1: TOpenPictureDialog;
SavePictureDialog1: TSavePictureDialog;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Button3: TButton;
Label3: TLabel;
ComboBox1: TComboBox;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
kh,kw:integer;
implementation
uses unit2,unit3,unit4;
{$R *.dfm}
function step(a,x:integer):longint;
var i,f:integer;
begin
f:=1;
if x>0 then
for i:=1 to x do f:=f*a;
step:=f;
end;
function HexToDec(s:string):longint;
const
m: array [0..15] of string=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
var i,j,k:byte;
c:string;
b:boolean;
r:longint;
begin
r:=0;
for i:=length(s) downto 2 do begin
j:=0; b:=true;
while (j<=15)and b and(s[i]<>'$') do begin
if m[j]=s[i] then begin
b:=false; k:=j;
end;
j:=j+1;
end;
r:=r+(k*step(16,length(s)-i));
end;
HexToDec:=r;
end;
function DecToHex(x:longint):string;
const
m: array [0..15] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
var i,c,xc,xo:longint;
s,s1:string;
b:boolean;
begin
c:=x; i:=1; s:='';
repeat
xc:=c div 16;
xo:=c mod 16;
s:=s+m[xo];
i:=i+1; c:=xc;
until xc=0;
s1:='$';
for i:=length(s) downto 1 do begin
s1:=s1+s[i];
end;
DecToHex:=s1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.image1.Picture:=nil;
if OpenPictureDialog1.Execute then begin
form2.Show;
form2.Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
kh:=form2.Image1.Picture.Height;
kw:=form2.Image1.Picture.Width;
form2.Label1.Caption:=inttostr(kw)+' х '+inttostr(kh);
form2.Image1.Height:=kh;
form2.Image1.Width:=kw;
form2.ClientHeight:=kh+15;
form2.ClientWidth:=kw+15;
end;
procedure TForm1.Button3Click(Sender: TObject);
var c:tcolor;
c1,c2:longint;
i,j,k:integer;
begin
form3.image1.Picture:=nil;
form3.Image1.Height:=kh;
form3.Image1.Width:=kw;
form3.ClientHeight:=kh+15;
form3.ClientWidth:=kw+15;
form4.ProgressBar1.Position:=0;
form4.ProgressBar1.Max:=(kw*kh)*2;
form3.image1.Canvas.Brush.Color:=clBlack;
form3.image1.Canvas.Rectangle(0,0,kw,kh);
form4.Show;
for i:=1 to kh do
for j:=2 to kw-1 do begin
form4.ProgressBar1.Position:=form4.ProgressBar1.Position + 1;
c1:=HexToDec(colortostring(form2.Image1.Canvas.Pixels[j-1,i]));
c2:=HexToDec(colortostring(form2.Image1.Canvas.Pixels[j+1,i]));
if abs(c1-c2)>=strtoint(combobox1.Text) then begin
form3.image1.Canvas.Pixels[j,i]:=clWhite;
end;
end;
for i:=1 to kw do
for j:=2 to kh-1 do begin
form4.ProgressBar1.Position:=form4.ProgressBar1.Position + 1;
c1:=HexToDec(colortostring(form2.Image1.Canvas.Pixels[i,j-1]));
c2:=HexToDec(colortostring(form2.Image1.Canvas.Pixels[i,j+1]));
if abs(c1-c2)>=strtoint(combobox1.Text) then begin
form3.image1.Canvas.Pixels[i,j]:=clWhite;
end;
end;
form4.Visible:=false;
form3.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if SavePictureDialog1.Execute then begin
form3.Image1.Picture.SaveToFile(SavePictureDialog1.FileName+'.bmp');
end;
end;
end.
ВИКОРИСТАНА ЛІТЕРАТУРА
Квєтний Р. Н. Комп’ютерне моделювання систем та процесів. Методи обчислень. Частина 2 : навчальний посібник / Р. Н. Квєтний, І. В. Богач, О. Р. Бойко та інші; за заг. ред. Р. Н. Квєтного. – Вінниця: ВНТУ, 2013. – 235 с.
Баженова И.Ю. Delphi 7. Самоучитель программиста / И.Ю. Баженова. – М.: КУДИЦ-Образ, 2003. – 448 с.
Архангельський А. Я. Программирование в Delphi для Windows / А.Я. Архангельський. – М.: Бином-Пресс, 2007. – 1248 с.
http://posibnyky.vntu.edu.ua/k_m/t2/zm2..htm
