Sei sulla pagina 1di 31

Estudis dInformtica, Multimdia i Telecomunicaci.

Grau de Multimdia

Tractament i publicaci dimatge i vdeo


Jaume Reig Carrascosa
Tercera Prctica dAvaluaci Continuada (Prctica 3)

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

1. Realitza un programa en ActionScript que sobre la mateixa imatge que vau escollir per a lactivitat 1 de la primera prctica realitzi les segents transformacions lineals:

a. Dos binaritzacions, amb dos llindars diferents. b. Un negatiu. De manera que el resultat es mostri sobre una mateixa finestra dividida en quatre, on a ms de les imatges resultats es mostri es la imatge original. a. Dos binaritzacions, amb dos llindars diferents.

Arxiu Flash: 1-A-binaritzacio.fla import flash.display.BitmapData; bitmapA = BitmapData.loadBitmap(enum1); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var bitmapB:BitmapData = new BitmapData(256, 256, false, 0x999999); llindar = 134; for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ gris = bitmapA.getPixel(i,j) & 0x0000FF; if (gris > llindar){ gris = 255;} else{ gris = 0;

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

} color = gris * 256*256 + gris * 256 + gris; bitmapB.setPixel(i,j,color); } } createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=256; /* binaritzaci llindar =134 */ bitmapC = bitmapA.clone(); var bitmapD:BitmapData = new BitmapData(256, 256, false, 0x999999); llindar = 100; for (i = 0; i<bitmapC.width; i++){ for (j = 0; j<bitmapC.height; j++){ gris = bitmapC.getPixel(i,j) & 0x0000FF; if (gris > llindar){ gris = 255;} else{ gris = 0; } color = gris * 256*256 + gris * 256 + gris; bitmapD.setPixel(i,j,color); } } createEmptyMovieClip(imatgeC,this.getNextHighestDepth()); imatgeC.attachBitmap(bitmapC,this.getNextHighestDepth()); createEmptyMovieClip(imatgeD,this.getNextHighestDepth()); imatgeD.attachBitmap(bitmapD,this.getNextHighestDepth()); imatgeC._y=256; imatgeD._y=256; imatgeD._x=256; dispose(bitmapA); dispose(bitmapB); dispose(bitmapC); dispose(bitmapD);

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

b. Un negatiu.

Arxiu Flash: 1-B-negatiu.fla

import flash.display.BitmapData; bitmapA = BitmapData.loadBitmap(enum1); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var bitmapB:BitmapData = new BitmapData(256, 256, false, 0x999999); llindar = 134; for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ gris = bitmapA.getPixel(i,j) & 0x0000FF; negatiu = 255-gris; color = negatiu * 256*256 + negatiu * 256 + negatiu; bitmapB.setPixel(i,j,color); } } createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=256; dispose(bitmapA); dispose(bitmapB);

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

2. Programa una funci capa de donar com a resultat la comparativa de la modificaci del nivell de bits per pxel de color duna imatge (lliure elecci) amb tres nivells diferents.

Arxiu Flash: 2-nivells.fla import flash.display.BitmapData; bitmapA = BitmapData.loadBitmap(blakeyed); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); /* 4 i 3 */ var bitmapB:BitmapData = new BitmapData(256, 256, false, 0x999999); nbitsRG = 4; nbitsB = 3; for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ R = bitmapA.getPixel(i,j) & 0xFF0000 R >>= 16; G = bitmapA.getPixel(i,j) & 0x00FF00; G >>= 8; B = bitmapA.getPixel(i,j) & 0x0000FF; R >>= (8-nbitsRG); R <<= (8-nbitsRG); G >>= (8-nbitsRG);

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

