Seminário Introdução à Visão Computacional - The Cyclops Project CPGCC - INE -UFSC Domínios 1. Domínio do Valor • Consideramos apenas o Valor de cada pixel da imagem, sem levar em consideração o que se encontra ao seu redor. 2. Domínio do Espaço • Consideramos o valor de cada pixel e também a relação deste com os valores de um conjunto de pixels na sua vizinhança. 3. Domínio da Freqüência • Consideramos o comportamento de variação do valor dos pixels de uma imagem em vários sentidos. Domínio do Valor V1. Operações Matemáticas de imagem com operando escalar. V2. Operações Lógicas com operando escalar. V3. Operações Matemáticas de imagem com imagem. V4. Operações Lógicas de imagem com imagem. V5. Operações de Limiarização. V6. Operações Estatísticas V7. Operações Combinadas V1. Operações Matemáticas de imagem com operando escalar V1.1. Soma: Soma-se um escalar a cada pixel da imagem, aumentando sua intensidade. V1.2. Multiplicação: Multiplica-se um escalar por cada pixel da imagem. Resultado é expresso em valor inteiro. Resultados de ambos os métodos são truncados para o valor máximo de representação de pixel no tipo de imagem (no nosso caso 255) V1. Operações Matemáticas de imagem com operando escalar V1.3. Subtração: Subtrai-se um escalar de cada pixel da imagem, reduzindo-se sua intensidade. V1.4. Divisão inteira: Divide-se o valor de cada pixel da imagem por um escalar. Expressa-se o resultado como inteiro. Resultados são expressos truncados ao valor mínimo de representação no tipo de imagem (em nosso caso 0) V1. Operações Matemáticas de imagem com operando escalar Implementação: • Um único programa implementa todo o conjunto V1. • Um parâmetro do tipo Símbolo define qual operação será realizada. Exemplo: mathescalar -i imagem.pgm -o iresult.pgm -valor 20 -op soma V2. Operações Lógicas com operando escalar V2.1. OR: Realiza-se OU lógico entre cada pixel da imagem e operando binário escalar. V2.2. AND: Realiza-se E lógico entre cada pixel da imagem e operando binário escalar. V2.3. XOR: Realiza-se OU exclusivo lógico entre cada pixel da imagem e operando binário escalar. V2.4. NOT: Realiza-se negação lógica de cada pixel da imagem. Resultados são expressos sempre de forma binária (em nosso caso 0 ou 255) V2. Operações Lógicas com operando escalar Implementação: • Um único programa implementa todo o conjunto V2. • Um parâmetro do tipo Símbolo define qual operação será realizada. Exemplo: boolescalar -i imagem.pgm -o iresult.pgm -valor 1 -op and V3. Operações Matemáticas de imagem com imagem V3.1. Soma: Soma-se cada pixel de uma imagem ao correspondente da outra. V3.2. Multiplicação: Multiplica-se cada pixel de uma imagem com o correspondente da outra. Resultado é expresso em valor inteiro. Resultados de ambos os métodos são truncados para o valor máximo de representação de pixel no tipo de imagem (no nosso caso 255) Método só pode ser executado se ambas imagens possuem dimensões iguais (x@y) V3. Operações Matemáticas de imagem com imagem V3.3. Subtração: Subtrae-se-se cada pixel de uma imagem do correspondente da outra. V3.4. Diferença absoluta: Subtrae-se-se cada pixel de uma imagem do correspondente da outra. Resultado é expresso em valor positivo. V3.5. Divisão: Divide-se cada pixel de uma imagem pelo correspondente da outra. Resultado é expresso em valor inteiro. Valem as considerações sobre limites mínimos. V3. Operações Matemáticas de imagem com imagem • A ordem dos parâmetros de entrada faz diferença. • Ordem é a mesma da expressão na forma infixada. Implementação: • Um único programa implementa todo o conjunto V3. • Um parâmetro do tipo Símbolo define qual operação será realizada. Exemplo: math -i1 imagem.pgm -i2 imagem2.pgm -o iresult.pgm -op dif V4. Operações Lógicas de imagem com imagem V4.1. OR: Realiza-se OU lógico entre cada pixel corespondente das imagens. V4.2. AND: Realiza-se E lógico entre cada pixel corespondente das imagens. V4.3. XOR: Realiza-se OU exclusivo lógico entre cada pixel corespondente das imagens. Resultados são expressos sempre de forma binária (em nosso caso 0 ou 255) V4. Operações Lógicas de imagem com imagem • A ordem dos parâmetros de entrada faz diferença. • Ordem é a mesma da expressão na forma infixada. Implementação: • Um único programa implementa todo o conjunto V4. • Um parâmetro do tipo Símbolo define qual operação será realizada. Exemplo: bool -i1 imagem.pgm -i2 imagem2.pgm -o iresult.pgm -op xor V5. Operações de Limiarização Limiarização simples V5.1. Limiar acima: Compara-se cada pixel de uma imagem com um valor limiar. Pixels cujo valor for >= ao limiar recebem a cor #1, o resto a cor #2. V5.2. Limiar abaixo: Compara-se cada pixel de uma imagem com um valor limiar. Pixels cujo valor for <= ao limiar recebem a cor #1, o resto a cor #2. Para indicar que as cores são branco e preto, podemos expressar #1 = 255 e #2 = 0. Pode-se perfeitamente definir outros valores. V5. Operações de Limiarização Limiarização de faixa V5.3. Limiar dentro: Compara-se cada pixel de uma imagem com dois valores limiar. Pixels cujo valor for >= ao limiar inferior e <= ao superior recebem a cor #1, o resto a cor #2. V5.4. Limiar fora: Compara-se cada pixel de uma imagem dois valores limiar. Pixels cujo valor for <= ao limiar inferior e >= ao superior recebem a cor #1, o resto a cor #2. V5. Operações de Limiarização Limiarização com Tolerância V5.5. Limiar acima com histerese: Compara-se cada pixel de uma imagem com dois valores limiares. Pixels cujo valor for >= ao limiar superior recebem a cor #1, pixels que forem <= ao inferior a cor #2. Pixels entre os limiares são comparados aos seus vizinhos imediatos (vizinhança de 4 ou vizinhança de 8), se algum vizinho estiver acima do limiar, este pixel receberá a cor #1, senão a #2. V5. Operações de Limiarização Limiarização com Tolerância V5.6. Limiar abaixo com histerese: Compara-se cada pixel de uma imagem com dois valores limiar. Pixels cujo valor for <= ao limiar inferior recebem a cor #1, pixels que forem >= ao superior a cor #2. Pixels entre os limiares são comparados aos seus vizinhos imediatos (vizinhança de 4 ou vizinhança de 8), se algum vizinho estiver abaixo do limiar, este pixel receberá a cor #1, senão a #2. V5. Operações de Limiarização Vizinhança de 4: Vizinhança de 8: V5. Operações de Limiarização Implementação: • • Três programas implementam todo o conjunto V5. • Limiar Simples • Limiar com Faixa • Limiar com Tolerância Um parâmetro do tipo Símbolo define qual operação será realizada. Exemplos: limiarsimples -i imagem.pgm -o iresult.pgm -op acima -lim 100 -c1 255 -c2 0 limiarfaixa -i ima.pgm -o res.pgm -op fora -inf 128 -sup 200 -c1 255 -c2 0 limiartoler -i ima.pgm -o res.pgm -op acima -inf 128 -sup 130 -c1 255 -c2 0 V6. Operações Estatísticas V6.1.Histograma: Para cada possível valor de pixel na escala de valores utilizada (0 a 255 no nosso caso) conta-se o número de pixels apresentando esse valor. Gera-se um vetor contendo esses valores (256 posições no nosso caso) e também uma imagem representando essa contagem como um gráfico de barras. V6.2. Histograma por Faixas: Calcula-se o histograma dividindo-se a faixa de valores em pedaços dados por seus limites. V6.3. Pontos Nodais de Histograma: Calcula-se o histograma e procura-se por n fundos-de-vale no mesmo. Gera-se um vetor contendo esses valores. V6. Operações Estatísticas V6. Operações Estatísticas Implementação do Histograma V6.1: • Programa toma uma imagem de entrada e gera dois arquivos de saída: a imagem do histograma e o vetor de valores (em ASCII) Exemplo: histo -i imagem.pgm -o iresult.pgm -h histo.txt histo.txt: 255 21 34 56 678 9000 7890 67 5677 456 .... V6. Operações Estatísticas Implementação do Histograma por Faixas V6.2: • Programa toma uma imagem e um arquivo texto com a definição das faixas de entrada e gera dois arquivos de saída: a imagem do histograma e o vetor de valores (em ASCII) Exemplo: histofaixa -i imagem.pgm -f faixas.txt -o result.pgm -h histo.txt faixas.txt: 4 0 34 35 90 91 200 200 255 V6. Operações Estatísticas Implementação do Cálculo de Pontos Nodais em Histograma • Histograma abaixo aparentemente possui dois pontos nodais # 0 256 V6. Operações Estatísticas Achando Pontos Nodais em Histograma • Primeiramente achamos os picos: pontos de valor elevado onde a derivada muda de positivo para negativo. Para evitar que pequenas flutuações incluam erros, sempre tomar um conjunto de valores para o cálculo. # 0 256 V6. Operações Estatísticas Achando Pontos Nodais em Histograma • Depois achamos os vales : pontos pontos entre os picos de menor valor. Se houver uma faixa grande de valor baixo, pegar o meio desta. # 0 256 V6. Operações Estatísticas Classificando Pontos Nodais em Histograma • Em terceiro lugar classificamos os vales: vales muito próximos aos picos não nos interessam, pois representam apenas variações de cor de um mesmo grupo. # 0 256 V6. Operações Estatísticas Verificando Pontos Nodais em Histograma • Por último calculamos a área (numero de pontos) de cada segmento: segmentos com muito poucos pontos também não nos interessam e são fundidos com o vizinho que possuir tamanho suficiente. # 0 256 V6. Operações Estatísticas Verificando Pontos Nodais em Histograma • Exemplo: A área azul é considerada pequena por que possui poucos pontos e ao mesmo tempo representa um vale relativamente baixo. O ponto nodal em vinho é eliminado. A área é fundida com a área em laranja, já #que esse lado é o da menor amplitude. 0 256 V6. Operações Estatísticas Requisitos • Tolerância no cálculo das derivadas: Usamos uma seqüência de vários valores e uma reta interpolando estes para calcular a derivada tangente. Deve-se implementar o numero de valores como parâmetro. • Tolerância na identificação do centro de um vale: Ignora-se pequenas variações ao se seguir o fundo de um vale para determinar sua extensão. Implementado como parâmetro. • Tamanho (área) mínimo de um segmento entre pontos nodais: implementar como parâmetro. • Seleção de segmentos a fundir: devem ter área abaixo do mínimo e amplitude abaixo de um parâmetro. Melhor forma de expressar isto é multiplicar estes dois valores. • Número máximo de pontos nodais: parametro definido pelo usuário. V6. Operações Estatísticas Implementação Saídas: • Imagem do histograma mostrando os pontos nodais (mostrar histograma em cinza e pontos nodais como retas verticais em branco. • Arquivo texto dando lista de valores de pontos nodais. Linha de comando para forçar encontrar dois pontos nodais: histonodal -i imagem.pgm -o iresult.pgm -h histo.txt -ntan 10 -tolval 20 -amplitude 50 -area 100 -nodos 2 V7. Operações Combinadas V7.1. Limiarização com Histograma: Utiliza o resultado de um Cálculo de Pontos Nodais em Histograma para definição dinâmica do limiar. O método de cálculo de pontos nodais é parametrizado para produzir apenas um único ponto nodal. limiarhisto -i imagem.pgm -o iresult.pgm -op acima -histo histo.txt -c1 255 -c2 0