Anda di halaman 1dari 29

DEPARTAMENTO DE ENGENHARIA ELTRICA

FACULDADE DE ENGENHARIA
UNESP - BAURU
















LABORATRIO:
INTRODUO AO PROCESSAMENTO DE IMAGENS COM MATLAB




Professor: Jos Eduardo C. Castanho










Novembro 2008




OBJETIVOS:

Fornecer ao aluno a experincia prtica de viso robtica, na qual sejam aplicados
conceitos de Processamento de Imagem e Reconhecimento de Padres para a localizao de
um objeto e atuao sobre o mesmo. Com o experimento o aluno poder compreender o
fluxo bsico e os princpios de um sistema de viso robtica e conhecer o ambiente Matlab,
utilizando o Toolbox de Processamento de Imagem.
Ao final do experimento o aluno estar capacitado a aplicar os comandos do Toolbox de
Processamento de Imagens do Matlab, permitindo manipular imagens e desenvolver
aplicaes simples de viso robtica.


1 - INTRODUO.

Implementar um sistema de viso de aplicao geral uma tarefa que envolve
conhecimentos de diversas reas, e inmeras variveis, tornando o processo invivel em
muitas situaes. Felizmente, a soluo pode ser obtida se a aplicao em questo bem
determinada, com restries conhecidas, facilitando a implementao dedicada para uma
determinada aplicao.
Neste laboratrio iremos explorar funes bsicas e fundamentais de PI para
trabalhar com uma aplicao simples, procurando delimitar condies de ambiente que
proporcionem uma soluo consistente e que permita o exerccio de alguma das etapas mais
comuns em um problema de viso robtica. O desenvolvimento do experimento ser feito
utilizando o software Matlab e o Toolbox de Processamento de Imagens.
Na seo 2, feita uma introduo a alguns conceitos bsicos teis para a
implementao usando o Tollbox de PI do Matlab. Em seguida so apresentados alguns
exerccios que devero ser implementados pelos alunos.


2 - PROCESSAMENTO DE IMAGEM UTILIZANDO O
TOOLBOX DE PI DO MATLAB



