Você está na página 1de 49

TEM – Sistemas de Visão

Parte 05
Detecção e Classificação

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


– Detecção
– Classificação

2 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Detecção de Padrões

3 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Detecção de Padrões
 Detecção de Padrões: é um problema de processamento de imagens / visão computacional
em que se busca determinar a presença / localização de um padrão em uma imagem. O
padrão pode ser um objeto, face, textura, forma, etc.
 Correspondência de padrões: é uma técnica utilizada para encontrar áreas de uma
imagem que correspondam a uma imagem padrão.
 São necessários dois componentes principais:

Imagem do padrão

Imagem fonte

4 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Detecção de Padrões
 Componentes:
 Imagem fonte (I): é a imagem em que nós esperamos encontrar uma correspondência da
imagem padrão
 Imagem do padrão (T): é a imagem do padrão de interesse
 O objetivo é detectar a posição de melhor correspondência. Para isso a imagem padrão será
deslizada sobre a imagem fonte pixel a pixel, da esquerda para a direita, do topo ao rodapé.
 Para cada posição de T sobre I será calculada uma dada métrica e tal valor será armazenado
em uma matriz de resultado R:

𝑅(𝑥, 𝑦) = (𝑇 𝑥 ′ , 𝑦 ′ − 𝐼 𝑥 + 𝑥 ′ , 𝑦 + 𝑦 ′ )2
𝑥′,𝑦′

 Para localizar a área de melhor correspondência basta


encontrar o menor valor na matriz R.

5 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


 Exemplo de resultado:

Imagem fonte (I)


Imagem do padrão (T)

Localização do
menor valor em R

6 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


 Exemplo de código - OpenCv
#include "opencv2/opencv.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;


using namespace cv;

int main( int argc, char** argv )


{
/// carregando a imagem I e o padrao T
Mat imagem = imread( "..\\imagens\\prateleira.jpg", IMREAD_GRAYSCALE );
Mat padrao = imread( "..\\imagens\\produto.jpg", IMREAD_GRAYSCALE );
imshow( "Imagem original", imagem );
imshow( "Imagem do padrao", padrao );

/// Realiza a correspondência e calculando R


Mat imagem_resultado;
matchTemplate( imagem, padrao, imagem_resultado, TM_SQDIFF_NORMED );
imshow( "Resultado da correspondência", imagem_resultado );

/// Encontra a melhor correspondência com a função minMaxLoc


double minVal; double maxVal; Point minLoc; Point maxLoc;
minMaxLoc( imagem_resultado, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );

/// Apresenta o local onde o padrão foi encontrado


Mat imagem_colorida = imagem.clone();
rectangle( imagem_colorida, minLoc, Point( minLoc.x + padrao.cols , minLoc.y + padrao.rows ), Scalar::all(0), 2, 8, 0 );
imshow( "Padrão encontrado", imagem_colorida );
waitKey();
}

7 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação

8 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
 Na classificação são analisadas propriedades numéricas que caracterizam as imagens com o
objetivo de organizar suas partes componentes em categorias
 Características / Descritores comumente utilizados:
 Textura: intensidade média, contraste, homogeneidade, entropia, correlação, etc.
 Componentes conectados: posição, área, dimensões, circularidade, contorno, etc.
 Selecionando um conjunto de descritores é possível criar um espaço multidimensional de
descritores que descreve cada classe.

9 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação

Exemplo de classificação de defeitos em tecido: textura

https://link.springer.com/article/10.1007%2Fs40313-019-00514-6

Development of an Online Automated Fabric Inspection System


Doi: 10.1007/s40313-019-00514-6

10 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação

Exemplo de classificação de defeitos de rebites: componentes

A Machine Vision System for Online Metal Can-End Rivet Inspection


Doi: 10.1088/1742-6596/1335/1/012002

11 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
 Os algoritmos de classificação empregam normalmente duas etapas de processamento:

 Treinamento: Nesta etapa procura-se estabelecer uma descrição única para cada
categoria através de propriedades características fornecidas por descritores
 Teste: As descrições de cada categoria são utilizadas para classificar novas amostra com
base em seus descritores

12 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
Desafio da detecção do parafuso:
• Descritor utilizado: circularidade

13 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
Desafio da detecção do parafuso:
• Descritor utilizado: circularidade

14 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
Desafio da detecção do parafuso:
• Descritor utilizado: circularidade
Fronteira
De
Decisão
clara

15 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
Desafio da detecção do parafuso:
• Descritor utilizado: circularidade

16 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
Desafio da detecção do parafuso:
• Descritor utilizado: circularidade

17 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
Desafio da detecção do parafuso:
• Descritor utilizado: circularidade
Onde fica
a fronteira de
Decisão?

