Négermunka

     Szép nap ez a mai, mondhatnám... De nem mondom, mert pont nem az... Tegnap rájöttem, hogy van egy nagy hibája a matlab programomnak. Ez a heves ellenállás a skálázással kapcsolatosan. Kicsit részletesebben kifejtve ez azt jelenti, hogy a forráskódom annyira túlnőtte magát rajtam, hogy az már kezdett zavarni. Elérkeztem egy olyan szintre, ahol a következő lépés a teljes képscannelés, majd a képek osztályozása lett volna, viszont ez többszöri kétségbeesett próbálkozás után sem sikerült...

    És igen. Elég kétségbeesett próbálkozás volt, mert nem akartam a teljes munkámat bedobni a kukába. Gondoltam, még meg tudok menteni belőle ezt-azt... Azán ennek reményében újra nekifogtam kiszámolni a kis szűrőim koordinátáját, de már egy kicsit okosdtam az ezelőtti hibáimból. Egy részletet bemásolnék ide, ha már annyit kínlódtam vele, gyönyörködjön benne más is.

fx(20,counter)=int(sor,oszlop)-int(sor,oszlop+2*mph3-1)-int(sor+mph4-1,oszlop)+int(sor+mph4-1,oszlop+2*mph3-1)-...
                (int(sor,oszlop+2*mph3-1)-int(sor,oszlop+3*mph3-1)-int(sor+mph4-1,oszlop+2*mph3-1)+int(sor+mph4-1,oszlop+3*mph3-1))-...
                (int(sor+mph4-1,oszlop)-int(sor+mph4-1,oszlop+2*mph3-1)-int(sor+2*mph4-1,oszlop)+int(sor+2*mph4-1,oszlop+2*mph3-1))+...
                (int(sor+mph4-1,oszlop+2*mph3-1)-int(sor+mph4-1,oszlop+3*mph3-1)-int(sor+2*mph4-1,oszlop+2*mph3-1)+int(sor+2*mph4-1,oszlop+3*mph3-1))+...
                int(sor+2*mph4-1,oszlop)-int(sor+2*mph4-1,oszlop+2*mph3-1)-int(sor+3*mph4-1,oszlop)+int(sor+3*mph4-1,oszlop+2*mph3-1)-...
                (int(sor+2*mph4-1,oszlop+2*mph3-1)-int(sor+2*mph4-1,oszlop+3*mph3-1)-int(sor+3*mph4-1,oszlop+2*mph3-1)+int(sor+3*mph4-1,oszlop+3*mph3-1));
            
            fx(20,counter)=fx(20,counter)/(meret*3*meret*4*255);

     Gondolom nem kell részletezzem, hogy mennyire fájt a szemem tegnap éjjel... Aztán amikor ezzel is eljutottam egy bizonyos szintre, rájöttem, hogy ez sem épp a legjobb megoldás, mert csak amíg kiszámolom a kis fekete kocka minusz kis fehér kocka kombinációkat, addigra még a gólya is kikölti a tojásait...

     Aztán fogtam magam, illetve a neten talált object detection demo programot, s megírtam belőle a matlabos verziót. Valamiért egyre jobban tetszik ez a Matlab. Már fel sem merült bennem, hogy C-ben vagy C#ban dolgozzam. Itt nem kell azzal törődni, hogy milyennek deklaráltad a változót, vagy hogy egyáltalán van-e deklarálva, nem kell azon gondolkodni, hogy háromszázezer darab számot hogyan szorzunk meg egy konstanssal. Matlabban csak írod, ami a csövön kifér, s megy a program. (vagy ha mégsem menne, akkor próbáld meg runtime debugolni :P ).
     Ami még fejlemény, hogy megdöglött az egerem. Jó na, ez így egy kicsit durva. Inkább fogalmazzunk úgy, hogy az örök életre való felébredés reményében mély álomba szenderült. Vagy, hogy most a végtelen felbontású widescreen képernyőn mozgatja egy ötéves kisfiú kurzorját. Persze nem adtam olyan könnyen. Még párszor megpróbáltam felébreszteni, de mindhiába. Nem szomorkodtam sokat, vettem egy másikat, amelyik majd hű társam lesz a projekt végkifejlete felé vezető úton. S ha már ott voltam, vettem egy USB elosztót is, mert a laptopnak már minden lukjába került valami bedugnivaló.
     Most, amíg ezeket a sorokat írom, a Matlab gőzerővel (97% CPU kihasználtság) számolja a képtulajdonságaimat. Mivel most nem mátrixműveletes formában van megírva, így csak lassan tud haladni. Kb. 5-6 másodperc egy képre, amíg kiszámolja mind a 115 tulajdonságot. De időm, mint a tenger (vagyis egyre jobban fogy). Úgy kezdem érezni magam, mint Robinson azon a szigeten. Egyre jobban vesztem el az időérzékemet, minden napra kapok valami kis csöszmölnivalót (milyen szép (szak)szó), egyre gyorsabban telnek a napok, s egyre kevésbé tudok visszaemlékezni, hogy mit is csináltam tegnap.
     Viszont ha már itt vagyok, bemásolok egy részt a mai munkámból is:

%--------------------------------------
% feature5x4_11  15
% 0.00 0.00 0.25 0.20  -1
% 0.25 0.00 0.75 0.20   1
% 0.75 0.00 1.00 0.20  -1
% 0.00 0.20 0.25 0.40   1
% 0.25 0.20 0.75 0.40  -1
% 0.75 0.20 1.00 0.40   1
% 0.00 0.40 0.25 0.60  -1
% 0.25 0.40 0.75 0.60   1
% 0.75 0.40 1.00 0.60  -1
% 0.00 0.60 0.25 0.80   1
% 0.25 0.60 0.75 0.80  -1
% 0.75 0.60 1.00 0.80   1
% 0.00 0.80 0.25 1.00  -1
% 0.25 0.80 0.75 1.00   1
% 0.75 0.80 1.00 1.00  -1

sorszam(num)=15;
sorok(num,1:15,:)=[0.00 0.00 0.25 0.20;
                   0.25 0.00 0.75 0.20;
                   0.75 0.00 1.00 0.20;
                   0.00 0.20 0.25 0.40;
                   0.25 0.20 0.75 0.40;
                   0.75 0.20 1.00 0.40;
                   0.00 0.40 0.25 0.60;
                   0.25 0.40 0.75 0.60;
                   0.75 0.40 1.00 0.60;
                   0.00 0.60 0.25 0.80;
                   0.25 0.60 0.75 0.80;
                   0.75 0.60 1.00 0.80;
                   0.00 0.80 0.25 1.00;
                   0.25 0.80 0.75 1.00;
                   0.75 0.80 1.00 1.00];

plusz_minusz(num,1:15)=[-1;1;-1;1;-1;1;-1;1;-1;1;-1;1;-1;1;-1;];
num=num+1;
%--------------------------------------
    int=zeros(18,18);
    tulajdonsagok=zeros(30000,115);
for(kepszam=1:30000)    
    int(:,:)=every(kepszam,:,:);
    for(fsz=1:115)
            %fsz=48; %hanyadik featuret szamoljuk

                %atirjuk a 0 ertekeket 1-re, mert a matlabban a tombok 
                %1-tol vannak indexelve.
                merettel=sorok*meret;

                hol_van_zero=find(merettel<1);
                for(i=1:length(hol_van_zero))
                    merettel(hol_van_zero(i))=1;
                end
                merettel=round(merettel);

                %----------------------------------------------------------

            for(i=1:sorszam(fsz))
                feature_temp(fsz,i)=int(merettel(fsz,i,1),merettel(fsz,i,2))-int(merettel(fsz,i,1),merettel(fsz,i,4))-int(merettel(fsz,i,3),merettel(fsz,i,2))+int(merettel(fsz,i,3),merettel(fsz,i,4));
            end

            feature(fsz)=sum(feature_temp(fsz,:).*plusz_minusz(fsz,:));
     end
            feature=feature/(18*18*256);
            tulajdonsagok(kepszam,:)=feature(:); 
            kepszam
end

     Szerintem gyönyörű. Legalábbis mindenképp szebb, mint az, amit tegnap csináltam. S ezzel elkészültem hét óra alatt. Ahhoz meg kellett volna legalább huszonnégy. Mindenképp eddig 1-1 az idő javára.

     Ha végez a Matlab, akkor kicsit neuronhálózok még, aztán nekifogok kamera lelkivilágot tanulmányozni. Az lesz majd az igazi élvezet. Majd megnézem, hogy Matlabban lehet-e soros porton keresztül kommunikálni.

serialOne=serial('COM1', 'BaudRate', 9600);
fopen(serialOne);
fprintf(serialOne,'textFile.txt');
fclose(serialOne);


     Nem is tűnik olyan bonyolultnak, de asszem itt mégis maradok a C#-nál.

     Most látom, hogy ebben a bejegyzésben nincs egy kép sem, így muszály valamivel feldobjam.



     Ha van valami fejlemény, akkor még írok.

0 megjegyzés:

Megjegyzés küldése

Return top