Você está na página 1de 53

TEM – Sistemas de Visão

Parte 03
Segmentação e Rotulação de Componentes Conectados

Material produzido por:


Mário Lucio Roloff, DAMM/IFSC
Maurício Edgar Stivanello, DAMM/IFSC
Marcelo Ricardo Stemmer, DAS/UFSC
Aula de Hoje

 Processamento Digital de Imagens


– Segmentação
– Rotulação de Componentes Conectados

2 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação

3 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação

 Visa dividir a imagem em suas diversas partes constituintes


ou segmentos (objetos e regiões).
 O nível de divisões feitas na imagem varia conforme a
aplicação (características dos objetos e regiões presentes na
imagem).
 Os algoritmos de segmentação baseiam-se principalmente
em duas propriedades do nível de intensidade luminosa das
imagens: sua descontinuidade e sua similaridade.

4 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas
 Por Descontinuidade: divisão da imagem de acordo com as mudanças abruptas
do nível de intensidade luminosa de seus pontos (realce de cantos e bordas de
objetos e regiões). Utilizadas quando se buscam por linhas, pontos ou outras
formas caracterizadas pelas bordas.

 Por Similaridade: divisão da imagem de acordo com padrões de similaridade


encontrados em suas regiões (nível de intensidade luminosa ou textura).
Utilizadas quando se busca pelos pontos internos dos objetos.

5 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Descontinuidades

 Detecção de descontinuidades
– Baseia-se na procura por regiões de transição abrupta do nível de
intensidade luminosa na imagem.

– Dentre as descontinuidades mais comuns estão pontos, linhas e bordas.

– Utiliza extensivamente as técnicas de filtragem espacial e frequencial


para enfatização (sharpening) de características na imagem.

6 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Descontinuidades

 Detecção de descontinuidades:
Exemplos de detectores
– SOBEL
– Calcula a magnitude do gradiente de
uma imagem empregando filtros 3x3

7 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Descontinuidades
void funcao_sobelHorizontal()
{
// carrega a imagem de interesse
Mat imagemOriginal = imread("..\\Imagens\\sudoku-original.jpg ", IMREAD_GRAYSCALE);

// cria uma janela para visualização


namedWindow("Imagem original", WINDOW_AUTOSIZE);
imshow("Imagem original", imagemOriginal);

// preparando o kernel
float c[9];
c[0] = -1; c[1] = 0; c[2] = 1;
c[3] = -2; c[4] = 0; c[5] = 2;
c[6] = -1; c[7] = 0; c[8] = 1;
Mat kernel(3,3, CV_32FC1,c);

Mat imagemFiltrada(imagemOriginal.size(), 8, 1);


// aplicando o filtro
// (original, destino, mesma profundidade da imagem original, operador, centralizado)
filter2D( imagemOriginal,imagemFiltrada,-1,kernel,Point(-1,-1));

// exibe a imagem filtrada


namedWindow("Imagem processada", WINDOW_AUTOSIZE);
imshow("Imagem processada", imagemFiltrada);
waitKey();
}

8 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Descontinuidades
void funcao_sobelVertical()
{
// carrega a imagem de interesse
Mat imagemOriginal = imread("..\\Imagens\\sudoku-original.jpg ", IMREAD_GRAYSCALE);

// cria uma janela para visualização


namedWindow("Imagem original", WINDOW_AUTOSIZE);
imshow("Imagem original", imagemOriginal);

// preparando o kernel
float c[9];
c[0] = -1; c[1] = -2; c[2] = -1;
c[3] = 0; c[4] = 0; c[5] = 0;
c[6] = 1; c[7] = 2; c[8] = 1;
Mat kernel(3,3, CV_32FC1,c);

Mat imagemFiltrada(imagemOriginal.size(), 8, 1);


// aplicando o filtro
// (original, destino, mesma profundidade da imagem original, operador, centralizado)
filter2D( imagemOriginal,imagemFiltrada,-1,kernel,Point(-1,-1));

// exibe a imagem filtrada


namedWindow("Imagem processada", WINDOW_AUTOSIZE);
imshow("Imagem processada", imagemFiltrada);
waitKey();
}

9 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Descontinuidades

 Detecção de descontinuidades: Exemplos de


