Newsgroup: it.comp.grafica
Titolo: elaborazioni immagini

Come si fa a partire da un'immagine ad esempio bitmap a ricostruire la sua
matrice per elaborarla al computer? vorrei trovare dei documenti o dei libri
che mi spiegassero come costruire proprio l'algoritmo e non ad importarla
semplicemente con Matlab.
Grazie.


Se ho ben capito, tu vuoi ottenere da un'immagine una matrice numerica.
Questo presuppone che sia già stato stabilito che corrispondenza c'è tra
la tua immagine e la matrice.
La parte più semplice è quella delle "dimensioni": la scelta più natura
è quella di associare ad un'immagine di M pixel per N pixel una matrice
di M colonne e N righe... e fin qui nessun problema.
Il secondo passo è stabilire come i valori di colore del singolo pixel
si traducono negli elementi della tua matrice. Qui c'è ampia scelta e
libertà: se hai a che fare con immagini in scala di grigio, la scelta
più comune è quella di asseganre all'elemento (m, n) della matrice il
valore (in base dieci) del(dei) byte(s) associato(i) al pixel (m,n). Ma
ribadisco che questo tipo di corrispondenza è del tutto arbitraria e ti
puoi sbizzarrire come vuoi...
Detto ciò, l'algoritmo è banale: crei una matrice delle giuste
dimensioni e poi scorri pixel per pixel e assegni i valori agli elementi
corrispondenti...
La parte complicata sta casomai nel leggere l'immagien da file, ma
questa ha a che fare con la lettura di un formato file preciso, e non
con al trasformazione di immagini in matrici...
Ciao
Giacomo

 con al trasformazione di immagini in matrici...
ecco mi sembra tu abbia capito benissimo. Non so se hai mai visto ci sono
alcuni programmi come matlab e mathematica che leggono l'immagine e ti
creano la matrice relativa con un solo comando. Ecco voglio fare la stessa
cosa però con un programma mio. Mi hai dato un sacco di aiuti ti ringrazio.
Ecco adesso c'è il problema di leggere l'immagine. Se prendo una bitmap ad
esempio come faccio a leggerla? non posso mica fare leggi file...

 non posso mica fare leggi file...
Intanto in che linguaggio intendi fare il tuo programma? Questo
lunguaggio ha già delle librerie pronte per trattare le immagini?
Trattano i formati che ti interessano? Se si, sei a posto: tiri su
l'immagine e procedi come suggerito sopra.
Se invece devi scriverti il filtro di importazione dell'immagine,
bisogna che tu apra il file come binario e vada a farti il "parsing"
byte a byte secondo le specifiche del formato che intendi usare
(specifiche che troverai in rete credo senza troppi problemi, credo). Se
sei costretto ad implementarla da 0, questa costituirà di sicuro la
parte più lunga del porgramma...
Ciao
Giacomo

 parte più lunga del porgramma...
no niente librerie per trattare le immagini almeno che sappia io. Userò
fortran. Cosa intendi con specifiche del formato? ho provato a cercare ma
non ho trovato riferimenti utili. Purtroppo sono un assoluto profano del
trattamento immagini! grazie ancora. Ho visto in rete il libro della
schaum's Computer grafica. Per caso lo conosci? potrebbe aiutarmi?

fortran. Cosa intendi con specifiche del formato? ho provato a cercare ma
http://www.why-not.com/articles/formats.htm
http://www.dcs.ed.ac.uk/home/mxr/gfx/
http://www.faqs.org/faqs/graphics/fileformats-faq/
'bye

 potrebbe aiutarmi?
Non lo conosco, mi spiace.... comunque non ti serve niente di
aprticolare, ti basta qualcosa che ti dica: il primo byte che incontro
significa questo, il secondo e il terzo significano quest'altro, ecc...
Ciao
Giacomo

 significa questo, il secondo e il terzo significano quest'altro, ecc...
grazie mi sei stato di grandissimo aiuto.

 parte più lunga del porgramma...
Bisogna considerare anche gli algoritmi di compressione, credo. Poi ci sono
i byte di controllo, ecc ecc. Insomma credo che, sulla base delle specifiche
del formato, costruire un algoritmo che ti dica come ottenere i "valori" dei
singoli pixel, sia un lavoraccio. In fondo credo che da qualche parte del pc
ci sia una "tappa" in cui l'immagine difitale viene trattata come una
matrice di byte che descrivono i singoli pixel. Non si potrebe leggerla da
lì? Non so se tecnicamente è fattibile, ma in linea di pricipio sì. Carico
l'immagine ed il monitor me la visualizza. Da qualche parte della memoria
c'è una rappresentazione già bella e decodificata della matrice
corrispondente: se si potesse accedere a questa memoria potrebbe essere
tutto più facile. Si risparmierebbe di fare il lavoro di decodifica del
formato che il computer avrebbe già fatto per noi.
E' possibile in pratica?
E' corretto in linea di principio?
Grazie

 E' corretto in linea di principio?
Intanto questo prevederebbe che tu per far girare il tuo programma ne
tenga un'altro aperto e nel uale carichi l'immagine, il chè già non è il
massimo.
Ad ogni poi ci sono mille altri ostacoli, tra cui il fatto che non sai
come il programma memorizza l'immagine, non sai dove (e non lo sa
neacnhe lui, perchè il SO "astrae" la memoria, quindi il programma non
sa esattaemtne dove sta andando a scrivere) e se anche lo sapessi non
credo ci potresti accedere perchè la memoria probabilmente è assegnata
"in esclusiva" ai singoli programmi.
Credo che l'unica cosa fattibile sia catturare lo schermo, ma a parte i
problemi di assicurarsi che l'immagine sia rappresentata 1:1 (e se è più
grande della risoluzione dello schermo?) e che non ci siano variazini di
colore, non credo assolutaemtne che sia più sempplice che non scriversi
un filtro di importazione...
Insomma, gira che ti rigira la strada è quella: o lo fai o lo trovi già
fatto, ma di un filtro di importazione da file hai bisogno...
Ciao
Giacomo