“Deep learning has instead given us machines with truly impressive abilities but no intelligence.”

The Book of Why, Judea Pearl

23 - Processamento de Imagens

Uma imagem digital pode ser organizada em uma matriz bidimensional de valores discretos que representam o brilho ou a cor de cada pixel na imagem. Em termos matemáticos, pode ser representada como uma função $f(x,y)$, onde $x$ e $y$ são as coordenadas espaciais da imagem e $f(x,y)$ é o valor da imagem naquele local. O valor de $f(x,y)$ pode ser um valor de intensidade, valor de tons de cinza ou valor de cor, dependendo do tipo de imagem. Os valores de pixel de uma imagem digital geralmente são representados usando números binários ou inteiros, onde o intervalo de valores depende da profundidade de bits da imagem.

Processamento Digital de Imagem é uso de um computador digital para processar imagens digitais. Pode ser dividida entre três paradigmas:

  • Low-Level: Aplicação de operações primitivas à imagens (ruído, contraste, nitidez, etc...). Entrada e saída são imagens.
  • Mid-Level: Tarefas como segmentação (particionar uma imagem em região ou objetos), classificação de partes, etc. A entrada é uma ou mais imagens a saída são atributos da(s) imagem(ns).
  • High-Level: Tem como objetivo a identificação de objetos na imagem, execução de funções cognitivas com base no reconhecimento de padrões na imagem, etc.
23.1 - Introdução aos Filtros Digitais.

No processamento de imagens, um filtro digital é um algoritmo matemático que opera em uma imagem digital e produz uma nova imagem com as propriedades desejadas. Os filtros digitais funcionam envolvendo a imagem de entrada com um kernel ou máscara, que é uma pequena matriz de números que especifica o comportamento do filtro. Os valores no kernel determinam como o filtro modificará os valores de pixel na imagem.

Existem muitos tipos de filtros digitais usados no processamento de imagens, como filtros passa-baixa, filtros passa-alta e filtros medianos. Cada tipo de filtro é projetado para atingir um objetivo específico.

Os filtros passa-baixa, por exemplo, são usados para suavizar uma imagem removendo componentes de alta frequência, como ruído ou pequenos detalhes. Eles são frequentemente usados na compactação de imagens para reduzir seu tamanho, preservando detalhes importantes.

Os filtros passa-alta, por outro lado, são usados para aguçar uma imagem aprimorando as bordas e removendo componentes de baixa frequência. Eles podem ser usados para detectar recursos, como linhas ou arestas, e são frequentemente usados na segmentação de imagens.

Os filtros de mediana são outro tipo de filtro digital usado no processamento de imagens. Eles são usados para remover o ruído de uma imagem, substituindo cada pixel pelo valor médio de seus pixels vizinhos. Os filtros de mediana são particularmente eficazes na remoção de ruído tipo "sal e pimenta", que é um tipo de ruído que afeta aleatoriamente pixels individuais em uma imagem.

Filtros digitais podem ser aplicados a imagens usando várias ferramentas de software, como Adobe Photoshop, MATLAB ou bibliotecas Python como OpenCV. Ao usar filtros digitais, as tarefas de processamento de imagem podem ser automatizadas e as imagens podem ser aprimoradas ou modificadas para melhorar sua qualidade ou extrair recursos específicos.

Filtros lineares são uma técnica comum usada no processamento de imagens para modificar a aparência de imagens digitais. São operações matemáticas que operam pixel a pixel para alterar o brilho, o contraste ou a nitidez de uma imagem. Os filtros lineares são amplamente utilizados na ciência da computação para uma variedade de tarefas de processamento de imagem, incluindo aprimoramento de imagem, redução de ruído e extração de recursos.

Os filtros lineares são normalmente representados como uma matriz de coeficientes que definem como a imagem de entrada deve ser modificada. O tamanho da matriz, conhecido como kernel ou janela, determina a extensão da influência do filtro na imagem. Os núcleos de filtro comumente usados incluem o filtro de identidade, que deixa a imagem inalterada, o filtro gaussiano, que desfoca a imagem e reduz o ruído, e o filtro de detecção de borda, que destaca as bordas de uma imagem.

Para aplicar um filtro linear a uma imagem, cada pixel é substituído por uma soma ponderada de seus pixels vizinhos, usando os coeficientes definidos no kernel do filtro. Essa operação é conhecida como convolução e é realizada deslizando o kernel pela imagem e calculando o produto escalar entre o kernel e a vizinhança correspondente de pixels em cada local.

Os filtros lineares são uma ferramenta poderosa para o processamento de imagens porque são computacionalmente eficientes e podem ser usados para obter uma ampla gama de efeitos. Eles são amplamente utilizados em aplicações de visão computacional, como detecção de objetos, reconhecimento facial e segmentação de imagens. No entanto, eles são limitados em sua capacidade de lidar com estruturas de imagem complexas e podem produzir artefatos ou distorções indesejáveis se usados incorretamente.

