Anteprima
Vedrai una selezione di 12 pagine su 54
Sistemi operativi - tesina robot di sistemi operativi Pag. 1 Sistemi operativi - tesina robot di sistemi operativi Pag. 2
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Sistemi operativi - tesina robot di sistemi operativi Pag. 6
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Sistemi operativi - tesina robot di sistemi operativi Pag. 11
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Sistemi operativi - tesina robot di sistemi operativi Pag. 16
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Sistemi operativi - tesina robot di sistemi operativi Pag. 21
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Sistemi operativi - tesina robot di sistemi operativi Pag. 26
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Sistemi operativi - tesina robot di sistemi operativi Pag. 31
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Sistemi operativi - tesina robot di sistemi operativi Pag. 36
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Sistemi operativi - tesina robot di sistemi operativi Pag. 41
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Sistemi operativi - tesina robot di sistemi operativi Pag. 46
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Sistemi operativi - tesina robot di sistemi operativi Pag. 51
1 su 54
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

IMMAGINE

#ifdef DEBUGoutfilename = strdup(DEFAULT_OUTFILE); //per debugofd = fopen(outfilename, "w"); //salva in un file l'immagine acquisitaif(ofd == NULL) {perror(outfilename);exit(EXIT_FAILURE);}fprintf(ofd, "P5\n%d %d 255\n", win.width, win.height);#endiffor (i = 0; i < 19200; i++) { //salvo l'immagine acquisita nella matricey = *(buffer+1);buffer += 2;#ifdef DEBUGfputc(y&0xFF, ofd);#endifgray_mat_prod[i%indice1][i/indice1]=y;}#ifdef DEBUGfclose(ofd);#endifprintf("\n *** PRODUTTORE : acquisita immagine ***\n");for(i_ind=0;i_ind<160;i_ind++){ //copio l'immagine in grayscale nella sharedmemoryfor(j_ind=0;j_ind<120;j_ind++){*ptr=gray_mat_prod[i_ind][j_ind];ptr++;}}printf("\n *** PRODUTTORE : copiata immagine nella shared memory***\n"); 1#ifdef DEBUGfd=open("./gray_prod.doc",O_WRONLY|O_CREAT,0644); //per debugfor(i_ind=0;i_ind<160;i_ind++){ //salvo in un file doc l'immagine acquisita in un for-mato


compatibile col matlab
for(j_ind=0;j_ind<120;j_ind++){
    y=gray_mat_prod[i_ind][j_ind];
    int2char(y,num);
    w1=write(fd,&num,3);
    w1=write(fd,&virgola,1);
}
w1=write(fd,&newline,1);
close(fd);
#endif
}

