Matlab 2

      Mai statisztika : 4533 arc, 96781 nem arc... Az összesből integrálkép számolva, illetve lefuttatva egy statisztika, ami kissé el is szomorított... A "zaj" eloszlása ugyanaz, mint az arcok eloszlása... Remélem a többi szűrőnél más lesz, különben valami új öltet után kell nézzek vagy a csillagok együttállásában kell bízzak...

     Erről a csillagok együttállásáról úgy emlékszem, hogy írtam már pár sort, de ha mégsem, akkor itt felelevenítem, miről is van szó... Van nekem kb 110 darab "szűrőm", amivel megvizsgálom, milyen arányban állnak a képen belül az egyes pixelek bizonyos tartományokon belül... Ezzel akarok én egy statisztikát felállítani, hogy nagy általánosságban hol helyezkednek el az arcok a nem arcokhoz képest... S miért csillagok együttállása? Mert nem csak egy feltételnek kell eleget tegyen a kép, hanem az összes feltételt kell teljesítse ahhoz, hogy arcnak legyen nyilvánítva...

     És íme a ma délutáni eredmény :

Ezen a képen a vízszintes és függőleges szimmetria tulajdonságokat kisérhetjük figyelemmel. Látható (elméletileg), hogy a piros pöttyök (vagyis az arcok) szimmetrikusabbak, mint a zöld pöttyök... Persze ez csak a látszat... Ha megfigyeljük az eloszlásgörbét (hisztogram - szakszóval élve), akkor láthatjuk, hogy a véletlen képek sokkal szimmetrikusabbak, mint az arcok...
 
Eloszlásgörbe. Felül bal oldalon az arcok függőleges szimmetriájának az eloszlása látható (vagyis, hogy az arcnak a két oldalán lévő pixelek értéke mennyire egyforma). Felül jobbra a vízszintes szimmetria kísérhető figyelemmel... Ez azt jelenti, hogy a sötét és világos pixelek milyen arányban állnak egymással.
Alul bal oldalon a véletlenszerűen kivágott képek függőleges szimmetriatulajdonásgait figyelhetjük meg. Ha kicsit jobban megnézzük a képet, (amit a nagyon gyenge minősége miatt szerintem a neten majd nem lehet látni) észrevehetjük, hogy kb 98 százaléka a véletlenszerű képeknek -0.1 és 0.1 közé esik... Ez nem olyan jó hír, mert az arcok is ezen a határon belül vannak, ergó ezzel a feltétellel szinte semmit nem fogunk kizárni...

Matlab forráskód integrálkép számítására (amit én használtam) :

clear all
close all
clc

notface4=zeros(24,18,24853);
for i=100001:124853
    i
    img = imread(int2str(i));
    intImage = cumsum(cumsum(double(img)),2);
    notface4(:,:,i-100000)=intImage;
end

savefile = 'notface4.mat';
save(savefile, 'notface4')
     Ez a rész épp a nem-arc adatbázisomat töltötte fel vagy 24ezer képpel... Ugyanígy számítottam az arcokból is az integrálképet... Egész gyors... Talán gyorsabb, mint a C... mint az OpenCV... Legalábbis megírni gyorsabb volt... Statisztikai számításokra meg szinte tökéletes... (csak az a változódeklaráció idegesít időnként... meg a mátrixméret kompatibilitási problémák)

Matlab forráskód statisztikai számításokra:

clear all;
close all;
clc;

load 'all.mat';
load 'nf.mat';
        first_feature = zeros(1,4533);
            first_feature(1,:)=(fi(24,9,:)-(fi(24,18,:)-fi(24,9,:)))/110160;
            min(first_feature)
            max(first_feature)
        second_feature = zeros(1,4533);
            second_feature(1,:)=(fi(12,18,:)-(fi(24,18,:)-fi(12,18,:)))/110160;
            min(second_feature)
            max(second_feature)
        notface_first_feature = zeros(1,96781);
            notface_first_feature(1,:)=(nfi(24,9,:)-(nfi(24,18,:)-nfi(24,9,:)))/110160;
        notface_second_feature = zeros(1,96781);
            notface_second_feature(1,:)=(nfi(12,18,:)-(nfi(24,18,:)-nfi(12,18,:)))/110160;
        %scatter(first_feature,second_feature);   %szoras kirajzolasa
        x=sum(second_feature(1,1:4533))/4533;    %atlagertek 
        hold on;
        plot(notface_second_feature,notface_first_feature,'g+');        
        plot(second_feature,first_feature,'r+');
        
        legend('4533 Face','96781 NonFace');
        
        xlabel('Fuggoleges szimmetria (-0.5<f<0.5)');
        ylabel('Vizszintes szimmetria (-0.5<f<0.5)');
        figure(2);
        subplot(221);
        hist(first_feature,100);
        title('Arcok hisztogramja. Elso kriterium');
        subplot(222);
        hist(second_feature,100);
        title('Arcok hisztogramja. Masodik kriterium');
        subplot(223);
        hist(notface_first_feature,100);
        title('NemArcok hisztogramja. Elso kriterium');
        subplot(224);
        hist(notface_second_feature,100);
        title('NemArcok hisztogramja. Masodik kriterium');  
     Részletekért ajánlom Viola-Jones cikkét...


     Holnap fogok neki, s bepötyögöm mind a 115 szűrőt, amit Chesnokov Yuriy volt olyan kedves és megosztott velem... Ez is elég négermunka, viszont ennek már szemmellátható eredménye van... Mindenik szűrő után nézhetek egy hisztogramot és egy eloszlási képet... Remélem vezet valahová...

     Digilent-től még semmi válasz... Kezdek türelmetlen lenni... Még ezen a héten eljátszadozom ezzel a képfelismeréssel, aztán jövőhéttől fogok neki hardware-t programozni... Kipróbálom a kamerát és a wireless modult... Na az lesz az igazi meccs... Mert azt debugolni nem lehet...

0 megjegyzés:

Megjegyzés küldése

Return top