Os filtros lineares tem a grande desvantagem de afetar áreas sem ruído de uma imagem. Em contrapartida, os filtros não lineares, como moda e mediana, definem algoritmos de como certas máscaras podem ser aplicadas. No caso do Moda, ele utiliza o nível digital de um vizinho frequente para determinar o valor do elemento analisado. Isso é feito por um histograma e toma-se o valor central dos dados. Caso ele não seja encontrado, é tomado o valor modal mais próximo ao central. O filtro de Mediana utiliza a mediana dos níveis digitais dos vizinhos. Ordenam-se os valores e escolhe-se o dado que divide o conjunto em duas partes iguais.

23.2 - Métodos de Espaço de Estados.

Em construção

23.3 - Noções de Percepção Visual Humana.

A visão é o sentido mais desenvolvido nos seres humanos. No entanto, temos limitações claras, assim como na audição, para enxergar em determinadas partes do espectro eletromagnético.

Espectro EM
Espectro Eletromagnético. Fonte: Khan Academy

O espectro eletromagnético é a faixa de todas as frequências possíveis de radiação eletromagnética, que inclui a luz visível, bem como outras formas de radiação, como ondas de rádio, microondas, raios-X e raios gama. Embora nossos olhos sejam capazes de detectar e processar a luz visível, que se enquadra em uma faixa estreita do espectro eletromagnético, somos incapazes de ver outras formas de radiação que existem fora dessa faixa.

Por exemplo, ondas de rádio e micro-ondas são usadas para comunicação e cozimento, respectivamente, mas não conseguimos vê-las. Da mesma forma, raios-X e raios gama são usados em imagens médicas e terapia de radiação, mas nossos olhos não são sensíveis a esses tipos de radiação.

Além das limitações de nossa percepção visual na detecção de diferentes formas de radiação eletromagnética, nossos olhos também são limitados em sua capacidade de perceber detalhes finos e contraste. A resolução de nossos olhos é limitada pelo número e densidade de células fotorreceptoras na retina, o que significa que somos incapazes de resolver pequenos detalhes menores que o espaçamento entre essas células.

Além disso, nossos olhos também são limitados em sua capacidade de perceber baixos níveis de luz. Em condições de pouca luz, a sensibilidade de nossos olhos diminui, o que pode dificultar a visualização de detalhes e cores.

Apesar dessas limitações, os avanços na tecnologia nos permitiram superar algumas dessas limitações desenvolvendo dispositivos que podem detectar e visualizar diferentes formas de radiação eletromagnética, como máquinas de raios-X, câmeras termográficas e telescópios que podem detectar ondas de rádio e outros formas de radiação.

Olho Humano
Estrutura do Olho Humano. Fonte: Hospital de Olhos de Blumenau - https://hob.med.br

A percepção visual humana é o processo pelo qual o cérebro interpreta e dá sentido à informação visual recebida pelos olhos. Esse processo envolve uma interação complexa entre os olhos, os nervos ópticos e o cérebro, que trabalham juntos para criar nosso sentido de visão.

Os olhos são os principais órgãos da visão e são responsáveis por coletar informações visuais do ambiente circundante. A luz que entra no olho é focada pela lente na retina, que contém milhões de células sensíveis à luz chamadas fotorreceptores. Esses fotorreceptores convertem a luz em sinais elétricos, que são transmitidos ao cérebro por meio do nervo óptico.

Uma vez que a informação visual chega ao cérebro, ela passa por uma série de estágios complexos de processamento que nos permitem perceber o mundo ao nosso redor. O cérebro usa uma combinação de processamento de baixo para cima e de cima para baixo para interpretar a informação visual. O processamento de baixo para cima refere-se à análise dos dados sensoriais brutos recebidos pelos olhos, enquanto o processamento de cima para baixo envolve o uso de conhecimento prévio e contexto para interpretar a informação visual.

Um aspecto importante da percepção visual é a capacidade de distinguir entre diferentes objetos no campo visual. Esse processo, conhecido como reconhecimento de objetos, depende da capacidade do cérebro de detectar e processar as características que compõem um objeto, como sua forma, cor, textura e movimento.

Outro aspecto importante da percepção visual é a capacidade de perceber profundidade e relações espaciais. Esse processo, conhecido como percepção de profundidade, depende de várias pistas, incluindo disparidade binocular, paralaxe de movimento e perspectiva linear, para ajudar o cérebro a determinar a distância relativa entre os objetos no campo visual.

A percepção visual humana é um feito notável do processamento neural que nos permite entender o mundo visual ao nosso redor. Dos olhos ao cérebro, esse processo envolve uma complexa interação entre processos biológicos e neurais que trabalham juntos para criar nosso senso de visão.

23.4 - Amostragem e Quantização de Imagens.

A amostragem refere-se ao processo de conversão de dados de imagem contínua em um formato digital discreto, enquanto a quantização envolve o processo de representação dos dados de imagem discreta usando um número finito de valores.

A amostragem é necessária porque as imagens digitais são compostas de pixels discretos, cada um com uma localização e valor específicos. Para criar uma imagem digital, uma cena física é capturada usando uma câmera digital ou scanner, que amostra a cena em uma taxa específica e registra a intensidade da luz em cada ponto de amostra. O número de amostras coletadas por unidade de área é conhecido como taxa de amostragem ou resolução e determina o nível de detalhe na imagem resultante.