18 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
Desafio da detecção do parafuso:
• Descritor utilizado: circularidade e área

19 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
Desafio da detecção do parafuso:
• Descritor utilizado: circularidade e área

20 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificação
Desafio da detecção do parafuso:
Fronteira
• Descritor utilizado: circularidade e área
De
Decisão
mais
clara

21 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Classificador por distância mínima

22
22 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Classificador de distância mínima
• O classificador de distância mínima é utilizado para classificar uma imagem/amostra como
pertencente a uma dada classe com base na distância entre seus descritores e os descritores da
classe correspondente no espaço multidimensional de descritores.

• Cada classe é representada por um vetor médio (ou protótipo):

1
𝑚𝑗 = 𝑥 𝑝𝑎𝑟𝑎 𝑗 = 1,2, … , 𝑀
𝑁𝑗
𝑥∈𝑤𝑗

onde 𝑁𝑗 é o número de amostras de treinamento da classe . 𝑤𝑗

• Podemos então atribuir uma amostra x a uma dada classe calculando sua
proximidade para cada 𝑤𝑗 e selecionando a classe de menor distância.

• Desta forma, a distância é definida como sendo um índice de similaridade. Normalmente é


utilizada a distância euclidiana.

23
23 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Classificador de distância mínima
• As classes são representadas por seus vetores médios, calculados no momento de treinamento.
• Durante os testes, para se classificar uma amostra x, calcula-se a distância entre a mesma e
cada vetor médio associado às classes.
• No exemplo, a distância entre a classe B e x é a menor. Desta forma, x é classificado como
pertencente a esta classe.

24
24 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Exemplo
 Dados os seguintes valores médios de descritores para cada
classe apresentada, crie um programa que classifique cada peça
presente na imagem componentes_diversos.png nas 3 categorias
possíveis através do Classificador de distância mínima.

Porca Parafuso Prego


Circularidade 1,12 0,32 0,19
Área 6635 6739 2212

 Possível estrutura de dados para representar o vetor de valores


médios dos descritores das classes:
// linha 0 – vetor médio da porca
// linha 1 - vetor médio da parafuso
// linha 2 - vetor médio da prego
float classes[3][2] = {{1.12, 6635}, {0.32, 6739},{0.19, 2212}};

25 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


 Exemplo de código

int main(int argc, char* argv)


{
// linha 0 - porca - linha 1 - parafuso - linha 2 - prego
float classes[3][2] = {{1.11, 6635}, {0.32, 6739},{0.19, 2212}};

// **************** Utilizando a rede ****************


// carrega a imagem de interesse
Mat tpoImage = imread("..\\imagens\\componentes_diversos.bmp", IMREAD_GRAYSCALE);

threshold(tpoImage, tpoImage, 0, 255, THRESH_OTSU);


tpoImage = 255 - tpoImage;
imshow("Segmentada", tpoImage);

// buscando os contornos
vector<vector<Point>> contornos;
// imagem, vetor de saída com os contornos,Lista de todos os contornos, pontos exatos, sem offset
findContours( tpoImage, contornos, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point(0, 0));

// *** Exibindo descritores do PRIMEIRO contorno ***


Mat imagemDesenho = Mat::zeros( tpoImage.size(), CV_8UC3 );

26 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


 Exemplo de código
// acessando e pintando cada peça conforme classificação
imagemDesenho.setTo(Scalar(0,0,0));
double mc = 1;
for (int i = 0; i < contornos.size(); i++)
{
double area = contourArea(contornos.at(i));
double circularidade = (4 * CV_PI * area)/(pow(contornos.at(i).size(),2));
float mX[] = {circularidade,area};

float menorDistancia = sqrt(pow(classes[0][0] - mX[0], 2) + pow(classes[0][1] - mX[1], 2));


int indiceClasse = 0;
for (int c = 1; c < 3; c++)
{
float distancia = sqrt(pow(classes[c][0] - mX[0], 2) + pow(classes[c][1] - mX[1], 2));
if (distancia < menorDistancia)
{
menorDistancia = distancia;
indiceClasse = c;
}
}

switch(indiceClasse)
{
case 0: // porca
drawContours(imagemDesenho, contornos, i, Scalar(255,0,0));
break;
case 1: // parafuso
drawContours(imagemDesenho, contornos, i, Scalar(0,255,0));
break;
case 2: // prego
drawContours(imagemDesenho, contornos, i, Scalar(0,0,255));
break;
}
}

imshow("Peças classificadas", imagemDesenho);


waitKey();
return 0;
}

27 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Redes Neurais Artificiais

Perceptron Multicamadas