G <<= (8-nbitsRG); B >>= (8-nbitsB); B <<= (8-nbitsB); color = R * 256 * 256 + G * 256 + B; bitmapB.setPixel(i,j,color); } } /* 3 i 2 */ var bitmapC:BitmapData = new BitmapData(256, 256, false, 0x999999); nbitsRG = 2; nbitsB = 1; for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ R = bitmapA.getPixel(i,j) & 0xFF0000 R >>= 16; G = bitmapA.getPixel(i,j) & 0x00FF00; G >>= 8; B = bitmapA.getPixel(i,j) & 0x0000FF; R >>= (8-nbitsRG); R <<= (8-nbitsRG); G >>= (8-nbitsRG); G <<= (8-nbitsRG); B >>= (8-nbitsB); B <<= (8-nbitsB); color = R * 256 * 256 + G * 256 + B; bitmapC.setPixel(i,j,color); } } /* 1 i 1 */ var bitmapD:BitmapData = new BitmapData(256, 256, false, 0x999999); nbitsRG = 1; nbitsB = 1; for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ R = bitmapA.getPixel(i,j) & 0xFF0000 R >>= 16; G = bitmapA.getPixel(i,j) & 0x00FF00; G >>= 8;

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

B = bitmapA.getPixel(i,j) & 0x0000FF; R >>= (8-nbitsRG); R <<= (8-nbitsRG); G >>= (8-nbitsRG); G <<= (8-nbitsRG); B >>= (8-nbitsB); B <<= (8-nbitsB); color = R * 256 * 256 + G * 256 + B; bitmapD.setPixel(i,j,color); } } createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=256; createEmptyMovieClip(imatgeC,this.getNextHighestDepth()); imatgeC.attachBitmap(bitmapC,this.getNextHighestDepth()); imatgeC._y=256; createEmptyMovieClip(imatgeD,this.getNextHighestDepth()); imatgeD.attachBitmap(bitmapD,this.getNextHighestDepth()); imatgeD._y=256; imatgeD._x=256; dispose(bitmapA); dispose(bitmapB);

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

3. Programeu en ActionScript la transformaci en pseudocolor realitzada en la primera prctica del curs.

Arxiu Flash: 3-pseudocolor.fla

import flash.display.BitmapData; var RGB:Array = new Array(); var llindar:Array = new Array(64, 128, 192); var Nmin:Array = new Array(0, 0, 0) var Nmax:Array = new Array(255, 255, 255) var bitmapB:BitmapData = new BitmapData(512, 636, false, 0x999999); bitmapA = BitmapData.loadBitmap(radiografia); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ RGB[0] = bitmapA.getPixel(i,j) & 0xFF0000 RGB[0] >>= 16; RGB[1] = bitmapA.getPixel(i,j) & 0x00FF00; RGB[1] >>= 8; RGB[2] = bitmapA.getPixel(i,j) & 0x0000FF;

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

for (l=0; l<3; l++){ if (RGB[l] > llindar[l]){ RGB[l] = Nmax[l];} else{ RGB[l] = Nmin[l]; } } color = RGB[0] * 256 * 256 + RGB[1] * 256 + RGB[2]; bitmapB.setPixel(i,j,color); } } createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._y=318; dispose(bitmapA); dispose(bitmapB);

4. En la 1 prctica exercici 7 apliquem diferents filtres a mida sobre una imatge a fi destudiar les transformacions espacials lineals. Generar un programa en ActionScript que realitzi aquest mateix exercici, on cada una de les transformacions es mostrin en finestres diferents (o compartides a 4 per finestra).

Arxiu Flash: 4-contorns-verticals-horitzontals.fla

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