detectores
– CANNY
– Primeiramente utiliza o Sobel e em seguida pós-processa os
pontos destacados para manter os melhores pontos de borda em
cada região.
– Como resultado teremos uma imagem binária com contornos de 1
pixel de espessura.

10 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Descontinuidades
void funcao_canny()
{
// carrega a imagem de interesse
Mat imagemOriginal = imread("..\\Imagens\\sudoku-original.jpg ", IMREAD_GRAYSCALE);

// cria uma janela para visualização


namedWindow("Imagem original", WINDOW_AUTOSIZE);
imshow("Imagem original", imagemOriginal);

Mat imagemProcessada(imagemOriginal.size(), 8, 1);


// é importante eliminar ruído
blur( imagemOriginal, imagemOriginal, Size(3,3) );
// (original, destino, threshold inferior, threshold superior, tamanho do kernel);
Canny( imagemOriginal, imagemProcessada, 50, 100, 3);

// exibe a imagem filtrada


namedWindow("Imagem processada", WINDOW_AUTOSIZE);
imshow("Imagem processada", imagemProcessada);
waitKey();
}

11 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Similaridades
 Limiarização
– Global: quando T depende apenas da imagem f (x, y) (nível de
intensidade luminosa).
– Dinâmica ou Adaptativa: quando T depende ainda das
coordenadas espaciais x e y, além de f .

12 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Pré-processamento no domínio Espacial
Operações Básicas

 Limiarização Global
– É uma técnica simples e muito difundida, onde define-se um valor
de limiar T para o nível de intensidade luminosa em que se deseja
realizar o ponto de corte para binarização da imagem (simple
thresholding).

– Efetua a divisão da imagem em duas regiões: objeto e fundo.

13 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Similaridades
ORIGINAL
 Limiarização Global
 Através de processamento Ponto a Ponto
void exemploLimiarizacaoGlobal()
{
Mat imagem = imread("..\\imagens\\madeira.jpg", IMREAD_GRAYSCALE);
imshow("Imagem original", imagem);
int limiar = 127;
for(int x = 0; x < imagem.cols; x++)
{
for(int y = 0; y < imagem.rows; y++)
{
if (imagem.at<uchar>(Point(x,y)) > limiar) LIMIARIZADA
{
imagem.at<uchar>(Point(x,y)) = 255;
}
else
{
imagem.at<uchar>(Point(x,y)) = 0;
}
}
}
imshow("Imagem processada", imagem);
waitKey();
}

14 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Similaridades
ORIGINAL
 Limiarização Global
 Através da Função threshold
void exemploLimiarizacaoGlobal()
{
Mat imagem = imread("..\\imagens\\madeira.jpg", IMREAD_GRAYSCALE);
imshow("Imagem original", imagem);
int limiar = 127;
// (imagem fonte, imagem destino, valor de limiar, valor máximo, tipo)
threshold(imagem, imagem, limiar, 255, THRESH_BINARY);
imshow("Imagem processada", imagem);
waitKey();
} LIMIARIZADA

15 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Similaridades
 Limiarização Global
 Tipos que podem ser definidos para o ultimo parâmetro da função threshold
IMAGEM ORIGINAL THRESH_BINARY THRESH_BINARY_INV

THRESH_TRUNC THRESH_TOZERO THRESH_TOZERO_INV

16 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Pré-processamento no domínio Espacial
Operações Básicas

Quantidade
 Limiarização Global
0 Intensidade 255
 Como selecionar o valor de limiar?
 Inspeção visual do histograma
 Tentativa e erro

void exemploLimiarizacaoGlobalOtsu()
{
Mat imagem = imread("..\\imagens\\madeira_escurecida.jpg", IMREAD_GRAYSCALE);
imshow("Imagem original", imagem);
int limiar = 127;
// (imagem fonte, imagem destino, valor de limiar, valor máximo, tipo)
threshold(imagem, imagem, limiar, 255, THRESH_BINARY);
imshow("Imagem processada", imagem);
waitKey();
}

17 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Pré-processamento no domínio Espacial
Operações Básicas

Quantidade
 Limiarização Global
0 Intensidade 255
 Como selecionar o valor de limiar?
 Obtenção automática do limiar