A quantização envolve atribuir valores numéricos discretos a cada pixel na imagem. Isso é feito dividindo o intervalo de valores de pixel em um número finito de níveis, aos quais são atribuídos valores numéricos específicos. O número de níveis usados para quantização determina a precisão com que os dados da imagem podem ser representados. Por exemplo, uma imagem de 8 bits usa 256 níveis de quantização, enquanto uma imagem de 16 bits usa 65.536 níveis.

O processo de amostragem e quantização pode resultar em perda de informações e diminuição da qualidade da imagem, especialmente se a taxa de amostragem ou o nível de quantização for muito baixo. Para minimizar esses problemas, é importante escolher valores apropriados para a taxa de amostragem e nível de quantização com base no uso pretendido da imagem. Por exemplo, imagens destinadas a impressão ou exibições de alta resolução podem exigir taxas de amostragem e níveis de quantização mais altos para preservar detalhes finos e evitar artefatos visíveis.

Amostragem e quantização
Amostragem e quantização. Fonte: Coding Ninja - https://www.codingninjas.com/codestudio/library/image-sampling-and-quantization

Abaixo temos um exemplo de código em Python, usando a biblioteca PIL, para executar o processo de amostragem e quantização em uma imagem existente:


    from PIL import Image

    # Load the image
    img = Image.open("image.jpg")
    
    # Set the new sampling rate (resolution) and quantization level
    new_sampling_rate = 0.5  # Sample every other pixel
    new_quantization_levels = 128  # Use 128 quantization levels
    
    # Resample the image using the new sampling rate
    new_size = tuple(int(i*new_sampling_rate) for i in img.size)
    resampled_img = img.resize(new_size)
    
    # Quantize the image using the new quantization levels
    quantized_img = resampled_img.quantize(new_quantization_levels)
    
    # Save the quantized image
    quantized_img.save("quantized_image.jpg")
    
23.5 - Transformadas de Imagens.

Do ponto de vista matemático, seja $F(x,y)$ a equação que representa a imagem original, $T\{ \quad \}$ uma transformação que será aplicada em $F$ e $G(x,y)$ a imagem resultante. Logo:

$$ G(x,y)=T\{ \; F(x,y) \; \} $$

Se olharmos para cada pixel de uma imagem, podemos escrever:

$$ s=T(r) $$

Onde $r$ é o valor de um pixel qualquer ou nível de intensidade da imagem $F(x,y)$ e $s$ é o novo valor.

Há diversas transformações utilizadas no processamento de imagens:

  • Transformada de Hough
  • Transformada de Radon
  • Transformada discreta de Fourier
  • Transformada discreta do cosseno
  • Transformada Wavelet (pacote de onda)

A transformada de Hough é um algoritmo amplamente utilizado no campo do processamento de imagens, especificamente para detectar formas ou padrões dentro de uma imagem. Foi desenvolvido por Paul Hough no final dos anos 1950 e, desde então, foi refinado e aprimorado por vários pesquisadores.

A ideia básica por trás da transformada de Hough é converter dados de imagem do domínio espacial $(x, y)$ para o espaço de parâmetros $(\theta, \rho)$, onde $\theta$ representa o ângulo de uma linha e $\rho$ representa a distância da linha desde a origem . Essa conversão permite a detecção de linhas e outras formas na imagem, mesmo que não sejam perfeitamente retas ou facilmente distinguíveis.

Para realizar a transformada de Hough, cada ponto na imagem é considerado como uma parte potencial de uma forma. Um conjunto de linhas possíveis é gerado para cada ponto, com base nos valores possíveis de $\theta$ e $\rho$. A interseção dessas linhas no espaço de parâmetros representa uma linha potencial na imagem. Este processo é repetido para cada ponto da imagem, e as interseções resultantes são acumuladas em um espaço Hough, que é uma matriz bidimensional representando os valores de $\theta$ e $\rho$.

Os picos mais proeminentes no espaço Hough correspondem às linhas ou formas presentes na imagem. Esses picos podem ser detectados usando várias técnicas de limiarização e as linhas ou formas correspondentes podem ser extraídas dos dados da imagem.

A transformada de Hough é particularmente útil para detectar linhas, círculos e outras formas regulares em uma imagem. Tem aplicações em uma ampla gama de campos, incluindo visão computacional, robótica e imagens médicas.

Embora a transformada de Hough seja um algoritmo poderoso, ela pode ser computacionalmente cara, principalmente para imagens grandes ou formas complexas. Várias técnicas foram desenvolvidas para otimizar o algoritmo e reduzir o tempo de computação, incluindo o uso de processamento paralelo e estruturas de dados eficientes.

A transformada Radon é uma operação matemática usada no processamento de imagens para extrair informações sobre a estrutura interna de um objeto, como a partir de uma série de imagens de raios-X tiradas em diferentes ângulos. É nomeado após o matemático austríaco Johann Radon, que o descreveu pela primeira vez em 1917.

A transformada Radon converte uma imagem 2D em um conjunto de projeções 1D medindo a quantidade de atenuação de raios-X ao longo de uma linha através da imagem. Essas projeções representam a densidade integrada do objeto ao longo de cada linha da imagem e podem ser usadas para reconstruir uma imagem 3D do objeto. A transformada Radon é comumente usada em imagens médicas para criar imagens tomográficas do corpo humano, como tomografias computadorizadas.

