Виявлення обличчя на зображенні
Розробка алгоритму по виявленню і локалізації особи на зображенні у візуальному середовищі Delphi. Розробка програми по виділенню областей кольору шкіри особи, крапок, ліній і яскравості зображення. Опис структури програми і інтерфейсу користувача.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 07.01.2014 |
Размер файла | 3,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
pn:=pn+1;
px[pn]:=r;
py[pn]:=i;
g[i,r]:=true;
r:=r+1;
end;
r:=r-1;
t:=i+1;
repeat
e:=0; w:=0;
for p:=l to r do
if ((colshkr[t,p]) and (not(g[t,p]))) then
begin
pn:=pn+1;
px[pn]:=p;
py[pn]:=t;
g[t,p]:=true;
if ((colshkr[t,p]) and (e=0) ) then e:=p;
if ((colshkr[t,p]) and (e<>0)) then w:=p;
end;
l:=e; r:=w;
if l=r then break;
p:=l-1;
while ((colshkr[t,p]) and (not(g[t,p])) and (p>=1)) do
begin
pn:=pn+1;
px[pn]:=p;
py[pn]:=t;
g[t,p]:=true;
p:=p-1;
end;
l:=p+1;
p:=r+1;
while ((colshkr[t,p]) and (not(g[t,p])) and (p<=bmpin.Width)) do
begin
pn:=pn+1;
px[pn]:=p;
py[pn]:=t;
g[t,p]:=true;
p:=p+1;
end;
r:=p-1;
t:=t+1;
until ((r=l) or (t>bmpin.Height));
sx:=0; sy:=0; sw:=0;
for k:=1 to pn do
begin
col:=bmpin.Canvas.Pixels[px[k],py[k]];
rr:=GetRValue(col);
gg:=GetGValue(col);
bb:=GetBValue(col);
rr:=round(0.3*rr+0.59*gg+0.11*bb);
sw:=sw+rr;
sx:=sx+px[k]*rr;
sy:=sy+py[k]*rr;
end;
x:=round(sx/sw);
y:=round(sy/sw);
u1:=0; u20:=0; u02:=0;
for k:=1 to pn do
begin
col:=bmpin.Canvas.Pixels[px[k],py[k]];
rr:=GetRValue(col);
gg:=GetGValue(col);
bb:=GetBValue(col);
rr:=round(0.3*rr+0.59*gg+0.11*bb);
u1:=u1+(px[k]-x)*(py[k]-y)*rr;
u02:=u02+sqr(px[k]-x)*rr;
u20:=u20+sqr(py[k]-y)*rr;
end;
if u20=u02 then teta:=arctan(0)
else teta:=arctan(2*u1/(u20-u02))/2;
imin:=0; imax:=0;
for k:=1 to pn do
begin
imax:=imax+sqrt(abs((px[k]-x)*sin(teta)-(py[k]-y)*cos(teta)));
imin:=imin+sqrt(abs((px[k]-x)*cos(teta)-(py[k]-y)*sin(teta)));
end;
if imin=0 then u02:=0 else u02:=power(imax,3)/imin;
if imax=0 then u20:=0 else u20:=power(imin,3)/imax;
a:=round(power((4/pi),1/4)*power(u02,1/8));
b:=round(power((4/pi),1/4)*power(u20,1/8));
if (a<4*b) and (a>3*b) then ellipse(x,y,a,b,teta);
end;
end;
function min(r:byte;g:byte;b:byte):byte;
begin
result:=r;
if b<result then result:=b;
if g<result then result:=g;
end;
function max(r:byte;g:byte;b:byte):byte;
begin
result:=r;
if b>result then result:=b;
if g>result then result:=g;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if openpicturedialog1.Execute then
begin
image1.Picture.LoadFromFile(openpicturedialog1.filename);
bmpin:=TBitmap.Create;
bmpin.assign(image1.Picture.Graphic);
Image1.AutoSize := true;
Image1.AutoSize := false;
HH := Image1.Height / h;
WW := Image1.Width / w;
if (HH > WW) then
begin
Image1.Height := trunc(Image1.Height / HH);
Image1.Width := trunc(Image1.Width / HH);
Image1.Stretch := True;
end
else
begin
Image1.Height := trunc(Image1.Height / WW);
Image1.Width := trunc(Image1.Width / WW);
Image1.Stretch := True;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var r,g,b:byte;
rr,gg,t,s,p:real;
color:Tcolor;
i,j,k,l,m:integer;
colshkr:boolarr;
z:array[1..9] of byte;
h1,h2,h3,h4,x:real;
bmpp: TBitmap;
begin
bmpout:=TBitmap.Create;
bmpout.Assign(bmpin);
bmpp:=TBitmap.Create;
bmpp.Assign(bmpin);
for i:=1 to bmpout.Width do
for j:=1 to bmpout.Height do
begin
color:=bmpout.Canvas.Pixels[i,j];
r:=GetRValue(color);
g:=GetGValue(color);
b:=GetBValue(color);
if ((r>95) and (g>40) and (b>20) and (r>g) and (r>b) and (abs(r-g)>15) and ((max(r,g,b)-min(r,g,b))>15)) or ((r>220)and (g>120) and (b>170) and (abs(r-g)<=15) and (r>b) and (g>b)) then
colshkr[i,j]:=true else colshkr[i,j]:=false;
if ((r>0) or (b>0) or (g>0)) then
begin
rr:=r;
gg:=g;
p:=r; p:=p+g; p:=p+b;
rr:=rr/p-1/3;
gg:=gg/p-1/3;
if gg=0 then t:=0;
if gg>0 then t:=(arctan(rr/gg))/(2*pi)+1/4;
if gg<0 then t:=(arctan(rr/gg))/(2*pi)+3/4;
if ((t>=0.45) and (t<=0.65) and colshkr[i,j]) then colshkr[i,j]:=true
else colshkr[i,j]:=false;
end
else colshkr[i,j]:=false;
end;
for i:=1 to bmpin.Width do
for j:=1 to bmpin.Height do
begin
color:=bmpin.Canvas.Pixels[i,j];
r:=GetRValue(color);
g:=GetGValue(color);
b:=GetBValue(color);
r:=round(0.3*r+0.59*g+0.11*b);
bmpp.Canvas.Pixels[i,j]:=rgb(r,r,r);
end;
for i:=2 to (bmpp.Width-1) do
for j:=2 to (bmpp.Height-1) do
begin
z[1]:=getrvalue(bmpp.Canvas.Pixels[i-1,j-1]);
z[2]:=getrvalue(bmpp.Canvas.Pixels[i,j-1]);
z[3]:=getrvalue(bmpp.Canvas.Pixels[i+1,j-1]);
z[4]:=getrvalue(bmpp.Canvas.Pixels[i-1,j]);
z[5]:=getrvalue(bmpp.Canvas.Pixels[i,j]);
z[6]:=getrvalue(bmpp.Canvas.Pixels[i+1,j]);
z[7]:=getrvalue(bmpp.Canvas.Pixels[i-1,j+1]);
z[8]:=getrvalue(bmpp.Canvas.Pixels[i,j+1]);
z[9]:=getrvalue(bmpp.Canvas.Pixels[i+1,j+1]);
h1:=abs(z[7]+2*z[8]+z[9]-z[1]-2*z[2]-z[3]);
h2:=abs(z[3]+2*z[6]+z[9]-z[1]-2*z[4]-z[7]);
h3:=abs(z[2]+2*z[3]-z[4]+z[6]-2*z[7]-z[8]);
h4:=abs(2*z[9]+z[8]+z[6]-z[4]-z[2]-2*z[1]);
x:=50;
if ((h1>x)or (h2>x) or (h3>x) or (h4>x)) then bmpp.Canvas.Pixels[i,j]:=clBlack
else bmpp.Canvas.Pixels[i,j]:=clWhite;
end;
znah(bmpin,bmpout,colshkr);
image3.Picture.Assign(bmpout);
Image3.AutoSize := true;
Image3.AutoSize := false;
HH := Image3.Height / h;
WW := Image3.Width / w;
if (HH > WW) then
begin
Image3.Height := trunc(Image3.Height / HH);
Image3.Width := trunc(Image3.Width / HH);
Image3.Stretch := True;
end
else
begin
Image3.Height := trunc(Image3.Height / WW);
Image3.Width := trunc(Image3.Width / WW);
Image3.Stretch := True;
end;
Размещено на Allbest.ru
Подобные документы
Побудова інформаційно-математичної моделі задачі. Визначення структури даних, розробка інтерфейсу. Складання коду програми за допомогою мови програмування Delphi 7.0. Реалізація проекту у візуальному середовищі. Інструкція з експлуатації програми.
курсовая работа [601,3 K], добавлен 03.09.2009Побудова інформаційно-математичної моделі та алгоритм задачі. Визначення структури даних. Розробка інтерфейсу програми з користувачем. Складання коду програми. Реалізація проекту у візуальному середовищі. Тестування та інструкція з експлуатації програми.
курсовая работа [1,3 M], добавлен 14.04.2009Побудова інформаційно-математичної моделі задачі. Визначення структури даних. Розробка інтерфейсу програми з користувачем. Реалізація проекту у візуальному середовищі. Аналіз та тестування програми. Розгляд результатів та інструкція з експлуатації.
курсовая работа [4,2 M], добавлен 07.05.2009Головні принципи візуального програмування, опис компонентів Delphi, використаних при розробці проекту. Опис програми-додатку "Психологічний тест" та список дій користувача. Алгоритм роботи програми, її форма та ієрархія. Опис графічного інтерфейсу.
курсовая работа [1,2 M], добавлен 08.06.2010Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.
курсовая работа [1,3 M], добавлен 23.06.2010Методи первинної обробки даних - згладжування та характеристика сплайнів. Загальна характеристика об'єктно-орієнтованої мови Java. Принципи побудови графічного інтерфейсу. Розробка алгоритму програми та інтерфейсу користувача програмного продукту.
дипломная работа [3,3 M], добавлен 10.10.2013Модель обробки файлів растрових зображень. Середній квадрат яскравості. Фільтри для виділення перепадів і границь. Опис та обґрунтування вибору складу технічних та програмних засобів. Опис інтерфейсу програми. Зображення діалогового вікна програми.
курсовая работа [664,3 K], добавлен 30.06.2009Призначення драйверів та порядок роботи з драйверами в MS-DOS. Розробка драйверів консолі. Структура драйвера та призначення компонентів. Розробка структури алгоритму, програми налагодження драйвера. Опис змінних програми та роботи модулів програми.
курсовая работа [1,0 M], добавлен 22.06.2012Основні відомості з лінійної алгебри. Власні значення і вектори матриці. Метод обертання Якобі. Засоби формування інтерфейсу користувача. Текст програми алгоритму методу обертання Якобі. Вимоги до програмно-технічного забезпечення. Інструкція користувача.
курсовая работа [306,0 K], добавлен 18.11.2015Особливості Сонячної системи та космічних тіл в її межах. Роль площини земної орбіти — екліптики. Опис програми, яка демонструє приблизний рух планет. Блок-схеми алгоритмів та структури програми. Опис процедур та обробників. Інструкція користувача.
курсовая работа [756,6 K], добавлен 17.03.2014