Para imagens bimodais podemos empregar
o métodode OTSU:
- maximiza a variância entre as classes
- minimizar a variância interna das classes
void exemploLimiarizacaoGlobalOtsu()
{
Mat imagem = imread("..\\imagens\\madeira_escurecida.jpg", IMREAD_GRAYSCALE);
imshow("Imagem original", imagem);
// (imagem fonte, imagem destino, não usado, valor máximo, tipo)
int limiar = threshold(imagem, imagem, 0, 255, THRESH_OTSU);
imshow("Imagem processada", imagem);
cout << "Limiar calculado: " << limiar << endl;
waitKey();
}

18 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Pré-processamento no domínio Espacial
Operações Básicas

Quantidade
 Limiarização Global
0 Intensidade 255
 Cuidado com ruído
 Uma imagem ruidosa pode dificultar a
definição do limiar

void exemploLimiarizacaoGlobalOtsu()
{
Mat imagem = imread("..\\imagens\\madeira_escurecida.jpg", IMREAD_GRAYSCALE);
imshow("Imagem original", imagem);
// (imagem fonte, imagem destino, não usado, valor máximo, tipo)
int limiar = threshold(imagem, imagem, 0, 255, THRESH_OTSU);
imshow("Imagem processada", imagem);
cout << "Limiar calculado: " << limiar << endl;
waitKey();
}

19 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Pré-processamento no domínio Espacial
Operações Básicas

Quantidade
 Limiarização Global
0 Intensidade 255
 Cuidado com ruído
 Uma imagem ruidosa pode dificultar a
definição do limiar:
- Para tais situações utilize-se de
pré-processamento!

void exemploLimiarizacaoGlobalOtsuPreProcessamento()
{
Mat imagem = imread("..\\imagens\\madeira_escurecida_ruido.jpg", IMREAD_GRAYSCALE);
imshow("Imagem original", imagem);
GaussianBlur(imagem,imagem,Size(5,5),0);
// (imagem fonte, imagem destino, não usado, valor máximo, tipo)
int limiar = threshold(imagem, imagem, 0, 255, THRESH_OTSU);
imshow("Imagem processada", imagem);
cout << "Limiar calculado: " <<
waitKey();
}

20 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Similaridades
 Limiarização Dinâmica ou Adaptativa
 A limiarização global, onde um limiar é utilizado para toda a imagem, pode não
ser adequada para imagens que contenham diferentes condições de
iluminação para diferentes áreas.

21 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Similaridades
 Limiarização Dinâmica ou Adaptativa
 Para tais imagens podemos utilizer a Limiarização Adaptativa, onde calcula-se
um valor de limiar diferente para cada região da imagem.

22 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Similaridades
 Limiarização Dinâmica ou Adaptativa
 Existem diferentes formas de calcular o valor de limiar local
 ADAPTIVE_THRESH_MEAN_C: o limiar é a media da área de vizinhança
 ADAPTIVE_THRESH_GAUSSIAN_C: o limiar é a soma ponderada da
área de vizinhança onde os pesos são uma janela gaussiana

void exemploLimiarizacaoAdaptive()
{
Mat imagem = imread("..\\imagens\\sudoku-original.jpg", IMREAD_GRAYSCALE);
imshow("Imagem original", imagem);
imwrite("limiarizada_aux_orig.jpg", imagem);
// (imagem fonte, imagem destino, valor máximo, tipo de cálculo do limiar, tamanho da área, constante que é subtraída do limiar)
adaptiveThreshold(imagem,imagem,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,51,0);
imwrite("limiarizada_aux.jpg", imagem);
imshow("Imagem processada", imagem);
waitKey();
}

23 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Similaridades
 Segmentação por Crescimento de Regiões
– Procedimento que agrupa pontos e pequenas sub-regiões da
imagem em regiões maiores, de acordo com algum critério de
similaridade (intensidade luminosa, textura, cor).
– Parte-se de um conjunto de pontos ditos “sementes”, para iniciar o
crescimento das regiões respeitando o critério de similaridade
adotado.
– Critérios de parada para o crescimento das regiões costumam ser
o tamanho e a forma das regiões formadas.

25 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Segmentação
Principais Técnicas de Segmentação por Similaridades

Segmentação por Crescimento de Regiões

Imagem Original Imagem Segmentada

26 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de
Componentes Conectados

27 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Uma vez que a imagem esteja segmentada