A transformada Radon pode ser calculada usando as seguintes etapas:

  1. Escolha um conjunto de ângulos de projeção e construa um conjunto de linhas que passam pela imagem em cada ângulo.
  2. Para cada linha, calcule a integral dos valores de pixel ao longo dessa linha.
  3. Repita os passos 1 e 2 para todos os ângulos de projeção.
  4. Construa uma nova imagem a partir do conjunto de projeções 1D atribuindo cada projeção a uma coluna correspondente na nova imagem.
  5. Use um algoritmo de transformada inversa de Radon para reconstruir uma imagem 2D ou 3D a partir do conjunto de projeções.

A transformada de Radon é uma ferramenta poderosa para imagens médicas e também é usada em outros campos, como geofísica e ciência dos materiais, para estudar a estrutura interna dos objetos.

No entanto, a transformada Radon tem algumas limitações. Requer um grande número de imagens de raios X tiradas em diferentes ângulos para gerar reconstruções 3D precisas, o que pode resultar em longos tempos de varredura e maior exposição à radiação. Além disso, o processo de reconstrução pode ser computacionalmente intensivo e pode exigir hardware ou software especializado.

A Transformada Discreta de Fourier (DFT) é uma operação matemática usada no processamento de imagens para transformar uma imagem digital do domínio espacial para o domínio da frequência. A DFT é uma variante da Transformada de Fourier usada para analisar sinais discretos, como imagens digitais.

No domínio da frequência, o DFT representa uma imagem como uma soma de funções senoidais de diferentes frequências e amplitudes. Cada componente de frequência corresponde a um padrão ou textura específica na imagem. Ao analisar os componentes de frequência de uma imagem, é possível identificar e manipular padrões ou recursos específicos.

A DFT pode ser calculada usando as seguintes etapas:

  1. Divida a imagem em pequenos blocos de pixels, normalmente 8x8 pixels.
  2. Para cada bloco, calcule a DFT para transformar o bloco do domínio espacial no domínio da frequência.
  3. Analise os componentes de frequência da imagem para identificar padrões ou recursos específicos.
  4. Manipule os componentes de frequência para modificar a imagem, por exemplo, removendo ruído ou aprimorando determinados recursos.
  5. Aplique o DFT inverso para transformar a imagem modificada de volta no domínio espacial.

O DFT fornece uma maneira de identificar e isolar padrões ou recursos específicos em uma imagem. Ele é usado em uma variedade de aplicativos de processamento de imagem, como filtragem, compactação e restauração de imagens. Pode ser computacionalmente intensivo, especialmente para imagens grandes, e requer software ou hardware especializado para funcionar com eficiência. Além disso, a DFT é uma transformação linear, o que significa que ela não pode capturar certos tipos de relações não lineares em uma imagem.

Abaixo temos um exemplo de como implementar uma DFT em Python:


    import math

    def dft(x):
        """Compute the Discrete Fourier Transform of the 1D array x"""
        n = len(x)
        X = [0] * n
        for k in range(n):
            for j in range(n):
                X[k] += x[j] * math.e ** (-2j * math.pi * k * j / n)
        return X
    

Esta implementação usa a fórmula matemática da DFT para calcular a transformada de um sinal de entrada $x$. O sinal de entrada $x$ é considerado uma matriz 1D de comprimento $n$. A saída $X$ também é uma matriz 1D de comprimento $n$, representando os coeficientes de Fourier de $x$.

Para calcular o DFT, a implementação usa um loop aninhado para iterar sobre todos os valores de frequência possíveis $k$ e todos os elementos do sinal de entrada $x$. Para cada frequência $k$, ele calcula a soma de $x[j]$ vezes o termo exponencial complexo abaixo para todos os valores de j.

$$ e^{ \frac {-2j\cdot \pi \cdot k \cdot j}{n}} $$

O termo acima representa uma onda senoidal na frequência $k$, com um deslocamento de fase determinado por $j$. A soma dessas ondas senoidais para todos os valores de $j$ fornece o coeficiente de Fourier $X[k]$ para o sinal de entrada $x$.

Observe que esta implementação não é otimizada para desempenho e pode ser lenta para grandes sinais de entrada. Existem muitas técnicas e bibliotecas disponíveis para otimizar o cálculo da DFT, como o algoritmo Fast Fourier Transform (FFT).

A Transformada Discreta do Cosseno (DCT) é uma operação matemática usada no processamento de imagens para comprimir imagens digitais, transformando-as em uma representação no domínio da frequência. A DCT é semelhante à Transformada de Fourier, mas usa apenas funções de cosseno em vez de funções de seno e cosseno.

O DCT é amplamente utilizado em algoritmos de compressão de imagem e vídeo, como JPEG e MPEG. Nesses algoritmos, o DCT é usado para reduzir a quantidade de dados necessários para representar uma imagem, transformando-a em um conjunto de coeficientes que podem ser compactados com eficiência. A DCT é uma transformação com perdas, o que significa que algumas das informações menos importantes da imagem são descartadas durante o processo de compactação.

