Escolar Documentos
Profissional Documentos
Cultura Documentos
Parte 03
Segmentação e Rotulação de Componentes Conectados
Detecção de descontinuidades
– Baseia-se na procura por regiões de transição abrupta do nível de
intensidade luminosa na imagem.
Detecção de descontinuidades:
Exemplos de detectores
– SOBEL
– Calcula a magnitude do gradiente de
uma imagem empregando filtros 3x3
// 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);
// 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);
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).
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();
}
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();
}
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();
}
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();
}
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();
}
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
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
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
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
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
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
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
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
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
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
- 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)