import flash.display.BitmapData; bitmapA = BitmapData.loadBitmap(enum7); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); import flash.filters.ConvolutionFilter; import flash.geom.Rectangle; import flash.geom.Point; bitmapC = bipmapA.clone(); /* contorns horitzontals */ var dimX:Number = 3; var dimY:Number = 3; var matriu:Array = [-1, -2, -1, 0, 0, -0, 1, 2, 1]; var divisor:Number = 1; var biaix:Number = 128; var mascara: ConvolutionFilter = new ConvolutionFilter(dimX, dimY, matriu, divisor, biaix); var bitmapB:BitmapData = new BitmapData(256, 256, false, 0x999999); bitmapB.applyFilter(bitmapA, bitmapA.rectangle, new Point(0, 0), mascara); /* contorns verticals */ var dimX:Number = 3; var dimY:Number = 3; var matriu:Array = [-1, 0, 1, -1, 0, 1, -1, 0, 1]; var divisor:Number = 1; var biaix:Number = 128; var mascara: ConvolutionFilter = new ConvolutionFilter(dimX, dimY, matriu, divisor, biaix); var bitmapD:BitmapData = new BitmapData(256, 256, false, 0x999999); bitmapD.applyFilter(bitmapA, bitmapA.rectangle, new Point(0, 0), mascara); bitmapC = bitmapA.clone(); createEmptyMovieClip(imatgeC, this.getNextHighestDepth()); imatgeC.attachBitmap(bitmapC, this.getNextHighestDepth()); /* colocar movieclips */ createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=256; createEmptyMovieClip(imatgeC,this.getNextHighestDepth()); imatgeC.attachBitmap(bitmapC,this.getNextHighestDepth()); imatgeC._y=256; createEmptyMovieClip(imatgeD,this.getNextHighestDepth()); imatgeD.attachBitmap(bitmapD,this.getNextHighestDepth()); imatgeD._y=256;

10

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

imatgeD._x=256; dispose(bitmapA); dispose(bitmapB); dispose(bitmapC); dispose(bitmapD);

Arxiu Flash: 4-contorns-globals-diagonals.fla import flash.display.BitmapData; bitmapA = BitmapData.loadBitmap(enum7); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); import flash.filters.ConvolutionFilter; import flash.geom.Rectangle; import flash.geom.Point; bitmapC = bipmapA.clone(); /* contorns globals */ var dimX:Number = 3; var dimY:Number = 3; var matriu:Array = [-1, -1, -1, -1, 8, -1, -1, -1, -1]; var divisor:Number = 1; var biaix:Number = 128; var mascara: ConvolutionFilter = new ConvolutionFilter(dimX, dimY, matriu, divisor, biaix); var bitmapB:BitmapData = new BitmapData(256, 256, false, 0x999999);

11

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

bitmapB.applyFilter(bitmapA, bitmapA.rectangle, new Point(0, 0), mascara); /* contorns diagonals */ var dimX:Number = 3; var dimY:Number = 3; var matriu:Array = [-1, -1, 2, -1, 2, -1, 2, -1, -1]; var divisor:Number = 1; var biaix:Number = 128; var mascara: ConvolutionFilter = new ConvolutionFilter(dimX, dimY, matriu, divisor, biaix); var bitmapD:BitmapData = new BitmapData(256, 256, false, 0x999999); bitmapD.applyFilter(bitmapA, bitmapA.rectangle, new Point(0, 0), mascara); bitmapC = bitmapA.clone(); createEmptyMovieClip(imatgeC, this.getNextHighestDepth()); imatgeC.attachBitmap(bitmapC, this.getNextHighestDepth()); /* colocar movieclips */ createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=256; createEmptyMovieClip(imatgeC,this.getNextHighestDepth()); imatgeC.attachBitmap(bitmapC,this.getNextHighestDepth()); imatgeC._y=256; createEmptyMovieClip(imatgeD,this.getNextHighestDepth()); imatgeD.attachBitmap(bitmapD,this.getNextHighestDepth()); imatgeD._y=256; imatgeD._x=256; dispose(bitmapA); dispose(bitmapB); dispose(bitmapC); dispose(bitmapD);

12

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

5. Realitza el programa en ActionScript amb les combinacions de transformacions espacials lineals i no lineals necessries per resoldre lexercici 3 de la prctica 2: b) eliminar el mxim possible els cables del cartell: h11690_a.jpg d) allar la forma del microorganisme el mxim possible: microorg.jpg b) eliminar el mxim possible els cables del cartell: h11690_a.jpg

Arxiu Flash: 5-B-eliminar-cables.fla