A DCT pode ser calculada usando as seguintes etapas:

  1. Divida a imagem em pequenos blocos de pixels, normalmente 8x8 pixels.
  2. Para cada bloco, subtraia o valor médio do pixel de cada pixel no bloco para remover o componente DC.
  3. Aplique a DCT a cada bloco para calcular um conjunto de coeficientes que representam o bloco no domínio da frequência.
  4. Quantize os coeficientes dividindo-os por um fator de quantização e arredondando para o inteiro mais próximo.
  5. Comprima os coeficientes quantizados usando um algoritmo de compressão sem perdas.

Para descompactar a imagem, inverta as etapas acima aplicando o DCT inverso aos coeficientes quantizados, adicionando de volta o componente DC e remontando os blocos na imagem original.

O DCT é uma ferramenta poderosa para compactar imagens, pois pode atingir altas taxas de compactação com relativamente pouca perda na qualidade da imagem. No entanto, a quantidade de compactação que pode ser alcançada depende do nível de quantização usado, o que pode resultar em artefatos visíveis na imagem compactada. Além disso, o processo de compactação pode ser computacionalmente intensivo, especialmente para imagens grandes.

Wavelet Transform é uma técnica de análise de frequência de tempo que decompõe uma imagem em um conjunto de funções wavelet, que são então analisadas e manipuladas para extrair recursos ou padrões específicos da imagem.

Na Transformada Wavelet, a imagem é analisada usando um conjunto de funções de base chamadas wavelets, localizadas tanto no domínio do tempo quanto no domínio da frequência. Essas ondas podem ser usadas para representar uma imagem em termos de seus componentes de alta e baixa frequência. Os componentes de alta frequência correspondem aos detalhes da imagem, enquanto os componentes de baixa frequência correspondem à estrutura geral ou forma da imagem.

Diagrama de compressão/descompressão de imagens
Diagrama de compressão/descompressão de imagens. Fonte: UFP Portugal - Transformadas Wavelet

A Transformada Wavelet pode ser calculada usando as seguintes etapas:

  1. Divida a imagem em pequenos blocos de pixels, normalmente 8x8 pixels.
  2. Para cada bloco, aplique a Transformada Wavelet para decompor o bloco em um conjunto de coeficientes wavelet.
  3. Analise os coeficientes wavelet para identificar características ou padrões específicos na imagem.
  4. Manipule os coeficientes wavelet para modificar a imagem, por exemplo, removendo ruído ou aprimorando certos recursos.
  5. Aplique a Transformada Wavelet inversa para transformar a imagem modificada de volta ao domínio espacial.

A Transformada Wavelet tem várias vantagens sobre outras técnicas de processamento de imagem. Ele pode analisar uma imagem em diferentes escalas e resoluções, o que permite a extração de recursos em diferentes níveis de detalhe. Ele também pode capturar recursos locais e globais de uma imagem, tornando-o útil para uma ampla gama de aplicativos de processamento de imagem.

No entanto, a interpretação dos coeficientes wavelet pode ser complexa e difícil de entender.

23.6 - Realce.

O termo "exposição de imagem" refere-se à quantidade de luz que entra no sensor da câmera e afeta seu brilho e contraste. Técnicas de exposição de imagem são usadas para ajustar a exposição e melhorar sua aparência visual e torná-la mais atraente visualmente.

Existem várias técnicas de exposição de imagens usadas no processamento de imagens, incluindo:

  • Ajuste de brilho e contraste: Esta técnica envolve ajustar o brilho e o contraste de uma imagem para torná-la mais clara ou mais escura e para aumentar o contraste entre as áreas escuras e claras da imagem. Essa técnica é frequentemente usada para tornar uma imagem mais atraente visualmente e destacar seus detalhes.
  • Correção de gama: Esta técnica envolve ajustar o valor de gama de uma imagem para melhorar seu contraste e precisão de cor. A correção gama é freqüentemente usada para compensar as limitações das câmeras digitais, que podem levar a imagens com baixo contraste e precisão de cores.
  • Imagem de alta faixa dinâmica (HDR): a imagem HDR envolve capturar várias imagens da mesma cena em diferentes exposições e combiná-las para criar uma imagem com uma faixa mais ampla de brilho e contraste. Essa técnica é frequentemente usada para capturar cenas com uma ampla variedade de condições de iluminação, como paisagens e paisagens urbanas.
  • Mistura de exposição: esta técnica envolve a mistura de várias imagens da mesma cena em diferentes exposições para criar uma imagem com exposição equilibrada e bom contraste. Essa técnica costuma ser usada em situações em que a faixa dinâmica da cena é muito ampla para ser capturada por uma única imagem.
  • Mapeamento de tons: O mapeamento de tons envolve a compactação da faixa dinâmica de uma imagem HDR em uma faixa que pode ser exibida em um monitor padrão ou saída impressa. Essa técnica é frequentemente usada para criar imagens visualmente atraentes com aparência natural.