28
28 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
O CÉREBRO E A REDE NEURAL BIOLÓGICA
• Cérebro humano: 100 bilhões de Neurônios

• Neurônios: unidades fundamentais dos tecidos do sistema nervoso.

• O núcleo de cada neurônio é conectado a outros neurônios por meio de vários


filamentos chamados dendritos e um filamento mais longo denominado axônio:
conexões sinápticas

29
29 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
O CÉREBRO E A REDE NEURAL BIOLÓGICA
• Quando um neurônio recebe pulsos elétricos, ele é ativado e eventualmente dispara um
pulso ao axônio, que emite este pulso aos outros neurônios através das conexões sinápticas.

• Esta ativação ou repasse de sinal aos demais neurônios somente é realizada caso os pulsos
elétricos recebidos pelas sinapses sejam fortes o suficiente a ultrapassar determinado limiar.

30
30 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
O CÉREBRO E A REDE NEURAL BIOLÓGICA
• As conexões sinápticas e a intensidade dos pulsos necessários para ativar o
neurônio podem mudar. Estas características permitem a rede neural reter
conhecimento, ou seja, aprender.

• O conhecimento retido fica distribuído por toda a rede neural.

31
31 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
A REDE NEURAL ARTIFICIAL
• Redes neurais artificiais são sistemas computacionais de implementação em hardware
ou software que imitam as habilidades computacionais do sistema nervoso, usando
um grande número de neurônios interconectados.

• Características
• Excelentes reconhecedoras de padrão

• Aprendem a reconhecer os padrões através da observação de exemplos

• Não requerem programação específica para distinção dos casos

• Interessante para situações onde é difícil expressar a classificação de amostras


através de um algoritmo tradicional baseado em regras

32
32 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
A REDE NEURAL ARTIFICIAL
• Exemplo de aplicação: detecção de parafusos

• A rede “aprenderá” a detectar parafusos através da análise de amostras apresentadas


como sendo ou não “parafusos”

não não

sim

33 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Arquitetura – Neurônio artificial
• O neurônio artificial é o elemento básico que forma uma rede neural artificial.
Também conhecido como elemento de processamento, simula o funcionamento de
um neurônio biológico.

34
34 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Arquitetura – Neurônio artificial
• principais que constituem o neurônio artificial são:
• entradas;
• pesos sinápticos;
• função de ativação ou função Soma;
• função de transferência ou ativador.

35
35 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Arquitetura – Redes de neurônios
• Em uma rede neural artificial os neurônios são agrupados em camadas

• Camada de entrada: introduz os valores à rede


• Camadas ocultas: realizam a classificação
• Camada de saída: apresenta os resultados de classificação

36
36 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Arquitetura – Definição/Projeto da Rede Neural
Artificial
• Deve-se identificar as variáveis relacionadas ao problema que contém as
informações necessárias à resolução do mesmo.

• Uma vez identificadas estas variáveis é escolhido o modelo da rede neural a ser
utilizado. Também devem ser definidos os seguintes aspectos da rede:

• Quantidade de camadas
• Quantidade de neurônios por camada
• Quantidade de entradas
• Quantidade de saídas

37
37 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Exemplo
• Exemplo de aplicação: detecção de parafusos

• 2 descritores: circularidade e área -> 2 camadas de entrada


• 2 classes: parafuso ou não parafuso -> 1 saída (0 ou 1)

38
38 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Treinamento Supervisionado
• Deve-se possuir um conjunto de treinamento organizado em pares, onde para cada
entrada se tenha a saída desejada.

• Estes pares são então apresentados à rede e para cada entrada deve ser verificado
se a saída obtida corresponde à saída desejada.

• Caso a saída obtida seja diferente da saída desejada deve ocorrer o ajuste dos
pesos sinápticos dos neurônios da rede. (Backpropagation)
• Caso a saída obtida seja igual à saída desejada, deve-se apresentar o par
seguinte à rede.

• Este processo deve se repetir para todos os pares do conjunto de treinamento, até
que se obtenha uma taxa de acerto satisfatória.

39
39 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Exemplo

• Exemplo de aplicação: detecção de parafusos

Conjunto de treinamento

Porca Parafuso Prego


Circularidade 1,12 0,32 0,19
Área 6635 6739 2212
Classe 0 1 0

40
40 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Utilização da Rede
• A fase de utilização é propriamente a execução da rede neural, que se inicia quando
uma entrada é apresentada à rede e termina quando a rede gera uma saída.

• É importante lembrar que, na fase de utilização, nenhum ajuste de peso sináptico é


realizado. O processo de utilização consiste na obtenção de uma resposta da rede a
um estímulo de entrada.

