Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zvit_na_virobnichu_praktiku_2014.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1.99 Mб
Скачать

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.

ВИКОРИСТАНА ЛІТЕРАТУРА

  1. Квєтний Р. Н. Комп’ютерне моделювання систем та процесів. Методи обчислень. Частина 2 : навчальний посібник / Р. Н. Квєтний, І. В. Богач, О. Р. Бойко та інші; за заг. ред. Р. Н. Квєтного. – Вінниця: ВНТУ, 2013. – 235 с.

  2. Баженова И.Ю. Delphi 7. Самоучитель программиста / И.Ю. Баженова. – М.: КУДИЦ-Образ, 2003. – 448 с.

  3. Архангельський А. Я. Программирование в Delphi для Windows / А.Я. Архангельський. – М.: Бином-Пресс, 2007. – 1248 с.

  4. http://posibnyky.vntu.edu.ua/k_m/t2/zm2..htm

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]