As técnicas de exposição de imagens são essenciais no processamento de imagens, pois podem melhorar a qualidade visual e o impacto de uma imagem. Eles podem ser usados para aprimorar o contraste, a precisão das cores e a faixa dinâmica de uma imagem e torná-la mais atraente visualmente para o visualizador. A escolha da técnica depende da aplicação específica e do efeito visual desejado.

23.7 - Filtragem e Restauração.

Filtragem e restauração são duas técnicas importantes usadas para melhorar a qualidade das imagens digitais. A filtragem de imagem envolve modificar a aparência de uma imagem alterando os valores de seus pixels, enquanto a restauração de imagem visa remover o ruído e outros artefatos de uma imagem.

A filtragem de imagens geralmente é usada para aprimorar certos recursos de uma imagem ou para remover elementos indesejados. Existem vários tipos de filtros usados no processamento de imagens, incluindo filtros espaciais, filtros de frequência e filtros morfológicos. Os filtros espaciais operam diretamente nos valores de pixel de uma imagem e são comumente usados para tarefas como suavização ou nitidez. Os filtros de frequência, por outro lado, manipulam o conteúdo de frequência de uma imagem realizando uma transformada de Fourier. Os filtros morfológicos usam operações binárias, como erosão e dilatação, para modificar a forma e a estrutura dos recursos da imagem.

A erosão é um processo que encolhe ou erode os limites dos objetos em uma imagem e é frequentemente usado para remover pequenos objetos ou isolar recursos específicos. Isso é feito pela convolução de uma imagem com um elemento estruturante, que é uma pequena matriz binária que define a forma da operação de erosão. O elemento estruturante é colocado no topo de cada pixel da imagem, e se todos os pixels no elemento estruturante se sobrepõem aos pixels correspondentes na imagem, o pixel central recebe um valor de 1. Caso contrário, o pixel central recebe um valor valor de 0. Esse processo resulta na remoção de objetos pequenos e na suavização dos limites de objetos maiores.

A dilatação, por outro lado, é um processo que expande ou dilata os limites dos objetos em uma imagem e é frequentemente usado para preencher lacunas ou unir objetos próximos. Como a erosão, a dilatação é realizada pela convolução de uma imagem com um elemento estruturante. No entanto, neste caso, o pixel central recebe um valor de 1 se algum dos pixels no elemento estruturante se sobrepõe aos pixels correspondentes na imagem. Esse processo resulta na expansão dos limites do objeto e no preenchimento de lacunas entre objetos próximos.

Tanto a erosão quanto a dilatação podem ser usadas em combinação para realizar operações mais complexas, como abertura e fechamento. A abertura é uma operação morfológica que envolve a aplicação sequencial de erosão e dilatação, e é frequentemente usada para remover pequenos objetos ou isolar características específicas. O fechamento é uma operação morfológica que envolve a aplicação sequencial de dilatação e erosão, e é frequentemente usada para preencher lacunas ou unir objetos próximos.

A restauração de imagem se preocupa com a remoção de ruído e outros artefatos indesejados que podem estar presentes em uma imagem. Existem várias abordagens para restauração de imagens, incluindo métodos de domínio espacial e domínio de frequência. Os métodos de domínio espacial envolvem a filtragem de uma imagem usando um kernel ou um conjunto de kernels, como o filtro de média ou mediana. Os métodos de domínio de frequência são baseados na ideia de que o ruído pode ser modelado como conteúdo de alta frequência na imagem e pode ser removido filtrando a imagem no domínio de frequência.

23.8 - Reconstrução Tomográfica de Imagens.

Uma das aplicações mais importantes do processamento digital de imagens é na área da medicina. A imagiologia médica é um aspecto crucial dos cuidados de saúde modernos, permitindo que médicos e profissionais de saúde diagnostiquem e tratem uma série de condições médicas. Entre as várias técnicas de imagem usadas em imagens médicas, a tomografia computadorizada (TC) e a tomografia axial computadorizada (CAT) são algumas das mais amplamente utilizadas e geralmente dependem de técnicas de processamento de imagem para melhorar a precisão do diagnóstico.

CT Scan
Máquina de tomografia computadorizada. Fonte: National Cancer Institute - https://www.cancer.gov/

A tomografia computadorizada e a tomografia computadorizada usam raios-X para criar imagens detalhadas das estruturas internas do corpo. Essas imagens são criadas tirando várias imagens de raios X de diferentes ângulos e usando um computador para reconstruir uma imagem tridimensional do corpo. Esse processo de reconstrução envolve técnicas de processamento de imagem que permitem ao computador analisar e aprimorar as imagens de raios X para melhorar a clareza e a precisão da imagem final.

Uma das principais técnicas de processamento de imagens usadas em tomografias computadorizadas e tomografias computadorizadas é a segmentação de imagens. Segmentação de imagem é o processo de dividir uma imagem em vários segmentos ou regiões com base nas propriedades da imagem. Em imagens médicas, a segmentação de imagem é frequentemente usada para isolar órgãos ou estruturas específicas do corpo, o que pode ajudar os médicos a visualizar e diagnosticar melhor as condições médicas.

