Jump to content
Elenuccia86

3d Watermarking

Recommended Posts

Ciao a tutti! Come prima cosa mi presento. Mi chiamano Elena e sono studentessa magistrale di ingengeria. A giguno devo sostenere un esame in cui mi si richiede di presentare un proggetto di marchiatura di oggetti 3D. Il mio problema è che di 3D non so quasi nulla :lol:. Certo non vi chiedo di farmi un corso accellarato ;) ma potreste consigliarmi tra i molti programmi che vedo usate, uno che sia abbastanza semplice ma che mi dia la possibilità di agire bene sulle mesh? Quello che devo fare è modificare ad esempio la disposizione dei veritici in basa al codice del mio marchio digitale oppure agire sul colore o sulla texture in ogni signola mesh....Non se sono stata chiara...spero di si ^_^.

Share this post


Link to post
Share on other sites

consiglio blender perchè è facilmente programmabile in python e trovi una comunita di sviluppatori molto aperta, senza contare che potrai cmq dare il soft in giro senza grossi problemi.

Share this post


Link to post
Share on other sites

Interessante come progetto, posso chiedere come funziona a grandi linee?

Hai un hash table con il marchio e in base al risultato della hash applichi un offset?

Come marchi i vertici? I modelli marchiati rimangono intatti e visibili senza il tuo programma?

La questione di che programma utilizzare è sempre una questione aperta. Blender è sicuramente un ottima scelta, è una piattaforma aperta e multi piattaforma e poi come dice Algo è programmabile in python. Il problema casomai è che se devi applicare un filtro complicato con python su un numero alto di vertici rischi di invecchiare davanti al computer nell'attesa.

In base a cosa devi fare potrebbe essere consigliabile fare una cosa mista plug-in / script. Io conosco bene maya e ti posso garantire che cose del genere si fanno abbastanza bene e in fretta, c'è il piccolo difetto che Maya costa oltre 2500€. E nella versione di base mi sembra che non si possano fare plug-in (altrimenti aggireresti le limitazioni della versione di prova).

Se ti interessa soltanto di modificare i vertici tramite il tuo programma potresti scegliere anche altre strade, per esempio un programma specifico per l'editing di mesh in ambito da laboratorio è mesh lab, programma sviluppato all'università di Pisa.

http://meshlab.sourceforge.net/

Se non altro sono tutti italiani. ^_^

Un'altra alternativa potrebbe essere fare un collada conditioner. Un contioner è un filtro che viene applicato ad un file Collada, ti arrivano gli attributi della mesh (vertici, normali, colore vertici, uv, texture, ecc..) e li puoi modificare e passare al filtro successivo.

La piattaforma collada è aperta e sviluppata principalmente da Sony.

Per maggior informazioni:

http://www.collada.org/mediawiki/index.php/COLLADA_Refinery

e www.collada.org

Share this post


Link to post
Share on other sites

Guarda, non ho ancora stabilito come marchiare. Per ora mi sono letta un sacco di articola in materia....so come si possono marchiare immagini abbastanza bene e ho scritto un codice in MATLAB che lavora sulle domino wavelt.....per quanto ridugarda il 3D per me è un mondo del tutto nuovo. Il professore mi ha lasciato carta bianca il che è un bene ma anche un male...quindi in questa settiama mi sono "solo" documenta.

Non è stata una impresa facile! Gli algoritmi che si trovano sono sempre gli stessi, non se li conosci...TSQ TSV?.

L'idea dei vertici è buona per fare un sistema di marchiatura fragile...ma a pensarci bene non credo che vada bene per marchio robusto....

Poi mi piacerbbe un algoritmo che abbia a che fare con il colore, visto ho appena fatto un esame dove ho scritto un codice, sempre in MATLAB, per creare una maschera di colore, nello spazio di colore HSV, per immagini e video ;).

TSQ l'ho capito abbastanza bene, poi ho trovato un algoritmo proposto da Wang Yingche si basa sulla DCT, praticamente talgia le mesh con dei piani per ottenere una immagine 2D e poi fa la DCT di ongi compoente R G B, sceglie un range di cofficinenti ed inserisce il suo marchio. (super-riassunto....se ti interssa provo a spiegartelo meglio;))