– Como extrair características dos objetos destacados?
– Quantas artêmias encontram-se na imagem abaixo?
– Qual é a menor artêmia?
threshold(imagem, imagem, 90, 255, THRESH_BINARY);

28 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Relacionamento entre pontos da Imagem


– Vizinhança: N4(p), ND(p), N8(p).
– Adjacência: além de ser vizinho, o ponto (pixel) deve
possuir um valor de intensidade luminosa
“semelhante”.

29 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Relacionamento entre pontos da Imagem


– Conectividade: é gerada quando há um caminho de
pontos vizinhos e adjacentes.
– Região: é gerada quando todos os pontos de uma área
da imagem são conexos.

30 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo de rotulação de componentes


 Encontra todos os componentes conectados de uma imagem e atribui um
identificador único a todos os pontos que compõe cada componente
 Corresponde a uma das operações mais importantes em Visão Computacional
 Os pontos de um componente conectado normalmente são interpretados
como objetos ou regiões de um objeto

Imagem Componentes conectados

31 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


1) Percorra a imagem da esquerda para direita do topo ao rodapé;
2) Se o ponto corrente tiver valor válido, então:
a) Se somente um de seus vizinhos superior ou esquerdo tiver um rótulo,
então copie o mesmo rótulo ao ponto corrente;
b) Se ambos tiverem o mesmo rótulo, então copie ao ponto corrente o
mesmo rótulo;
c) Se ambos tiverem rótulos diferentes, então copie o rótulo do vizinho
superior e entre com os rótulos encontrados em uma tabela de equivalência
como rótulos equivalentes;
d) Caso contrário, atribua um novo rótulo ao ponto corrente.

32 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


3) Se existirem mais pontos a avaliar, então vá para o passo 2;
4) Encontre o rótulo de menor valor para cada entrada de equivalência definida
na tabela de equivalência;
5) Varra novamente a imagem substituindo cada rótulo encontrado pelo menor
rótulo do seu conjunto de equivalência.

33 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


 Exemplo de execução para a imagen de entrada abaixo apresentada

0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 0 0 1 0
0 1 1 1 1 0 0 0 0 1 1 0 1 0
0 1 1 1 1 1 1 0 0 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

34 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


 Avaliação da posição (2,1)

0 0 0 0 0 0 0 0 0 0 0 0 0 0 Equivalências

0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 0 0 1 0
0 1 1 1 1 0 0 0 0 1 1 0 1 0
0 1 1 1 1 1 1 0 0 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

35 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


 Avaliação da posição (3,1)

0 0 0 0 0 0 0 0 0 0 0 0 0 0 Equivalências

0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 0 0 1 0
0 1 1 1 1 0 0 0 0 1 1 0 1 0
0 1 1 1 1 1 1 0 0 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

36 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


 Avaliação da posição (12,2)

0 0 0 0 0 0 0 0 0 0 0 0 0 0 Equivalências

0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 0 0 2 0
0 1 1 1 1 0 0 0 0 1 1 0 1 0
0 1 1 1 1 1 1 0 0 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

37 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


 Avaliação da posição (1,3)

0 0 0 0 0 0 0 0 0 0 0 0 0 0 Equivalências

0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 0 0 2 0
0 3 1 1 1 0 0 0 0 1 1 0 1 0
0 1 1 1 1 1 1 0 0 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

38 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


 Avaliação da posição (2,3)

0 0 0 0 0 0 0 0 0 0 0 0 0 0 Equivalências

0 0 1 1 1 0 0 0 0 0 0 0 0 0 1,3

0 0 1 1 1 1 0 0 0 0 0 0 2 0
0 3 1 1 1 0 0 0 0 1 1 0 1 0
0 1 1 1 1 1 1 0 0 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

39 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


 Avaliação da posição (9,3)

0 0 0 0 0 0 0 0 0 0 0 0 0 0 Equivalências

0 0 1 1 1 0 0 0 0 0 0 0 0 0 1,3

0 0 1 1 1 1 0 0 0 0 0 0 2 0
0 3 1 1 1 0 0 0 0 4 1 0 1 0
0 1 1 1 1 1 1 0 0 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

40 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


 Avaliação da posição (12,4)

0 0 0 0 0 0 0 0 0 0 0 0 0 0 Equivalências

0 0 1 1 1 0 0 0 0 0 0 0 0 0 1,3