Outra importante técnica de processamento de imagem usada em tomografias computadorizadas e tomografias computadorizadas é o registro de imagens. O registro de imagem envolve o alinhamento e a sobreposição de várias imagens da mesma estrutura, tiradas em diferentes momentos ou de diferentes ângulos, para criar uma imagem composta. Essa técnica pode ajudar os médicos a rastrear as mudanças no corpo ao longo do tempo e monitorar a progressão das condições médicas.

Além dessas técnicas, outras técnicas de processamento de imagem usadas em tomografias e tomografias incluem redução de ruído, aprimoramento de imagem e reconstrução de imagem. Essas técnicas permitem que médicos e profissionais médicos visualizem as estruturas internas do corpo com maior clareza e precisão, levando a diagnósticos mais precisos e melhores resultados para os pacientes.

Uma das principais técnicas matemáticas usadas na TC é chamada retroprojeção filtrada. Essa técnica envolve passar as imagens de raios X por um filtro que aprimora certas características da imagem enquanto suprime o ruído e os artefatos. As imagens filtradas são retroprojetadas ou reconstruídas matematicamente para criar uma imagem tridimensional das estruturas internas do corpo.

Outra importante técnica matemática usada em TC é chamada de transformada de Radon. A transformada Radon é usada para converter uma imagem bidimensional de raios X em um conjunto de integrais de linha, que representam a atenuação dos raios X ao longo de uma determinada linha através do corpo. Essas integrais de linha são usadas para reconstruir uma imagem tridimensional do corpo usando um processo conhecido como transformada inversa de Radon.

Além da retroprojeção filtrada e da transformada de Radon, outras técnicas matemáticas usadas na TC incluem a transformada de Fourier, que é usada para analisar o conteúdo de frequência das imagens de raios-X, e técnicas estatísticas, que são usadas para estimar a incerteza e o ruído na imagem reconstruída.

A modelagem matemática também é usada na TC para simular o processo de imagem de raios X e otimizar os parâmetros de imagem, como a dose de raios X, o tempo de aquisição da imagem e a geometria da imagem. Isso permite que os profissionais médicos obtenham imagens de alta qualidade, minimizando a exposição do paciente aos raios-X.

23.9 - Codificação.

Abaixo está um exemplo de como aumentar o contraste de uma imagem, pixel por pixel, usando PHP:

                    
// Check if an image was uploaded
if(isset($_FILES['image'])) {
    
    // Define the path to save the image
    $target_dir = "uploads/";
    $target_file = $target_dir . basename($_FILES['image']['name']);
    
    // Move the uploaded image to the defined path
    move_uploaded_file($_FILES['image']['tmp_name'], $target_file);
    
    // Load the image
    $image = imagecreatefromjpeg($target_file);
    
    // Get the width and height of the image
    $width = imagesx($image);
    $height = imagesy($image);
    
    // Define the contrast factor
    $contrast = 1.5;
    
    // Loop through each pixel of the image
    for($x = 0; $x < $width; $x++) {
        for($y = 0; $y < $height; $y++) {
            
            // Get the color of the pixel
            $rgb = imagecolorat($image, $x, $y);
            $r = ($rgb >> 16) & 0xFF;
            $g = ($rgb >> 8) & 0xFF;
            $b = $rgb & 0xFF;
            
            // Apply the contrast factor to each color component
            $r = round(($r - 128) * $contrast + 128);
            $g = round(($g - 128) * $contrast + 128);
            $b = round(($b - 128) * $contrast + 128);
            
            // Clamp the color values to the valid range of 0-255
            $r = max(0, min(255, $r));
            $g = max(0, min(255, $g));
            $b = max(0, min(255, $b));
            
            // Set the color of the pixel
            $color = imagecolorallocate($image, $r, $g, $b);
            imagesetpixel($image, $x, $y, $color);
        }
    }
    
    // Define a new name for the image with increased contrast
    $new_file = "uploads/contrast_" . basename($_FILES['image']['name']);
    
    // Save the image with increased contrast
    imagejpeg($image, $new_file);
    
    // Free up memory used by the image
    imagedestroy($image);
    
    // Output a message to indicate success
    echo "Image successfully processed.";
    
} else {
    // Output an error message if no image was uploaded
    echo "No image uploaded.";
}

                    
                
23.10 - Análise de Imagens e Noções de Visão Computacional.

A visão computacional é um subcampo do processamento de imagens que se concentra no desenvolvimento de algoritmos e técnicas para processar, analisar e compreender dados visuais, como imagens e vídeos. A visão computacional visa replicar a capacidade do sistema visual humano de perceber e interpretar informações visuais e possui inúmeras aplicações em áreas como robótica, veículos autônomos e imagens médicas.