Para a implementao de aplicaes de processamento de imagem ou viso
computacional fundamental a utilizao de uma ferramenta onde as imagens possam ser
processadas e manipuladas de forma adequada. Inmeros pacotes de software podem ser
encontrados, comerciais ou na forma de software livre, desde pacotes simples com poucas
funes, at pacotes extremamente completos que permitem o desenvolvimento de
aplicaes bastante complexas.
Nesta seo ser apresentado um resumo dos comandos disponveis no Toolbox de
Processamento de Imagem para o programa Matlab. Algumas das operaes mais teis para
o desenvolvimento de aplicaes de PI so: obteno de imagens a partir de arquivos ou de
frame-grabbers (placas de digitalizao de imagens), visualizao de imagens em uma
janela.
O Matlab possui comandos para a leitura e armazenamento de arquivos de imagens
em diversos formatos, facilitando o desenvolvimento de aplicaes off-line e teste de
algoritmos em imagens estticas. Tambm possvel trabalhar com seqncias de imagens,
porm, este aspecto no ser abordado neste laboratrio.
A aquisio de imagens de frame-grabber pode ser realizada a partir do Toolbox de
Aquisio de Imagens (Mathworks Inc.
http://www.mathworks.com/access/helpdesk/help/toolbox/imaq/), ou pela utilizao de
drivers especficos desenvolvidos por terceiros. A aquisio de imagens atravs de frame
grabbers, possibilita a utilizao da viso robtica em controle e automao de processos
atravs da digitalizao de sinais de uma cmera de vdeo e seu armazenamento na
memria do sistema.





Figura 2.1 Processo de digitalizao de imagens.

Uma alternativa simples utilizar o driver VFM para captura de imagens em
cmeras cuja operao seja possvel atravs do MS Windows for Windows, como por
exemplo, a maioria das cmeras USB. Este driver possui algumas limitaes e tende a ser
inferior a drivers que usam o padro DirectX, mas til para demonstrar os princpios de
utilizao. Pode ser obtido em http://www.mathworks.com/matlabcentral/fileexchange/ ,
selecionando o link Test and Measurement -> Hardware Support and Drivers.
Voc encontrar este e outros drivers para captura de vdeo na lista apresentada (sugesto:
faa experimentos e teste outros drivers).





Frame grabber
(digitalizao de
sinal de vdeo)
Memria do
computador
Cmera de vdeo
Uso do Toolbox de Processamento de Imagem.


Uma imagem armazenada no Matlab como uma matriz bidimensional. Para
acessar cada um dos pixels necessrio entender as convenes adotadas com referncia ao
sistema de coordenadas:

Sistemas de coordenadas e convenes na representao da imagem:

Determinados pontos em uma imagem podem ser expressos por vrios sistemas de
coordenadas, dependendo do contexto, nesta seco sero citados os dois principais
sistemas de coordenadas, o sistema espacial e o sistema de coordenadas em pixel.
O sistema de coordenadas em pixel , geralmente, o sistema mais adequado para se
expressar a orientao de uma imagem. Neste sistema de coordenadas, a imagem tratada
como uma grade de elementos discreta, disposta em seqncia da parte superior at a parte
inferior e da esquerda para a direita da figura conforme figura 2.2:

Figura 2.2 Sistema de coordenadas em pixels.


O primeiro eixo r (row -> linha) aumenta para baixo, enquanto o segundo eixo c
(column -> coluna) aumenta para direita. As coordenadas em pixel so valores inteiros e
situam-se entre um e o comprimento de r ou c.
H uma correspondncia de um para um entre a coordenada em pixels e a
coordenada do Matlab usada em matrizes. Esta correspondncia determina se a forma como
uma matriz, contendo dados de uma imagem, visualizada esta adequada. Por exemplo, um
dado contido em um pixel na posio cinco do eixo r e dois do eixo c, armazenado no
elemento (5, 2) da matriz.
No sistema de coordenadas espaciais, as coordenadas de uma imagem so
posicionadas em um plano e so descritas em termos de x e y (e no em termos de r e c
como no sistema de coordenadas em pixel). A figura 2.3 ilustra o sistema de coordenadas
espaciais usado para as imagens.

Figura 2.3 Sistema espaciais de coordenadas.

Este sistema de coordenadas corresponde, aproximadamente, ao sistema de
coordenadas em pixel. Por exemplo, a coordenada espacial do ponto central de qualquer
pixel idntica coordenada em pixel. H algumas diferenas entre esses sistemas de
representao. Enquanto no sistema de coordenadas em pixel o canto superior esquerdo o
ponto (1, 1), no sistema espacial de coordenadas esta posio (0.5, 0.5). Esta diferena
ocorre porque o sistema de coordenadas em pixel discreto, enquanto que no sistema
espacial de coordenadas contnuo. No sistema de coordenadas em pixel, o canto superior
esquerdo sempre o ponto (1, 1), porm pode-se especificar uma origem diferente da
origem padro. Outra diferena que a ordem das componentes horizontal e vertical
invertida nestes dois sistemas. As coordenadas em pixel so expressas por (r, c) enquanto
que as coordenadas espaciais so expressas por (x, y). As coordenadas espaciais de uma
imagem se correspondem com o sistema de coordenadas em pixel. Por exemplo, o ponto
central do pixel em r = 5 e c = 3 possui coordenadas x = 3 e y = 5.


NOTA: possvel especificar a localizao das coordenadas em pixels, porm, em algumas aplicaes, pode ser
requerido um sistema de coordenadas espaciais diferente daquele padro. Por exemplo, pode-se especificar que o canto
superior esquerdo do canto da imagem o ponto (19.0, 7.5) ao invs de (0.5, 0.5). Para estabelecer um sistema de
coordenadas como este, podem-se especificar as propriedades dos variveis Xdata e Ydata quando a imagem for
visualizada. Na forma padro Xdata igual a [1 size (A,2)] e Ydata [1 size(A,1)]. Por exemplo, se A uma imagem de
100 por 200, ou seja, r = 100 e c = 200 ento, Xdata igual a [1 200] e Ydata [1 100].

Tipos das imagens no Toolbox
O Toolbox de PI define quarto tipos bsicos de imagens, resumidas na tabela a seguir. Estes
tipos de imagens determinam o modo como o Matlab interpreta os dados da matriz com
valores de intensidade.
Tipo de
Imagem
Interpretao
Binary
(Binrias)
Array Lgico contendo somente 0's e 1's, interpretados como preto e
branco, respectivamente. Tambm conhecida como imagem bilevel.
Indexed
(indexadas)
Array das classes logical, uint8, uint16, single, ou double cujos valores
de pixel esto diretamente indicados em uma mapa de cores (tabela). O mapa
de cores uma matriz (tabela) m-por-3 da classe double. Tambm
conhecida como imagem pseudocolor.
Nota: Para arrays single ou double, valores inteiros variam na faixa de [1,
p]. Para arrays logical, uint8, ou uint16, valores variam na faixa de [0,
p-1]
Grayscale
(nvel de
cinza)
Array da classe uint8, uint16, int16, single, ou double cujos valores de
pixel especificam valores de intensidade (luminosa). Tambm conhecidas
como imagens de intensidade
Nota: Para arrays single ou double, valores variam de [0, 1]. Para uint8,
valores variam de [0,255]. Para uint16, valores variam de [0, 65535]. Para
int16, valores variam na faixa de [-32768, 32767].
Truecolor

Array m-por-n-por-3 da classe uint8, uint16, single, ou double cujos
valores de pixel especificam valores de intensidade. Tambm conhecidos
como imagens RGB.
Nota: Para arrays single ou double, valores variam de [0, 1]. Para uint8,
valores variam na faixa de [0, 255]. Para uint16, valores variam de [0,
65535].


muito importante saber o tipo de imagem sendo usado, pois determinados algoritmos
somente atuam em tipos especficos. Assim, em muitos casos, torna-se necessrio converter
uma determina imagem de um tipo para outro. Por exemplo, muito comum converter uma
imagem colorida (RGB) para imagens de intensidade ou nvel de cinza (grayscale). Certas
converses implicam em perda de informaes e no so reversveis.

Leitura e visualizao de imagens a partir de arquivos:

A leitura de imagens de arquivos pode ser realizada atravs da instruo imread. Por
exemplo, para a abertura da imagem de nome pout.tif, que um exemplo disponvel no
toolbox de processamento de imagem, digita-se a instruo da seguinte forma:
I=imread(pout.tif). Esta figura foi armazenada na varivel I e ela pode ser visualizada
atravs da instruo imshow(I).

Figura 2.4 Imagem pout.tif do exemplo do toolbox de processamento de imagem.


A estrutura da imagem armazenada na memria pode ser conferida atravs do
comando whos, cuja resposta a esta instruo apresentada da mesma forma como no
exemplo abaixo:

>> whos

Name Size Bytes Class
I 291x240 69840 uint8 array
Grand total is 69840 elements using 69840 bytes
Pode-se observar, ento que uma imagem armazenada exatamente como qualquer
outra matriz no Matlab. A nica particularidade refere-se ao fato de que cada elemento do
tipo uint8. Isto se aplica ao este caso de imagem com at 256 nveis de cinza.

Armazenamento de arquivos de imagens:

A instruo inwrite utilizada para o armazenamento de uma varivel em disco, e
assim supondo-se que fosse desejado salvar a imagem de I em um arquivo nomeado pout2
e do tipo png, ento se pode digitar: imwrite (I, 'pout2.png');
Para checar o contedo do novo arquivo criado, utiliza-se o comando imfinfo,
certifique-se de que o ponto e vrgula no foi digitado no fim da instruo para que o
Matlab possa mostrar o resultado, como no exemplo: imfinfo('pout2.png'). A resposta do
Matlab apresentada abaixo:
>> imfinfo('pout2.png')

ans =

Filename:'pout2.png'
FileModDate:'03-Jun-1999 15:50:25'
FileSize:36938
Format:'png'
FormatVersion:[]
Width:240
Height:291
BitDepth:8
ColorType:'grayscale'
. . .



Exerccio 1: Usando os arquivos disponveis no repositrio
C:\MATLAB6p5\toolbox\images\imdemos, realize as operaes abaixo.

a) Carregue a imagem saturn.tif e flowers.tif no Matlab usando o comando
imread. (obs. Dependendo da verso instalada do Matlab, esses
arquivos podem ter formatos diferentes de tif; por exemplo, png)
b) Mostre as imagens em uma janela utilizando o comando imshow.
c) Verifique o tipo de dados da imagem
d) Converta as imagens coloridas para escala de cinza usando o comando
rgb2gray.
e) Converta as imagens em escala de cinza utilizando o comando img2bw.
f) Verifique o tipo de cada imagem convertida.
g) Salve cada uma das imagens no formato gif usando o comando
imwrite;
h) Obtenha as informaes do arquivo usando o comando imfinfo;






