Escolar Documentos
Profissional Documentos
Cultura Documentos
1) Umadasoperaesmaiscomunssobreimagensprocesslasatravsdosassimchamados filtrosdeconvoluo.Umfiltrodeconvoluoconsisteemsubstituirovalordecadapixelpor umamdiaponderadaentreovalordopixeleodeseusvizinhosimediatos.Umamaneira habitualdeseexpressarfiltrosdeconvoluoatravsdeumamatrizquadradadetamanho mpar,tipicamente3x3ou5x5,querepresentaospesosaseremusadosnamdiaponderada. Nestamatriz,oelementocentralcontmopesoquemultiplicaoprpriopixelenquantoqueos demaiscontmpesosquemultiplicamseusvizinhos.Porexemplo,setomarmosumamatrizda 0 1 0 forma 1 6 1 ,umpixel p x , y situadonaposio(x,y)daimagemseria 0 1 0 substitudopor 6 p x , y p x , y1p x ,y 1 p x1, y p x1, y .Escrevaumafuno convolucao(img,matriz)quetomaumaimagememtonsdecinza,umamatrizquadradade pesoseretornaumaimagemprocessadapelofiltrodeconvoluo.Vocpodeassumirqueo objetoimgimplementaosseguintesmtodos/atributos: copy()retornaumacpiadaimagem sizeumatupladaforma(largura,altura)correspondentesdimensesdaimagem getpixel(pos)retornaovalordopixeldaimagemnaposiopos,ondeposumatupla daforma(x,y). putpixel(pos,valor)atribuivaloraopixelnaposiopos,ondeposumatuplada forma(x,y).
Na verdade, esta interface implementada pela biblioteca PIL. Se voc a tem instalada, pode experimentar seu cdigo com ela. Como exemplo, na figura abaixo, a imagem direita foi obtida processando a imagem da esquerda (uma foto de Ansel Adams obtida em http://www.sonoma.edu/pubs/release/2002/ansel.jpeg) usando a matriz dada acima, que efetua um realce das bordas da imagem.
pontosemptaisquesuadsimacoordenadamaiorouigualqueamediana.Assim,por exemplo,sejapiguala[[8,1,2],[3,2,1],[9,0,1],[0,4,3]];ento,cortemediana(p,1) retorna[[[8,1,2],[9,0,1]],[[3,2,1],[0,4,3]]],enquantoquecortemediana (p,0) retorna[[[3,2,1],[0,4,3]],[[8,1,2],[9,0,1]]]. 3) OmduloturtleprovumamaneiraprticadeproduzirdesenhosbidimensionaisemPython. Apsimportaromdulo,vocpodedesenharretasecurvasmovimentandoumatartaruga (turtle,emingls)virtualcomcomandossimples.Aidiageralqueatartarugatemuma penaacopladaquegeratraossobreatelamedidaqueestasemove.Omduloimplementa vriasfunesentreasquaisdestacamos:
forward(dist)
moveatartarugaparaafrentedistunidades.
backward(dist)moveatartarugaparatrsdistunidades. left(ang)giraatartarugaparaaesquerdasegundoonguloangdado(emgraus,
normalmente).
right(ang)giraatartarugaparaadireitasegundoonguloangdado. up()levantaapenadopapel(assimomovimentodatartaruganodeixamarcas) down()abaixaapenanopapel. reset()limpaatelaecentralizaatartaruganopapel. speed(velocidade)alteraavelocidadedemovimentaodatartaruga,ondevelocidade podeser'fastest','fast','normal','slow'e'slowest'(recomendadousar 'fastest'). tracer(flag)fazcomquetartarugasejamostrada(flag = True)ouno(flag = False). done()encerraodesenhoeesperaqueajanelasejafechadamanualmentepelousurio.
Comoexemplo,otrechoabaixogeraodesenhodafiguraaolado:
Considereagoraocdigoabaixo:
def poly(s0,ds=1,incs=0,dang=90,n=4): for i in range(n): forward(s0) right(dang) s0=s0*ds+incs
Chamando a rotina poly passando diferentes parmetros possvel obter os seguintes desenhos (voc seria capaz de inferir os parmetros usados para cada um?)
(a)
(b)
(c)
(d)
(nvel0)
(nvel1)
(nvel2)
(nvel3)
def koch (tam, n): """Gera uma curva de Koch de nvel n e com lado 'tam'.""" if n==0: forward(tam) else: koch(tam/3,n-1) left(60) koch(tam/3,n-1) right(120) koch(tam/3,n-1) left(60) koch(tam/3,n-1)
(nvel0)
(nvel1)
(nvel2)
(nvel3)