As técnicas envolvem a aplicação de modelos matemáticos e algoritmos para analisar os dados da imagem, extrair recursos e fazer inferências sobre a cena ou objeto subjacente. Algumas das principais técnicas usadas na visão computacional incluem:

  • Segmentação de imagem: esta técnica envolve a divisão de uma imagem em vários segmentos ou regiões com base em suas características visuais, como cor, textura ou forma. A segmentação de imagem é frequentemente usada para extrair objetos ou regiões de interesse de uma imagem.
  • Reconhecimento de objetos: O reconhecimento de objetos é o processo de identificação e classificação de objetos em uma imagem com base em suas características visuais. Algoritmos de reconhecimento de objetos são usados em uma ampla gama de aplicações, como direção autônoma, sistemas de segurança e imagens médicas.
  • Fluxo óptico: O fluxo óptico é uma técnica usada para rastrear o movimento de objetos em uma imagem ou sequência de vídeo. Envolve a análise das mudanças nas intensidades dos pixels ao longo do tempo para inferir o movimento dos objetos na cena.
  • Deep Learning (Aprendizado profundo): Deep learning é um subconjunto do aprendizado de máquina que envolve o treinamento de redes neurais artificiais para reconhecer padrões e recursos em dados de imagem. As técnicas de aprendizado profundo revolucionaram a visão computacional, permitindo processamento e análise de imagens mais precisos e eficientes.

A visão computacional tem inúmeras aplicações em vários campos, incluindo robótica, saúde e entretenimento. Por exemplo, na robótica, a visão computacional é usada para permitir que os robôs naveguem e interajam com seu ambiente, enquanto na área da saúde é usada para análise e diagnóstico de imagens médicas. No entretenimento, a visão computacional é usada para criar efeitos especiais realistas em filmes e videogames.

23.11 - Reconhecimento de Padrões.

O processo de reconhecimento de padrões envolve várias etapas. A primeira etapa é a aquisição da imagem, onde uma imagem é capturada usando uma câmera ou outro dispositivo de imagem. Depois que a imagem é adquirida, ela é pré-processada para remover o ruído e melhorar sua qualidade. O pré-processamento pode envolver operações como filtragem, limiarização e segmentação de imagens.

Após o pré-processamento, a extração de recursos é realizada para identificar objetos relevantes na imagem. Esses recursos podem incluir arestas, cantos, textura, cor e forma. A extração de recursos envolve a aplicação de algoritmos matemáticos aos dados da imagem para identificar esses recursos e representá-los de maneira significativa.

Uma vez que os recursos foram extraídos, a classificação do padrão é realizada para classificar a imagem em uma ou mais categorias. A classificação envolve a comparação dos recursos extraídos com um conjunto de recursos predefinidos, ou um modelo, para determinar a categoria à qual a imagem pertence.

O reconhecimento de padrões pode ser supervisionado ou não supervisionado. No reconhecimento de padrões supervisionado, o modelo é treinado em um conjunto de imagens rotuladas, onde cada imagem é associada a uma categoria conhecida. O modelo então usa esses dados de treinamento para classificar novas imagens. No reconhecimento de padrão não supervisionado, o modelo aprende os padrões e estruturas dentro da imagem sem receber nenhum conhecimento prévio sobre as categorias ou rótulos.

Existem vários métodos usados para reconhecimento de padrões em imagens e a sua escolha depende da aplicação específica e da natureza dos dados da imagem:

  • Redes neurais: São métodos de aprendizado de máquina que pode ser usado para reconhecimento de padrões em imagens. Eles envolvem o treinamento de uma rede de nós ou neurônios interconectados para reconhecer padrões nos dados da imagem. As redes neurais podem ser usadas para aprendizado supervisionado e não supervisionado e são particularmente eficazes para classificação de imagens e reconhecimento de objetos.
  • Máquina de vetores de Suporte (Support Vector Machines - SVMs): SVMs são algoritmos populares para reconhecimento de padrões em imagens. Eles envolvem encontrar um hiperplano que separe os dados da imagem em diferentes classes. Os SVMs são particularmente úteis para tarefas de classificação e são frequentemente usados em aplicações de imagens médicas.
  • Árvores de decisão: Envolvem a criação de uma estrutura semelhante a uma árvore que representa um conjunto de decisões com base nos recursos da imagem. As árvores de decisão são particularmente úteis para tarefas de classificação e são frequentemente usadas em sensoriamento remoto e análise de imagens de satélite.
  • Redes neurais convolucionais (CNNs): São um tipo de rede neural particularmente eficazes para tarefas de reconhecimento de imagem e envolvem o uso de várias camadas de operações de convolução e agrupamento para extrair recursos dos dados da imagem.
  • Análise de Componentes Principais (PCA): PCA é uma técnica estatística que envolve a redução da dimensionalidade dos dados da imagem, identificando as características mais significativas e projetando os dados da imagem em um espaço de menor dimensão. O PCA é frequentemente usado em aplicativos de reconhecimento facial.
  • K-ésimo vizinho mais próximo (K-Nearest Neighbors - KNN): KNN é um algoritmo simples utilizado para encontrar os k vizinhos mais próximos de uma determinada imagem no espaço de recursos e usar seus rótulos para classificá-la. O KNN é frequentemente usado em aplicações de sensoriamento remoto e recuperação de imagens. O espaço de recursos pode ser visualizado como um espaço multidimensional, onde cada ponto representa uma imagem e as coordenadas do ponto correspondem aos valores dos recursos da imagem. O algoritmo KNN então mede a distância entre uma determinada imagem e as outras imagens no espaço de recursos e seleciona os k vizinhos mais próximos com base nessa distância.
Reconhecimento Padrão
Reconhecimento de padrão para veículos autônomos. Fonte: University of Freiburg - http://panoptic.cs.uni-freiburg.de/