Correo de contraste:

Uma operao bastante til quando trabalhamos com imagens o ajuste de brilho-
contrastre. Um histograma permite que se analise a distribuio de nveis de intensidade
luminosa em uma imagem. O histograma de uma imagem definido com L nveis de
intensidade possveis em um intervalo [0, G] como a funo discreta:

k k
r r h = ) (
Onde r
k
o k-simo nvel de intensidade no intervalo [0, G] e n
k
o nmero de
pixels na imagem cujo nvel de intensidade r
k
. O valor de G 255 para imagens uint8 ou
unint16 e 1,0 para imagens float e double. O valor de k um inteiro que varia de 1 a L.
Tambm pode ser interessante trabalhar com o histograma normalizado, o qual
obtido dividindo todos os elementos de h(r
k
) por n, onde n o nmero total de pixels da
imagem. Neste caso o histograma pode ser denotado por:

n
n
n
r h
r p
k k
k
= =
) (
) (
A funo acima a aproximao da funo distribuio de probabilidades dos
valores de intensidade de luminosidade da imagem.


Exemplo, observa-se que a figura pout.tif uma imagem de baixo contraste. Para
ver a distribuio de intensidade nesta imagem pode ser criado um histograma chamando a
funo imhist do Toolbox de Processamento de Imagens. O histograma fornece uma
estatstica de distribuio dos valores de intensidade luminosa para os pixels da imagem.
Antes, utilizando o comando figure, cria-se uma nova janela e evita-se que a janela
contendo a imagem da varivel I seja sobreposta. A figura 2.5a obtida aps a seguinte
instruo:

>> figure, imhist(I) % Vizualiza um histograma de I em uma nova figura.


a)
0 50 100 150 200 250
0
500
1000
1500
2000
2500
3000
b)