import flash.display.BitmapData; var EE:Array = new Array(0, 0, 0, 1, 1, 1, 0, 0, 0); dimEEx = 3; dimEEy = 3; bitmapA = BitmapData.loadBitmap(h11690_a); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var bitmap_temp:BitmapData = erosio(dimEEx, dimEEy, EE, bitmapA); var bitmapB:BitmapData = dilatacio(dimEEx, dimEEy, EE, bitmap_temp); createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=256; dispose(bitmapA); dispose(bitmapB); function dilatacio(dimEEx:Number, dimEEy:Number, EE:Array, bitmap_in:BitmapData) { var bitmap_out:BitmapData = new BitmapData(bitmap_in.width, bitmap_in.height, false, 0x999999);

13

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

var regio:Array = new Array(); N = dimEEx * dimEEy; L = (dimEEx-1)/2; K = (dimEEy-1)/2; for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ r = 0; for (l = -L; l<L+1; l++){ for (k = -K; k<K+1; k++){ regio[r] = bitmapA.getPixel(i+k,j+l) & 0x0000FF; r = r+1; } } max = 0; for(r=0; r<N; r++){ if ((regio[r]>max) && (EE[r]=1)) { max = regio[r]; index = r; } } color = regio[index] * 256*256 + regio[index] * 256 + regio[index]; bitmap_out.setPixel(i,j,color); } } return(bitmap_out) }w function erosio(dimEEx:Number, dimEEy:Number, EE:Array, bitmap_in:BitmapData) { var bitmap_out:BitmapData = new BitmapData(bitmap_in.width, bitmap_in.height, false, 0x999999); var regio:Array = new Array(); N = dimEEx * dimEEy; L = (dimEEx-1)/2; K = (dimEEy-1)/2; for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ r = 0; for (l = -L; l<L+1; l++){ for (k = -K; k<K+1; k++){

14

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

regio[r] = bitmapA.getPixel(i+k,j+l) & 0x0000FF; r = r+1; } } min=255; for(r=0; r<N; r++){ if ((regio[r]<min) && (EE[r]=1)) { min = regio[r]; index = r; } } color = regio[index] * 256*256 + regio[index] * 256 + regio[index]; bitmap_out.setPixel(i,j,color); } } return(bitmap_out) }

d) allar la forma del microorganisme el mxim possible: microorg.jpg

Arxiu Flash: 5-D-aillar.fla

15

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

import flash.display.BitmapData; bitmapA = BitmapData.loadBitmap(celula); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var bitmapB:BitmapData = new BitmapData(211, 214, false, 0x999999); llindar = 203; bin_min = 90; /* el nivell ms fosc de la imatge */ bin_max = 245; /* el nivell ms clar */ for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ gris = bitmapA.getPixel(i,j) & 0x0000FF; if (gris > llindar){ gris = bin_max;} else{ gris = bin_min;} color = gris * 256*256 + gris * 256 + gris; bitmapB.setPixel(i,j,color); } } createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=211; dispose(bitmapA); dispose(bitmapB);

6. Programeu les transformacions geomtriques en ActionScript segents, de manera qu el resultat aparegui en finestres diferents. Utilitzar una imatge lliure sobre la qual aplicar-les: a. Zoom de factor 4. b. Translaci c. Rotaci d. Delmaci de factor 3. e. La composici de b, c, i d.

16

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

a. Zoom de factor 4.

Arxiu Flash: 6-A-zoom.fla

import flash.display.BitmapData; import flash.geom.Matrix; import flash.geom.Transform; bitmapA = BitmapData.loadBitmap(cam1); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var transformacioA:Transform = new Transform(imatgeA); var matriuT:Matrix = new Matrix(); matriuT.scale(4, 4); transformacioA.matrix = matriuT; dispose(bitmapA);

17

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

b. Translaci

Arxiu Flash: 6-B-traslacio.fla

import flash.display.BitmapData; import flash.geom.Matrix; import flash.geom.Transform; bitmapA = BitmapData.loadBitmap(cam1); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var transformacioA:Transform = new Transform(imatgeA); var matriuT:Matrix = new Matrix(); matriuT.translate(150, 150); transformacioA.matrix = matriuT; dispose(bitmapA);

18

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

c. Rotaci

Arxiu Flash: 6-C-rotacio.fla