Mi trovo in grandi difficoltà perchè con il 3D non ho mai avuto a che fare ( se si escludono Viaggio al Centro della Terra e Mostri contro Alieni ahahaha :lol::lol: ), ed ho imparato a programmare un pochino con questo MATLAB da un mese....prima non avevo MAI corsi di programmazione. Sono ancora un pò spaesata.

Oggi ho trovato questo forum, nelle mie mille ricerche, e ho pensato di chiedervi se ne sapevate qualcosa.....non sono una ragazza che si scoragga facilmente!!!

Vorrei trovare un pogramma per fare un pò di prove, sai come vanno queste cose....studi la teroria ed è tutto chiaro, ma finchè non ci metti mano tu personalemtne non capisce mai a fondo.

blender lo sto vedendo ora....python è un ottimo piatto cinese e non capisco che c'entri con il marchio :P (nn so che sia! ma mi sto documentando!!)

Sembrano interssati anche algoritmi che costruiscono un grafo 3D del modello...ma non capisco bene.

Non riesco a trovare articoli che spighimo COME si fa un modello 3D, come viede descritto.....quello che so l'ho ricavato tra le righe nei metodi di embenig e non è moltissimo.

Share this post


Link to post
Share on other sites

Caspita non ti hanno fatto fare un corso di programmazione? Peccato. :(

Comunque se sai usare matlab si trovano anche tools per importare modelli 3D all'interno di matlab, o volendo puoi crearti uno scriptino matlab per leggere i file .obj.

Obj è un formato di memorizzazione di oggetti 3d piuttosto datato e pieno di lati negativi, ma molto semplice da leggere. Per fare un progettino dovrebbe essere più che sufficiente.

http://www.royriggs.com/obj.html Il questo link puoi trovare le informazioni sul formato.

Sappi comunque che matlab è un linguaggio interpretato e va molto lento. Però se devi usare le wavelet matlab è potentissimo e ha già molti strumenti per calcolarle.

Spiegare come si fa un modello 3D è come spiegare come si fa un disegno.. ci sono migliaia di tecniche. La scansione laser (usata in ambito dei beni culturali e a volte nel cinema), la voxelizzazione di volumi (usata in ambito medico), superficie ricavate matematicamente e poi ovviamente la modellazione.

Non penso che ti interessi tanto come viene fatto, ma come viene memorizzato (se poi vuoi imparare a modellare allora vai pure nella sezione tutorial ;) ). Tralasciando superfici parametriche, le mesh poligonali sono memorizzate appunto in poligoni.

Per alcuni programmi i poligono sono solo triangoli, in altri possono assumere forme diverse (quadrilateri, poligoni a n lati, trianglefan, triangleStrips). Una mesh poligonale comunque è sempre una lista di vertici e una lista di indici che vanno a identificare il vertice.

Per esempio un triangolo sarà fatto dai vertici A B C (con posizione x y z, normale alfa beta gamma, colore r, g, b, cordinate u v, e tutti gli atributi che ti vengono in mente) e poi ci sarà una lista di indici che va a identificare i poligoni.

Per esempio un cubo in formato obj viene così

mtllib cube_texture.mtl

g cube

usemtl blinn1SG


v 0.0 0.0 0.0

v 0.0 0.0 1.0

v 0.0 1.0 0.0

v 0.0 1.0 1.0

v 1.0 0.0 0.0

v 1.0 0.0 1.0

v 1.0 1.0 0.0

v 1.0 1.0 1.0


vn 0.0 0.0 1.0

vn 0.0 0.0 -1.0

vn 0.0 1.0 0.0

vn 0.0 -1.0 0.0

vn 1.0 0.0 0.0

vn -1.0 0.0 0.0


vt 0.0 0.0

vt 1.0 0.0

vt 1.0 1.0

vt 0.0 1.0


f 1/1/2 7/3/2 5/2/2

f 1/1/2 3/4/2 7/3/2

f 1/1/6 4/3/6 3/4/6

f 1/1/6 2/2/6 4/3/6

f 3/1/3 8/3/3 7/4/3

f 3/1/3 4/2/3 8/3/3

f 5/2/5 7/3/5 8/4/5

f 5/2/5 8/4/5 6/1/5

f 1/1/4 5/2/4 6/3/4