Figura 2.5 Histograma da imagem original (a), histograma equalizado (b).

Observa-se que a gama de intensidade bastante estreita, isto pode ser melhorado
atravs da equalizao do histograma. O resultado da equalizao do histograma equalizado
mostrado na figura 2.5b. Ao observar o histograma em (b) percebemos uma distribuio
mais uniforme do nmero de pixels por todos os valores de intensidade luminosa. Com
resultado desse processo temos um aumento de contraste na imagem.

Equalizao de histograma

A operao de equalizao de histograma pode ser usada para melhorar o contraste
de uma imagem. Esse efeito obtido atravs da redistribuio das intensidades luminosas
na imagem. Intuitivamente podemos entender a equalizao de histograma como a
operao que torna igualmente provvel a ocorrncia de cada valor de intensidade luminosa
em uma imagem.
Considere que os valores de nveis de intensidade sejam quantidades contnuas e
normalizadas entre [0,1], e denotando a funo densidade probabilidade (FDP) por pr(r)
dos nveis de intensidade de uma determinada imagem, onde o ndice subscrito usado
para diferenciar entre as funes de entrada e sada, podemos obter os nveis de intensidade
transformados (sada) pela funo:


Onde w apenas uma varivel qualquer de integrao. Pode ser demonstrado
(Gonzalez & Woods, 2007) que a funo densidade de probabilidades dos nveis de sada
uniforme, isto :



O resultado final da equalizao dos nveis de intensidade uma imagem com uma
faixa dinmica maior, a qual tende a apresentar um contraste tambm maior. interessante
notar que a funo transformao na realidade a funo distribuio cumulativa.
Ao trabalhar com quantidades discretas, chamamos o processo acima de equalizao
de histograma, embora, em geral o histograma da imagem processada no ser uniforme
devido a natureza discreta das variveis. Seja p
r
(r
j
), j=1,2,...,L usado para denotar o
histograma associado com os nveis de intensidade de uma imagem e lembrando que os
valores em um histograma normalizado so aproximaes da probabilidade de ocorrncia
de cada nvel de intensidade na imagem. Para quantidades discretas sero usados
somatrias e a equalizao transforma-se em:


Para k=1,2,3,...,L onde sk a o valor da intensidade de sada da imagem
correspondente ao valor rk na imagem de entrada.A equalizao do histograma de entrada
implementada no tollbox pela funo histeq, que tem a sintaxe
g = histeq(f, nlev)
onde f a imagem de entrada e nlev o nmero de nveis da intensidade
especificada para a imagem de sada. Se nlev igual ao nvel L da imagem de entrada, a
histeq implementa a funo T(rk) diretamente. Do contrrio, tenta distribuir os nveis de
modo a aproximar os nveis para um histograma plano.
Tomando o exemplo da figura 2.5 atravs da funo histeq, pode-se expandir a
distribuio de intensidades por toda a figura, como segue:

I2= histeq(I);


Exerccio 2:
Usando a imagem carregada anteriormente do planeta saturno, aplique a correo do
histograma para melhorar o contraste. Insira a imagem inicial e corrigida no espao abaixo
deste arquivo:

Imagem inicial sem correo:


Inserir imagem aqui





Imagem final corrigida:



Inserir imagem aqui




Estimativa da intensidade luminosa do plano de fundo:

Para exemplificar este procedimento, ser utilizando outra figura disponvel no
Toolbox de PI nomeada rice.tif e que ser armazenada na varivel I. Ao se observar a
imagem original (figura 2.6 ), nota-se que a intensidade luminosa maior na parte central e
alta da imagem do que na parte de baixo. A seguinte instruo utilizada para estimar a
intensidade luminosa do plano de fundo:


>> clear% limpa o ambiente

% leia e faa o display da imagem rice.png.
>> I = imread('rice.png');
>> imshow(I)
>> background = imopen(I,strel('disk',15));


O exemplo usa a funo imopen para realizar a operao morfolgica opening.
Note que o exemplo chama a funo strel para criar um elemento estruturante com
formato de disco e raio 15. Para remover os gros de arroz da imagem, o elemento
estruturante deve ser grande o suficiente para no caber inteiramente em um nico gro de
arroz. A operao de opening

Figura 2.6 Imagem armazenada na varivel I,

Para ver o background resultante tecle:

>> image, imshow(background);

O resultado pode ser mais bem visualizado se plotarmos a imagem como um grfico
de superfcie mostrando a intensidade luminosa. Uma superfcie contendo uma
aproximao da intensidade luminosa do plano de fundo pode ser visualizada atravs da
instruo surf, esta instruo necessita dados de entrada da classe double, e assim deve-se
converter o plano de fundo usando o comando double:

>> figure, surf(double(background(1:8:end,1:8:end))),zlim([0 255]);
set(gca,'ydir','reverse');

A imagem visualizada com um a cada oito pixels em cada direo de forma que a
imagem no seja muito densa. O exemplo tambm regula a escala de visualizao para uma
melhor gama dos dados uint8 e inverte o eixo y do display para fornecer melhor
visualizao dos dados.

Retirada do plano de fundo da imagem original:

Para se obter um plano de fundo mais uniforme utiliza-se a seguinte instruo:
I2=imsubtract(I,background); o resultado apresentado na figura 2.7. A imagem
se torna um pouco escura, para obter um melhor contraste, utiliza-se a seguinte funo:
I3=imadjust(I2, stretchlim(I2), [0 1]); A figura 2.8 mostra o resultado do
exemplo:

Figura 2.7 Imagem armazenada na varivel I2.


Figura 2.8 Imagem armazenada na varivel I2.


Criao de uma imagem binria:
Uma nova imagem binria pode ser criada utilizando as funes graythresh e
im2bw. Atravs do exemplo abaixo foi gerada a figura 2.9:
>> level = graythresh(I3);
>> bw = im2bw(I3,level);
>> figure, imshow(bw)


Figura 2.9 Imagem armazenada na varivel bw.