import flash.display.BitmapData; import flash.geom.Matrix; import flash.geom.Transform; bitmapA = BitmapData.loadBitmap(cam1); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); imatgeA._x = 53; imatgeA._y = 53; var transformacioA:Transform = new Transform(imatgeA); var matriuT:Matrix = new Matrix(); angle = 45; matriuT.rotate(Math.PI*angle/180); transformacioA.matrix = matriuT; imatgeA._x = 200; imatgeA._y = 130; dispose(bitmapA);

19

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

d. Delmaci de factor 3.

Arxiu Flash: 6-D-delmacio.fla

import flash.display.BitmapData; import flash.geom.Matrix; import flash.geom.Transform; bitmapA = BitmapData.loadBitmap(cam1); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var transformacioA:Transform = new Transform(imatgeA); var matriuT:Matrix = new Matrix(); matriuT.scale(0.33, 0.33); transformacioA.matrix = matriuT; dispose(bitmapA);

20

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

e. La composici de b, c, i d.

Arxiu Flash: 6-E-composicio.fla

import flash.display.BitmapData; import flash.geom.Matrix; import flash.geom.Transform; bitmapA = BitmapData.loadBitmap(cam1); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var transformacioA:Transform = new Transform(imatgeA); var matriuT:Matrix = new Matrix(); matriuT.scale(0.33, 0.33); angle = 45; matriuT.rotate(Math.PI*angle/180); matriuT.translate(150, 150); transformacioA.matrix = matriuT; dispose(bitmapA);

21

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

7. A lexercici 8-A, de la segona prctica es demanava dobtenir els contorns de les lletres de la matrcula per a la imatge matrcula.jpg. Programeu les transformacions usades per obtenir-los de manera que les imatges resultants siguin en diferents finestres: a) Fons negre i contorns en blanc, usant transformacions espacials lineals. b) Fons negre i contorns en blanc, usant transformacions espacials NO lineals. c) Fons blanc i contorns en negre, usant transformacions espacials no lineales i puntuals. d) Finestra compartida pels tres resultats ms la imatge original, per mostrar la comparativa dels resultats obtinguts a lexercici.

a) Fons negre i contorns en blanc, usant transformacions espacials lineals.

Arxiu Flash: 7-A-transformacio-lineal.fla iimport flash.display.BitmapData; import flash.filters.ConvolutionFilter; import flash.geom.Rectangle; import flash.geom.Point; var dimX:Number = 3; var dimY:Number = 3; var matriu:Array = [-1, -1, -1, -1, 8, -1, -1, -1, -1]; var divisor:Number = 1; var biaix:Number = 0; /* de 0 a 255 nivells 0 s negre*/ var mascara: ConvolutionFilter = new ConvolutionFilter(dimX, dimY, matriu, divisor, biaix); var bitmapB:BitmapData = new BitmapData(256, 256, false, 0x999999); bitmapA = BitmapData.loadBitmap(matricula); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); bitmapB.applyFilter(bitmapA, bitmapA.rectangle, new Point(0, 0), mascara);

22

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=256; dispose(bitmapA); dispose(bitmapB);

b) Fons negre i contorns en blanc, usant transformacions espacials NO lineals.

Arxiu Flash: 7-B-transformacio-no-lineal.fla import flash.display.BitmapData; var EE:Array = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1); dimEEx = 3; dimEEy = 3; bitmapA = BitmapData.loadBitmap(matricula); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var bitmapB:BitmapData = new BitmapData(256, 256, false, 0x999999); var bitmap_temp:BitmapData = erosio(dimEEx, dimEEy, EE, bitmapA); /* restem la imatge original per lerosinada*/ for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ temp1 = bitmapA.getPixel(i,j) & 0x0000FF; temp2 = bitmap_temp.getPixel(i,j) & 0x0000FF; temp = temp1 - temp2; color = temp * 256*256 + temp * 256 + temp;

23

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