f 1/1/4 6/3/4 2/4/4

f 2/1/1 6/2/1 8/3/1

f 2/1/1 8/3/1 4/4/1

A parte un po' di header per indicare il materiale da usare v sono le posizioni dei vertici (un cubo ha 8 vertici), vn le normali (le facce del cubo sono orientate in 6 direzioni) e vt sono le coordinate UV, in questo caso 4.

Successivamente sono elencate le facce. Per esempio la prima faccia è:

f 1/1/2 7/3/2 5/2/2

che indica che il primo vertice è fatto composto dalla posizione 1, Uv 1 e normale 2 , il secondo vertice dalla posizione dalla posizione 7, UV 3 e normale 2 e il terzo vertice dalla posizione 5, UV 2 e normale 2.

Visto che la faccia è composta da tre vertici ovviamente è un triangolo. Se noti ci sono 12 facce, appunto per fare un cubo servono 12 triangoli (ma potevano essere anche 6 quadrati).

Ovviamente ci sono formati più complessi e moderni, ma la base è sempre la solita, vengono memorizzati liste di attributi per vertice (posizione, normale, uv, colore ecc...) e poi si usano degli indici per andare a ripescare gli attributi per poligono.

ps: Hai scritto che ti piacerebbe fare un algoritmo che agisce sul colore. Il colore per vertice non viene quasi mai usato, salvo casi particolari, per il tuo progettino potrebbe andare più che bene, per applicazioni reali un po' meno.


Edited by ilmale

Share this post


Link to post
Share on other sites

Grazie mille!!!! per ora mi hai dato un po di materiale su cui lavorare....vi terrò aggiorntati sulla mie mirabolanti avventure.

PS. Ho scoperto da poco il mondo della programmazione ma devo dire che è un mondo estramante affascinante! Un programmatore VERO, così come un grafico 3D, è non solo un tecnico, ma un artista.......un artista nel secolo della tecnologia :rolleyes:


Edited by Elenuccia86

Share this post


Link to post
Share on other sites

Rieccomi qui, dopo un bel po di tempo :lol: ho letto diversi articoli ed ho provato ad implementare con matlab un alforitmo che si chiama TSQ che mette il marchio cmabiando la posizione dei vertici. Questo lo fa cambiando il rapporto tra i lati e quello tra base e altezza dei triagnolini della mesh.

Ora, io ho una tabella con i vertici e le loro coordiante ed una con le facce delle mseh( ogni faccia ha 3 vertici e io ho questi vertici!), la lunghezza dei lati l'ho stabilita come distanza tra due veritici, e l'altezza attraverso l'area. Ma ho un problema: come capisco le variazioni delle coordinate dei vertici da quella del rapporto tra i lati?se il rapporto, l1/l2 tra i lati l1 e l2, passa ad esempio da 0.3 a 0.8 come varieranno di conseguenza x,y,z? Gli articoli che ho letto dicono di agire prima cambiando la l'altezza mantendo costante il resto e poi cambiare il rapporto tra gli altri due lati.

Non riesco a venire a capo. Probabilmente matlab non è il migliore dei softwar per fare questo....sto uscendo davvero pazza!!!! :wacko:

spero che possiate (e che vogliate ^_^ ) aiutarmi

un abbraccio

e un bacio grande a chi mi aiuta!!! ;)

Share this post


Link to post
Share on other sites

L'altezza di un triangolo è sempre definita rispetto ad un lato quindi se hai un triangolo ABC per modificare l'altezza rispetto al lato AB devi spostare C.

Per modificare soltanto l'altezza devi postare C lungo la normale di AB che punta verso C. Quindi devi proiettare AC su AB per trovare il punto (D) sulla base perpendicolare all'altezza. A quel punto puoi spostare C lungo la retta che passa da DC.

Il resto della tua spiegazione non è molto chiara, devi modificare i rapportri tra gli altri due lati (BC e AC) in maniera che rimangano il rapporto uguale a prima? In tal caso devi spostare i due vertici B e A lungo la retta che passa tra questi due vertici (in modo da non intaccare l'altezza). La soluzione dovrebbe essere una semplice sistema di due equazioni, matlab li risolve in un batter d'occhio. ;)

Ciao.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...