Exerccio 3: Excute esses mesmos comandos no Matlab. Depois, experimente fazer o
mesmo procedimento sobre a imagem original, sem a retirada do fundo (background) da
mesma. Compare os resultados e comente!






Determinao do nmero de objetos em uma imagem:

O nmero de objetos (como gros de arroz) em uma figura pode ser determinado
atravs da instruo bwlabel. Esta funo verifica a relao entre todos componentes da
imagem binria e devolve este valor em uma varivel numrica.

>> [labeled,numObjects] = bwlabel(bw,4); % Label components.
ans
numObjects = 101

A preciso dos resultados depende de uma srie de fatores como: o tamanho do
objeto, a qualidade do plano de fundo da imagem, o fator de conectividade (4 ou 8), a unio
de dois (ou mais) objetos que podem ser identificados como um nico.

Conceito de Vizinhana de um Pixel
Em vrias operaes de processamento de imagem, particularmente em algoritmos
locais, torna-se necessrio definir quais pixels so vizinhos de quais. Embora o
problema parea ser simples primeira vista, apresenta algumas sutilezas que podem
mudar o resultado do processamento ou seu tempo de processamento. Assim,
convencionou-se usar as seguintes definies de vizinhana.
Vizinhana de 4: Um pixel p na coordenada (x, y) tem quatro pixels vizinhos na
horizontal e quatro na vertical, cujas coordenadas so dadas por: (x + 1, y), (x - 1, y), (x,
y + 1), (x, y - 1). Esta vizinhana ser denotada como N4(p). Deve-se notar que cada
um desses pixels apresenta distncia unitria de (x,y) e tambm que algum dos
vizinhos de p podero estar fora da imagem se (x,y) estiver na borda da imagem.
Vizinhana diagonal: Um pixel p tem vizinhana denominada diagonal
correspondente aos 4 pixels de coordenadas: (x + 1, y + 1), (x - 1, y - 1), (x + 1, y - 1), (x
-1, y + 1). Esta vizinhana ser denotada por ND(p).
Vizinhana de 8: Um pixel possui vizinhana de 8 se considera todos os pixels na
horizontal, vertical e diagonais.

Figura 2.10 Exemplo de vizinhanas.




Figura 2.11 Exemplo de imagem com rotulao de componentes com utilizao
de diferentes padres de vizinhana.

Vizinhana 4
Vizinhana diagonal
Vizinhana 8


Exerccio 4: Execute novamente a operao anterior alterando o tipo de vizinhana
para 8. Compare os resultados.

Examinando a matriz de labels (rtulos).

Para entender melhor o que a matriz de rtulos interessante observarmos a
matriz em mais detalhes. Podemos fazer isso usando a ferramenta imcrop ou
pixelregion.

Digite o comandos:

>> figure, imshow(labeled);
>> detalhe = imcrop

detalhe =

70 70 70 70 0 0 0 0
70 70 70 70 70 0 0 0
70 70 70 70 70 0 0 0
0 70 70 70 70 0 0 0
0 0 70 70 70 0 72 72
0 0 0 0 0 72 72 72
0 0 0 0 72 72 72 72
0 0 0 72 72 72 72 72

Por default, esta ferramenta automaticamente se associa com a imagem corrente.
Use o mouse para selecionar uma pequena regio da imagem que incorpore dois gros
distintos de arroz. O resultado ser similar ao mostrado abaixo na figura 2.11, porm neste
caso foi utilizada a ferramenta Pixel Region Tool (imview).


Figura 2.12 - Detalhe da matriz de labels mostrando dois gros de arroz com seus
respectivos pixels recebendo diferentes rtulos.


Podemos mostrar a matriz de labels de forma mais facilmente usando o recurso de
uma tabela de pseudocores. Usando este recurso, cada valor que distingue um objeto na
imagem recebe uma cor correspondente, facilitando a identificao dos objetos na imagem
Digite os comandos:

>> pseudo_color = label2rgb(labeled, @spring, 'c', 'shuffle');
>> imshow(pseudo_color);

Voc ir receber como resultado uma imagem similar quela apresentada abaixo.

Figura 2.13 Imagem de labels associada a uma tabela de pseudocores.


Medindo caractersticas dos objetos na image.