bitmapB.setPixel(i,j,color); } } createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=256; dispose(bitmapA); dispose(bitmapB); dispose(bitmap_temp); function erosio(dimEEx:Number, dimEEy:Number, EE:Array, bitmap_in:BitmapData) { var bitmap_out:BitmapData = new BitmapData(bitmap_in.width, bitmap_in.height, false, 0x999999); var regio:Array = new Array(); N = dimEEx * dimEEy; L = (dimEEx-1)/2; K = (dimEEy-1)/2; for (i = 0; i<bitmap_in.width; i++){ for (j = 0; j<bitmap_in.height; j++){ r = 0; for (l = -L; l<L+1; l++){ for (k = -K; k<K+1; k++){ regio[r] = bitmap_in.getPixel(i+k,j+l) & 0x0000FF; r = r+1; } } min=255; for(r=0; r<N; r++){ if ((regio[r]<min) && (EE[r]=1)) { min = regio[r]; index = r; } } color = regio[index] * 256*256 + regio[index] * 256 + regio[index]; bitmap_out.setPixel(i,j,color); } } return(bitmap_out) }

24

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

c) Fons blanc i contorns en negre, usant transformacions espacials no lineales i puntuals.

Arxiu Flash: 7-C-no-lineal-puntual.fla

import flash.display.BitmapData; var EE:Array = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1); dimEEx = 3; dimEEy = 3; bitmapA = BitmapData.loadBitmap(matricula); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var bitmapB:BitmapData = erosio(dimEEx, dimEEy, EE, bitmapA); /* aqui apliquem una binaritzaci */ llindar = 113; for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ gris = bitmapA.getPixel(i,j) & 0x0000FF; if (gris > llindar){ gris = 255;} else{ gris = 0; } color = gris * 256*256 + gris * 256 + gris; bitmapB.setPixel(i,j,color); } } createEmptyMovieClip(imatgeB,this.getNextHighestDepth());

25

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=256; dispose(bitmapA); dispose(bitmapB); function erosio(dimEEx:Number, dimEEy:Number, EE:Array, bitmap_in:BitmapData) { var bitmap_out:BitmapData = new BitmapData(bitmap_in.width, bitmap_in.height, false, 0x999999); var regio:Array = new Array(); N = dimEEx * dimEEy; L = (dimEEx-1)/2; K = (dimEEy-1)/2; for (i = 0; i<bitmap_in.width; i++){ for (j = 0; j<bitmap_in.height; j++){ r = 0; for (l = -L; l<L+1; l++){ for (k = -K; k<K+1; k++){ regio[r] = bitmap_in.getPixel(i+k,j+l) & 0x0000FF; r = r+1; } } min=255; for(r=0; r<N; r++){ if ((regio[r]<min) && (EE[r]=1)) { min = regio[r]; index = r; } } color = regio[index] * 256*256 + regio[index] * 256 + regio[index]; bitmap_out.setPixel(i,j,color); } } return(bitmap_out) }

26

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

d) Finestra compartida pels tres resultats ms la imatge original, per mostrar la comparativa dels resultats obtinguts a lexercici.

Arxiu Flash: 7-D-no-combinacio.fla

27

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

import flash.display.BitmapData; import flash.filters.ConvolutionFilter; import flash.geom.Rectangle; import flash.geom.Point; bitmapA = BitmapData.loadBitmap(matricula); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); /* transformaci lineal mascara laplaciana detectora contorns 3 */ var dimX:Number = 3; var dimY:Number = 3; var matriu:Array = [-1, -1, -1, -1, 8, -1, -1, -1, -1]; var divisor:Number = 1; var biaix:Number = 0; /* de 0 a 255 nivells 0 s negre*/ var mascara: ConvolutionFilter = new ConvolutionFilter(dimX, dimY, matriu, divisor, biaix); var bitmapB:BitmapData = new BitmapData(260, 153, false, 0x999999); bitmapA = BitmapData.loadBitmap(matricula); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); bitmapB.applyFilter(bitmapA, bitmapA.rectangle, new Point(0, 0), mascara); /* transformacio no lineal tancament */ var EE:Array = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1); dimEEx = 3; dimEEy = 3; bitmapA = BitmapData.loadBitmap(matricula); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var bitmapC:BitmapData = new BitmapData(260, 153, false, 0x999999); var bitmap_temp:BitmapData = erosio(dimEEx, dimEEy, EE, bitmapA); /* restem la imatge original per lerosinada*/ for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ temp1 = bitmapA.getPixel(i,j) & 0x0000FF; temp2 = bitmap_temp.getPixel(i,j) & 0x0000FF; temp = temp1 - temp2; color = temp * 256*256 + temp * 256 + temp; bitmapC.setPixel(i,j,color); }

