FindRobot3

Autor: rubens
Data: 11/03/2008

Leitura da Imagem

espelho/Img-20080311-01.jpg

Resultado final

Localização do Alvo

  • Alvo Externo

    O primeiro filtro que aplicamos é o top-hat de uma abertura pelo atributo bounding-box. É como se passássemos os componentes da imagem por uma peneira com malha determinada pelo bounding-box externo bbox.

    Em seguida, aplicamos um filtro de volume para eliminar componentes de pouca importância. Para binarizar a imagem, determinamos seus máximos regionais.

    A imagem rotulada dos máximos regionais é apresentada na Fig. 1.

  • Alvo Interno

    Consideramos como alvo interno, o buraco existente no interior do alvo localizado no passo anterior. Determinamos o alvo através do resíduo do filtro de fechamento de buracos, mmclohole. Veja a Fig. 2.

 1 bbox = [int(a) for a in opt.bbox.strip().split()]
 2 
 3 a = uint8(0.299 * image[0,:,:] + 0.587 * image[1,:,:] + 0.114 * image[2,:,:])
 4 mxt1 = maxtree(a)
 5 mxt1 = maxaopenthmt(mxt1, 'bbox', bbox[0], bbox[1])
 6 mxt1 = maxaopenmt(mxt1, 'volume', opt.volume)
 7 b = maxregmax(mxt1, 'labels')
 8 c = b > 0
 9 mmlblshow(b, title='Fig. 1: Alvo Externo')
10 
11 d = mmclohole(c) - c
12 mxt2 = maxtree(d)
13 mxt2 = maxaopenmt(mxt2, 'area', 10)
14 e = maxregmax(mxt2, 'labels')
15 f = e > 0
16 mmlblshow(e, title='Fig. 2: Alvo Interno')

Fig. 1: Alvo Externo

Fig. 2: Alvo Interno

  • Localização final

    Finalmente, o alvo é determinado como sendo a região onde haja a coincidência dos centróides dos alvos externo e interno.

1 g = mmdil(mmblob(b, 'CENTROID'), mmsedisk(5))
2 h = mmdil(mmblob(e, 'CENTROID'), mmsedisk(5))
3 k = g & h
4 mmshow(g, title='Centroides da Fig. 1')
5 mmshow(h, title='Centroides da Fig. 2')
6 
7 mk = mmdil(k, mmsedisk(17)) - mmdil(k, mmsedisk(12))
8 
9 mmshow(a, mk, title='Resultado final')

Centroides da Fig. 1

Centroides da Fig. 2

Resultado final