41
41 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
 Exemplo de código – OpenCv (1/4) – criação da rede
int main(int argc, char* argv)
{
// **************** criando a rede ****************
int qtdentradas = 2;
int qtdsaidas = 1;
int qtdneuronioscamadaoculta = 8;
int qtdcamadas = 3;

cv::Ptr<cv::ml::ANN_MLP> rede = cv::ml::ANN_MLP::create();


Mat camadas(qtdcamadas,1,CV_32SC1);
camadas.row(0) = Scalar(qtdentradas);
camadas.row(1) = Scalar(qtdneuronioscamadaoculta);
camadas.row(2) = Scalar(qtdsaidas);
rede->setLayerSizes(camadas);
rede->setActivationFunction(cv::ml::ANN_MLP::SIGMOID_SYM);

TermCriteria criterioParada(TermCriteria::MAX_ITER + TermCriteria::EPS, 300, 0.00001);


rede->setTermCriteria(criterioParada);
rede->setTrainMethod(ml::ANN_MLP::BACKPROP);

42 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


 Exemplo de código – OpenCv (2/4) – treinamento da rede

// **************** preparando conjunto de treinamento ****************


int qtdamostrastreinamento = 3;
Mat treinamentoDados(qtdamostrastreinamento, qtdentradas, CV_32FC1);
Mat treinamentoResultado(qtdamostrastreinamento, qtdsaidas, CV_32FC1);

treinamentoDados.at<float>(0, 0) = 1.11;
treinamentoDados.at<float>(0, 1) = 6635;
treinamentoResultado.at<float>(0, 0) = 0;

treinamentoDados.at<float>(1, 0) = 0.32;
treinamentoDados.at<float>(1, 1) = 6739;
treinamentoResultado.at<float>(1, 0) = 1;

treinamentoDados.at<float>(2, 0) = 0.19;
treinamentoDados.at<float>(2, 1) = 2212;
treinamentoResultado.at<float>(2, 0) = 0;

cout<<"Dados de treinamento: \n "<<treinamentoDados<<"\n\n";


cout<<"Resultados de treinamento: \n "<<treinamentoResultado<<"\n\n";

// **************** treinando a rede ****************


rede->train(treinamentoDados, cv::ml::ROW_SAMPLE, treinamentoResultado);

43 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


 Exemplo de código – OpenCv (3/4) – utilização da rede- detecção dos objetos
// **************** Identificando os componentes a testar com a rede ****************
// carrega a imagem de interesse
Mat tpoImage = imread("..\\imagens\\componentes_diversos.bmp", IMREAD_GRAYSCALE);

threshold(tpoImage, tpoImage, 0, 255, THRESH_OTSU);


tpoImage = 255 - tpoImage;
imshow("Segmentada", tpoImage);

// encontrando componentes conexos


vector<vector<Point>> contornos;
findContours( tpoImage, contornos, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point(0, 0));

44 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


 Exemplo de código – OpenCv (3/4) – utilização da rede- detecção dos objetos
// testando cada contorno
Mat imagemDesenho = Mat::zeros( tpoImage.size(), CV_8UC3 );
imagemDesenho.setTo(Scalar(0,0,0));
for (int i = 0; i < contornos.size(); i++)
{
float area = contourArea(contornos.at(i));
Mat amostra(1, 2, CV_32FC1);
amostra.at<float>(0, 0) = (4 * CV_PI * contourArea(contornos.at(i)))/(pow(contornos.at(i).size(),2));
amostra.at<float>(0, 1) = area;

Mat resposta;
rede->predict(amostra, resposta);

cout << resposta.at<float>(0,0) << endl;


if (resposta.at<float>(0,0) > 0.7)
{
drawContours(imagemDesenho, contornos, i, Scalar(255,0,0));
}
else
{
drawContours(imagemDesenho, contornos, i, Scalar(0,0,255));
}

imshow("Parafusos Identificados", imagemDesenho);


waitKey(5000);
}

waitKey();
return 0;
}

45 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Exemplo

46
46 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão
Exercícios

47 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


Exercício
 1) Altere o programa do classificador baseado em rede
neural artificial de exemplo para que seja possível
classificar os componentes da imagem
componentes_diversos.png nas 3 classes possíveis.
 Arquitetura sugerida:

porca
circularidade

... ... ... parafuso


área

prego

 Saídas esperadas para cada classe

Classe Saída 1 Saída 2 Saída 3


Porca 1 0 0
Parafuso 0 1 0
Prego 0 0 1

48 | Mecatrônica – DAMM – IFSC TEM – Sistemas de Visão


TEM – Sistemas de Visão

Parte 05
Detecção e Classificação

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