0 0 1 1 1 1 0 0 0 0 0 0 2 0 2,4
0 3 1 1 1 0 0 0 0 4 4 0 2 0
0 3 1 1 1 1 1 0 0 4 4 4 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

41 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


 Segunda passada – Unificação dos rótulos
Equivalências
1,3
2,4

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 0 0 2 0 0 0 1 1 1 1 0 0 0 0 0 0 2 0
0 3 1 1 1 0 0 0 0 4 4 0 2 0 0 1 1 1 1 0 0 0 0 2 2 0 2 0
0 3 1 1 1 1 1 0 0 4 4 4 2 0 0 1 1 1 1 1 1 0 0 2 2 2 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

42 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Algoritmo Sequencial para rotulação - N4(p)


3) Uma vez que os pontos que constituem cada componente da imagem foram
rotulados podemos começar a extrair características de interesse:
- quantidade de objetos da imagem
- tamanho de cada componente
- posição central de cada componente
- ...

0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 0 0 2 0
0 1 1 1 1 0 0 0 0 2 2 0 2 0
0 1 1 1 1 1 1 0 0 2 2 2 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

43 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados

 Componentes Conexos - OpenCv

int nRotulos = connectedComponents(imagemEntrada, imagemRotulada, 8);


Obs: o primeiro rótulo corresponderá ao fundo

44 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Rotulação de Componentes Conectados
void componentesConectadosIds()
{
Mat imagem = imread("..\\imagens\\madeira.jpg", IMREAD_GRAYSCALE);
imshow( "Original", imagem );
threshold(imagem, imagem, 0, 255, THRESH_OTSU);
// invertendo pois identifica os componentes brancos
imagem = 255 - imagem;
imshow( "Binarizada", imagem );
Mat imagemRotulada(imagem.size(), CV_32S);
int nRotulos = connectedComponents(imagem, imagemRotulada, 8);

// criando uma imagem para pintar os componentes com diferentes cores


Mat imagemLabelsColoridas(imagem.size(), CV_8UC3);
imagemLabelsColoridas.setTo(Scalar(255,255,255));
for (int r = 1; r < nRotulos; r++)
{
Vec3b corLabel = Vec3b((rand()&255), (rand()&255), (rand()&255));
for(int x = 0; x < imagemRotulada.cols; ++x)
{
for(int y = 0; y < imagemRotulada.rows; ++y)
{
if (imagemRotulada.at<int>(Point(x,y)) == r)
{
imagemLabelsColoridas.at<Vec3b>(Point(x,y)) = corLabel;
}
}
}
}
imshow( "Componentes", imagemLabelsColoridas );
waitKey();
}

45 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Etapas do SW
do Sistema de Visão

46 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Etapas do SW do Sistema de Visão

47 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Etapas do SW do Sistema de Visão
Exemplo

48 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Exercícios

49 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Etapas do SW do Sistema de Visão
Exercícios

1) Crie a imagem resultante da fusão entre a detecção de borda utilizando o


filtro Sobel vertical e horizontal sobre a imagem sudoku-original.jpg.

50 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Etapas do SW do Sistema de Visão
Exercícios

2) Aplique o filtro Canny sobre o arquivo video.mp4.

51 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Etapas do SW do Sistema de Visão
Exercícios

3) Aplique a segmentação através de limiarização adaptativa na imagem


sudoku-original.jpg. Em seguida, encontre os componentes
conectados e, com base na informação obtida, crie uma imagem binária onde
apenas o tabuleiro esteja presente. Aplique operações morfológicas para melhorar
o aspecto do tabuleiro.

52 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


Etapas do SW do Sistema de Visão
Exercícios

4) Crie um programa que processe a imagem Artemias.jpg e que apresente as


seguintes informações:

- A quantidade de artêmias
- O tamanho e localização da maior e menor artêmia (valor e retângulo)
- A localização de cada artêmia (valor e indicação do centro)

53 | Roloff@ - Mecatrônica – DAMM – IFSC – 2014/01 TEM – Sistemas de Visão


TEM – Sistemas de Visão
Parte 03
Segmentação e Rotulação de Componentes Conectados

Material produzido por:


Mário Lucio Roloff, DAMM/IFSC
Maurício Edgar Stivanello, DAMM/IFSC
Marcelo Ricardo Stemmer, DAS/UFSC

Você também pode gostar