28

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

} function erosio(dimEEx:Number, dimEEy:Number, EE:Array, bitmap_in:BitmapData) { var bitmap_out:BitmapData = new BitmapData(bitmap_in.width, bitmap_in.height, false, 0x999999); var regio:Array = new Array(); N = dimEEx * dimEEy; L = (dimEEx-1)/2; K = (dimEEy-1)/2; for (i = 0; i<bitmap_in.width; i++){ for (j = 0; j<bitmap_in.height; j++){ r = 0; for (l = -L; l<L+1; l++){ for (k = -K; k<K+1; k++){ regio[r] = bitmap_in.getPixel(i+k,j+l) & 0x0000FF; r = r+1; } } min=255; for(r=0; r<N; r++){ if ((regio[r]<min) && (EE[r]=1)) { min = regio[r]; index = r; } } color = regio[index] * 256*256 + regio[index] * 256 + regio[index]; bitmap_out.setPixel(i,j,color); } } return(bitmap_out) } /* transformaci lineal no espacial i puntual (binaritzaci) */ var EE:Array = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1); dimEEx = 3; dimEEy = 3; createEmptyMovieClip(imatgeD, this.getNextHighestDepth()); imatgeD.attachBitmap(bitmapD, this.getNextHighestDepth()); var bitmapD:BitmapData = erosio(dimEEx, dimEEy, EE, bitmapA); /* aqui apliquem una binaritzaci */

29

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

llindar = 113; for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ gris = bitmapA.getPixel(i,j) & 0x0000FF; if (gris > llindar){ gris = 255;} else{ gris = 0; } color = gris * 256*256 + gris * 256 + gris; bitmapD.setPixel(i,j,color); } } /* final transformaci D */ createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=260; createEmptyMovieClip(imatgeC,this.getNextHighestDepth()); imatgeC.attachBitmap(bitmapC,this.getNextHighestDepth()); imatgeC._y=153; createEmptyMovieClip(imatgeD,this.getNextHighestDepth()); imatgeD.attachBitmap(bitmapD,this.getNextHighestDepth()); imatgeD._y=153; imatgeD._x=260; dispose(bitmapA); dispose(bitmapB); dispose(bitmapC); dispose(bitmapD); dispose(bitmap_temp);

30

UOC. Estudis dInformtica, Multimdia i Telecomunicaci. Grau de Multimdia


Tractament i publicaci dimatge i vdeo. 1er semestre 2011-2012. Prctica 3 Jaume Reig Carrascosa

8. (Opcional, per pujar nota) Escriu el codi que seria necessari usar per programar en ActionScript les segents corbes de modificaci de contrast:

Corba 1
Arxiu Flash: 8-A.fla import flash.display.BitmapData; bitmapA = BitmapData.loadBitmap(venice); createEmptyMovieClip(imatgeA, this.getNextHighestDepth()); imatgeA.attachBitmap(bitmapA, this.getNextHighestDepth()); var bitmapB:BitmapData = new BitmapData(256, 256, false, 0x999999); llindar1 = 60; llindar2 = 200; gris1 = 75; gris2 = 255; for (i = 0; i<bitmapA.width; i++){ for (j = 0; j<bitmapA.height; j++){ gris = bitmapA.getPixel(i,j) & 0x0000FF; if ((gris < llindar1) || (gris > llindar2)){ gris = gris2; } else{ gris = gris1;} color = gris * 256 * 256 + gris * 256 + gris; bitmapB.setPixel(i,j,color);} } createEmptyMovieClip(imatgeB,this.getNextHighestDepth()); imatgeB.attachBitmap(bitmapB,this.getNextHighestDepth()); imatgeB._x=256; dispose(bitmapA); dispose(bitmapB);

31

Potrebbero piacerti anche