Uma das etapas mais teis para a compreenso de imagens e reconhecimento de
padres a obteno de caractersticas dos objetos aps a etapa de segmentao. Inmeras
caractersticas podem ser teis para identificar um objeto. Por exemplo, podemos utilizar a
sua cor predominante (ou intensidade luminosa refletida), suas dimenses (absoluta ou
relativa), o nmero de buracos, sua forma (quadrado, elptica, circular, etc) e muitas outras.
Normalmente, ao tentar identificar um objeto, interessante selecionar aquelas
caractersticas que so distintivas e particulares dele para que seja possvel diferenciar de
outros na prpria cena.
O TPI prov algumas funes que permitem obter importantes caractersticas de
objetos em uma imagem. A funo regionprops permite a obteno de algumas
propriedades associadas principalmente geometria e estatsticas de cada objeto rotulado
em uma imagem (veja o manual do Matlab para maiores detalhes). Por exemplo, execute o
comando:
>> graindata = regionprops(labeled,'basic')
graindata =
101x1 struct array with fields:
Area
Centroid
BoundingBox

Como pode se observar pelo resultado obtido, a funo retorna um vetor de
estruturas contendo os valores de rea, centride e boundingbox (caixa envolvente), para
cada um dos objetos rotulados. Para obtermos as caractersticas especficas de um
determinado objeto podemos usar acessar os campos de cada elemento do array de
estruturas.




Exemplo:
>> graindata(41).Area
ans =
196
>> graindata(51).BoundingBox, graindata(51).Centroid
ans =
107.5000 4.5000 13.0000 20.0000
ans =
114.5000 15.4500


Teste outros elementos na imagem e tente associ-los a sua representao na
imagem.

Usando as propriedades para analisar os objetos na imagem.

Podemos usar as propriedades para analisar e classificar estatisticamente os objetos
existentes em uma cena. Por exemplo, se desejarmos encontrar a rea do maior gro de
arroz na imagem, podemos usar o comando abaixo:

>> max([graindata.Area])

ans =

404

O comando find retorna o label correspondente ao gro identificado como de maior
rea.

>> biggrain = find([graindata.Area]==404)

ans

biggrain = 59
Pode-se achar a mdia das reas de todos os gros na cena.
>> mean([graindata.Area])
ans =
175.0396

Ou podemos classificar os gros apresentando um histograma da distribuio do
tamanho deles.

>> hist([graindata.Area],20)

0 100 200 300 400 500
0
5
10
15
20
25
30
35

Figura 2.14 Histograma das reas dos gros na imagem.


3 Deteco de bordas


O TB-PI disponibiliza uma srie de algoritmos de deteco de bordas. Estes algoritmos
podem ser utilizados para extrair pontos de borda em uma imagem. Os algoritmos
disponveis se baseiam nas variaes de intensidade luminosa para localizar os pontos com
mxima derivada (ou mximo gradiente) e os cruzamentos de zeros nas funes derivada
segunda.
A funo utilizada para deteco de bordas a funo edge, que permite ainda, em
alguns casos, especificar a busca por pontos de linhas horizontais ou verticais, ou ambas, e
retorna uma imagem binria contendo 1s onde foram localizados pontos de borda e 0s do
contrrio.

Exemplo: uso dos operadores de Sobel e Canny para deteco de bordas.

1 Leia a imagem e mostre-a no display


>> I = imread('coins.png');
>> imshow(I)



Figura 3.1 Imagem coins.png

Aplique os detetores de Sobel e Canny na image mostre os resultados


>> BW1 = edge(I,'sobel');
>> BW2 = edge(I,'canny');
>> imshow(BW1)
>> figure, imshow(BW2)


O resultado obtido ser aquele mostrado na figura 3.2, abaixo.


a) b)

Figura 3.3 Resultado da aplicao dos detectores de borda de Sobel (a) e Canny (b) para
a imagem coins.png.

Pode-se observar as diferenas do resultado obtido com a aplicao dos dois detectores na
mesma imagem.
Se voc desejar verificar maiores possibilidades da deteco de bordas com o TB-PI, utilize
o demo edgedemo. Com esse demo possvel aplicar diferentes operadores e diferentes
parmetros de operao.

4. PROJETO

Voc pode agora, projetar e apresentar uma soluo para o seguinte problema:

Descrio do problema: Uma linha de fabricao qualquer trabalha com um rob que
manipula objetos que lhe so apresentados em uma esteira rolante. Vrios objetos so
colocados na esteira, mas o rob s dever manipular alguns desses objetos, retirando-os da
esteira. Para retirar os objetos da esteira, esta deve ser parada. Para resolver quais objetos
sero retirados da esteira, existe um sistema de viso que comanda o movimento da esteira
e avisa o rob que ele deve manipular o objeto, identificando qual objeto e qual a sua
posio quando este est no campo de viso da cmera. (Obviamente, em sistemas mais
sofisticados a esteira no necessitaria estar parada)

Objetivos: Voc dever implementar um script em Matlab, utilizando o Toolbox de
Processamento de Imagens que dever controlar o movimento (parar e movimentar) da
esteira rolante ao encontrar e identificar e localizar um objeto previamente definido para
manipulao do rob.

Procedimento de Implementao:
- Inicialmente, o projeto ser desenvolvido off-line usando imagens de teste e depois ser
feito um teste utilizando cmera de vdeo e uma esteira rolante.
- Para implementar o projeto, voc ter disponvel alguns arquivos de imagens teste
correspondentes s cenas reais do problema no site
http://www.dee.feb.unesp.br/~castanho/labvisao.
- Voc tambm ter disponvel os scripts das funes stopmotor() e startmotor() para
parada e movimentao da esteira rolante. Essas funes apenas ligam e desligam o motor
da esteira rolante usando um controlador simples.
- Para capturar a imagem da cmera de vdeo, ser usado o drive vfm. Para capturar uma
imagem com este driver basta usar o comando vfm(grab). Uma imagem ser salva em
uma matriz no formato RGB.




Resumindo, um possvel pseudo-algoritmo para o problema poderia ser:

Incio
Passo 1: Inicialize a o driver da cmera de vdeo;
Passo 2: movimente a esteira.
Passo 3: Para cada imagem capturada faa:
Incio:
Procure por um objeto na cena;
Se um objeto est presente, obtenha suas caractersticas;
Identifique o objeto
Se o objeto o correto, pare a esteira.
Verifique a posio do objeto.
Envia a informao ao rob (apenas para completar a lgica no ser
feito)
Movimente a esteira
Volte ao passo 3
Fim
Fim


Apndice 1: Lista de algumas Funes do Matlab para PI


Display de Imagens
colorbar Display color bar (MATLAB function)
image Create and display image object (MATLAB function)
imagesc Scale data and display as image (MATLAB function)
immovie Make movie from multiframe indexed image
imshow Display image in a MATLAB figure window
imtool Display image in the Image Viewer
montage Display multiple image frames as rectangular montage
subimage Display multiple images in single figure
warp Display image as texture-mapped surface
Image File I/O
imfinfo Return information about image file (MATLAB function)
imread Read image file (MATLAB function)
imwrite Write image file (MATLAB function)
interfileinfo Get information about Interfile file
interfileread Read image data from Interfile file
Image Types and Type Conversions
dither Convert image using dithering
double Convert data to double precision (MATLAB function)
gray2ind Convert intensity image to indexed image
grayslice Create indexed image from intensity image by thresholding
graythresh Compute global image threshold using Otsu's method
im2bw Convert image to binary image by thresholding
im2double Convert image array to double precision
im2int16 Convert image array to 16-bit signed integer
im2java Convert image to instance of Java image object (MATLAB
function)
im2java2d Convert image to instance of Java buffered image object
im2single Convert image array to single precision
im2uint16 Convert image array to 16-bit unsigned integers
im2uint8 Convert image array to 8-bit unsigned integers
ind2gray Convert indexed image to intensity image
ind2rgb Convert indexed image to RGB image
int16 Convert data to signed 16-bit integers (MATLAB function)
label2rgb Convert a label matrix to an RGB image
mat2gray Convert matrix to intensity image
rgb2gray Convert RGB image or colormap to grayscale
rgb2ind Convert RGB image to indexed image
uint16 Convert data to unsigned 16-bit integers (MATLAB function)
uint8 Convert data to unsigned 8-bit integers (MATLAB function)

Anda mungkin juga menyukai