void co(int ID_Sem,unsigned int * gray_inv,int fd1){
    unsigned int i_ind,j_ind,k_ind,l_ind;
    int fd = -1;
    int y=0;
    char num[4]="000\0";
    char virgola=',';
    char newline='\n';
    ssize_t w1;
    unsigned int gray_inv_cons[indice2][indice1];
    unsigned int my_blurring[60-9][80-9];
    unsigned int my_blurring_inv[80-9][60-9];
    unsigned int mio_edge[indice2/2-9][indice1/2-9]; //crea matrice di tutti uni (tuttobianco)
    unsigned int gray_mat[indice1][indice2];
    unsigned int * ptr=gray_inv;
    int app;
    int J_ind,X_ind,Y_ind,I_ind,media_pixel;
    int ind_ri,ind_co;
    char pixel_corrente;
    float tmp,cast;
    int soglia=0;
    const int PSF[2][2]={ //matrice gaussiana 10 x 10 usata come kernel per il blurringdell'immagine in toni di grigio
        {0.2500,0.2500},
        {0.2500,0.2500}
    };
    const unsigned int sqrt_vett[256]


={1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9 1,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
---");#ifdef DEBUGfd=open("./gray_cons.doc",O_WRONLY|O_CREAT,0644); //per debugfor(i_ind=0;i_ind<160;i_ind++){for(j_ind=0;j_ind<120;j_ind++){y=gray_mat[i_ind][j_ind];{ //salvo file doc l'immagine in un formato compatibile colmatlabint2char(y,num);w1=write(fd,&num,3);w1=write(fd,&virgola,1);}w1=write(fd,&newline,1);}close(fd);#endifind_ri=0;//indice riga matrice resizedind_co=0;//indice colonna matrice resizedi_ind=0;j_ind=0;//riduce della metà le dimensioni della matricefor (i_ind=0;i_ind<=120-2;i_ind+=2){ //per tutte le righefor (j_ind=0;j_ind<=160-2;j_ind+=2){ //per tutte le colonnemio_resize[ind_ri][ind_co]=(gray_inv_cons[i_ind][j_ind]+gray_inv_cons[i_ind][j_ind+1]+gray_inv_cons[i_ind+1][j_ind]+gray_inv_cons[i_ind+1][j_ind+1])/4; //calcola lamedia dei 4 pixel adiacenti per ottenere il pixel nuovoind_co=ind_co+1;}ind_co=0;ind_ri=ind_ri+1;}printf("\n--- C O N S U M A T O R E : effettuata riduzione dell'immagine

---");motore('f',fd1);#ifdef DEBUGfd=open("./gray_cons_rid.doc",O_WRONLY|O_CREAT,0644); //per debug 1for(i_ind=0;i_ind<60;i_ind++){ //salvo doc l'immagine ridotta in un formato compa-tibile col matlabfor(j_ind=0;j_ind<80;j_ind++){y=mio_resize[i_ind][j_ind];int2char(y,num);w1=write(fd,&num,3);w1=write(fd,&virgola,1);}w1=write(fd,&newline,1);}close(fd);#endif#ifdef DEBUGchar *outfilename;//per debugint i=0;FILE *ofd = NULL;outfilename = strdup(DEFAULT_OUTFILE2);ofd = fopen(outfilename, "w");if(ofd == NULL) {perror(outfilename);exit(EXIT_FAILURE);}fprintf(ofd, "P5\n%d %d 255\n", 160, 120);for (i = 0; i < 19200; i++) { //salva in un file l'immagine acquisitay = gray_mat[i%indice1][i/indice1];fputc(y&0xFF, ofd);}fclose(ofd);#endiffor(j_ind=1;j_ind<(80-8);j_ind++){ //effettua blurring con pr. di convoluzione traimmagine e kernel PSFfor(i_ind=1;i_ind<(60-8);i_ind++){app=0;for(k_ind =

0;k_ind<2;k_ind++){
    for(l_ind=0;l_ind<2;l_ind++){
        pixel_corrente=mio_resize[i_ind+k_ind][j_ind+l_ind];
        app+=pixel_corrente/4; //la PSF ha per elementi tutti 0.25 ossia 1/4
    }
    //uso gli interi per andare più veloce , visto che l'ARM è senza FPU
    my_blurring[i_ind][j_ind]=abs(app);
}
}
printf("\n--- C O N S U M A T O R E : blurring completato ---\n");
for(i_ind=0;i_ind<80-9;i_ind++){ //calcola matrice trasposta dell'immagine blurred
    for(j_ind=0;j_ind<60-9;j_ind++){
        my_blurring_inv[i_ind][j_ind]=my_blurring[j_ind][i_ind];
    }
}
printf("\n--- C O N S U M A T O R E : calcolata la trasposta dell'immagine blurred ---\n");
#ifdef DEBUG
fd=open("./gray_inv.doc",O_WRONLY|O_CREAT,0644); //per debug
for(i_ind=0;i_ind<120;i_ind++){
    for(j_ind=0;j_ind<160;j_ind++){
        y=gray_inv_cons[i_ind][j_ind];//salvo in file doc l'immagine trasp. in un formatocompatibile col
    }
}
```html <matlabint2char(y,num);w1=write(fd,&num,3);w1=write(fd,&virgola,1);}> w1=write(fd,&newline,1);}> close(fd);#endif#ifdef DEBUGfd=open("./blur.doc",O_WRONLY|O_CREAT,0644);//per debugfor(i_ind=0;i_ind<(60-9);i_ind++){ //azzera matrice mio_edgefor(j_ind=0;j_ind<(80-9);j_ind++){y=my_blurring[i_ind][j_ind]; //salvo doc l'immagine blurred in un formato compati-bile col matlabint2char(y,num);w1=write(fd,&num,3);w1=write(fd,&virgola,1);}> w1=write(fd,&newline,1);}> close(fd);#endif//edge detection del primo ordine con algoritmo di Sobel e soglia per binarizzazione//automaticaprintf("\n--- C O N S U M A T O R E : inizio calcolo soglia ");conta=0;sog=0;app=0;for (i_ind=0;i_ind<ed_im_dims1;i_ind=i_ind+2){ //indice di rigafor (j_ind=0;j_ind<ed_im_dims0;j_ind=j_ind+2){ //indice di colonnaapp+=my_blurring[i_ind][j_ind]; //calcolo approssimato del valore medio di tutti ipixelconta=conta+1; //per finire prima salto delle righe e delle colonne} ```//visto che l'errore commesso non è molto grosso sog=(float)(app/conta); media_pixel=(int)(sog); //trovo la media degli elementi dell'immagine in grayscale 1 soglia= 5*sqrt_vett[media_pixel]; // soglia per Sobel è 2*(media)^1/2 printf("\n--- C O N S U M A T O R E : soglia = %d \n",soglia);//calcola il prodotto di convoluzione coi due kernel for (Y_ind=0;Y_ind prod_parz_x; s_lungo_y = s_lungo_y + prod_parz_y; }}} ax=abs(s_lungo_x); //trovo i valori assoluti delle approssimazioni delle componenti del radiente ay=abs(s_lungo_y); SUM = ax+ay; //calcolo l'approssimazione del modulo al quadrato del gradiente if(SUM > 255) //effettuo saturazione dei valori SUM = 255; //riportandoli all'intervallo [0,255] else if(SUM < 0) SUM = 0; if(SUM > soglia) //effettuo la binarizzazione mio_edge[Y_ind][X_ind] = 1; //se supero la soglia metto un pixel bianco else mio_edge[Y_ind][X_ind] = 0; //se non supero la soglia metto un pixel nero }} printf("\n--- C O N S U M A T O R E :calcolata matrice edge detection con Sobel e bi-narizzazione con soglia---\n"); #ifdef DEBUG fd=open("./edge.doc",O_WRONLY|O_CREAT,0644);//per debug for(i_ind=0;i_ind<ed_im_dims1-1;i_ind++){ for(j_ind=0;j_ind<ed_im_dims0;j_ind++){ y=mio_edge[i_ind][j_ind]; //salvo in un file doc l'immagine trattata con Sobel int2char(y,num); //in un formato compatibile col
matlabw1=write(fd,&num,3);w1=write(fd,&virgola,1);}
Dettagli
Publisher
A.A. 2012-2013
54 pagine
1 download
SSD Ingegneria industriale e dell'informazione ING-IND/22 Scienza e tecnologia dei materiali

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Menzo di informazioni apprese con la frequenza delle lezioni di Sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof Cotroneo Domenico.