Você está na página 1de 4

AlgoritmoseProgramaoExerccios

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.

2) Considereumalistadepontospem3D,ondecadapontorepresentadoporumatupladaforma (x,y,z).Definesecomomedianadacoordenadad(0,1ou2,correspondendoax,youz) comoamedianaentretodososvaloresdadsimacoordenadadetodosospontos.Escrevauma funocortemediana(p,d)queretornaumalistadaforma[a,b],ondeaalistadetodosos pontosemptaisquesuad'simacoordenadamenorqueamedianaebalistadetodosos

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:

from turtle import * setup(width=300,height=300) for i in range(3): forward(100) left(120) done()

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)

4) Curvasfractaissocurvasqueapresentamcaractersticasdeautosemelhana,isto,partesda curvaseassemelhamprpriacurvacomoumtodo.Odesenhodessascurvaspodeser realizadonaturalmenteatravsderotinasrecursivas.Emoutraspalavras,arotinachamaasi prpriaparadesenharapartedacurva(casogeral)ouentorealizaumdesenhosimplesnocaso base.Arecursocontroladaporparmetrosquecontrolamaescala(otamanho)dascpiaseo nvelderecurso.Comoexemplo,considereumacurvadeKochcujos4primeirosnveisde aproximaosomostradosabaixoequepodeserdesenhadausandoocdigoPythonaseguir:

(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)

Escrevaumafunosierpinski (tam, n)paradesenharotringulodeSierpinski,cujos4 primeirosnveisdeaproximaosomostradosnafiguraabaixo.

(nvel0)

(nvel1)

(nvel2)

(nvel3)

Você também pode gostar