Prefácio

Este livro constitui uma obra em permanente atualização nas áreas de Processamento Digital de Imagens (PDI) e Visão Computacional (VC), concebida como material didático interativo para cursos de graduação e pós-graduação em Computação, Engenharia e áreas afins.

ImportanteDestaque

A obra fundamenta-se na metodologia descrita em Zampirolli et al. (2025) — extensão de Zampirolli et al. (2024), trabalho premiado na trilha Recursos e Ambientes Educacionais da EduComp 2024. O conteúdo integra a biblioteca morph.py, desenvolvida pelo autor.

Este não é um livro estático. Seu conteúdo evolui continuamente à medida que exemplos são aprimorados, novas seções são incorporadas e as abordagens pedagógicas são refinadas com base na experiência de uso e no retorno de estudantes e docentes. Dessa forma, a obra é tratada como um projeto em constante evolução, buscando acompanhar tanto os avanços tecnológicos quanto as melhores práticas de ensino em PDI e VC.

Como este livro é produzido

O conteúdo deste livro é desenvolvido em Quarto e armazenado na pasta all do repositório github.com/fzampirolli/pdi-vc. A partir de um único código-fonte, o livro é automaticamente gerado e publicado em diferentes formatos:

Formato Descrição
HTML Versão para web, com simuladores interativos e navegação entre capítulos: fzampirolli.github.io/pdi-vc
PDF Versão adequada para impressão ou leitura offline: livro.pt.py.pdf
Notebooks (.ipynb) Compatíveis com Jupyter e Google Colab, permitindo executar, modificar e experimentar os exemplos de código e os Exercícios de Programação (EPs). Um filtro personalizado mantém referências cruzadas, numeração de figuras e tabelas, além de formatar automaticamente as citações conforme o padrão ABNT.

Cada capítulo disponibiliza dois botões Executar Colab (Figura 1), que direcionam para ambientes complementares:

  1. Parte Teórica, localizada na abertura de cada capítulo, contendo os conceitos apresentados e exemplos de código executáveis;
  2. Parte Prática, na seção Parte Prática com Exercícios de Programação, dedicada aos Exercícios de Programação (EPs) e aos seus simuladores interativos.
Figura 1: Botão clicável Executar Colab, disponível no início das partes Teórica e Prática de cada capítulo, permitindo a execução interativa dos exemplos e exercícios.

A geração dos notebooks é totalmente automatizada pelo script gerar_notebooks_alunos.py, que adapta o conteúdo para ambientes interativos, permitindo sua execução sem a necessidade de instalação do Quarto.

Idiomas e Conversão de Código

O núcleo de referência é escrito em Português com exemplos em Python. Versões em outros idiomas e linguagens de programação são geradas via APIs de IA, por meio de um fluxo automatizado que realiza a tradução textual e a conversão de sintaxe do código.

NotaNota

As versões traduzidas via IA servem como ponto de partida e podem conter imprecisões; recomenda-se revisão antes da aplicação em sala de aula.

Uso de ferramentas de Inteligência Artificial

A elaboração deste livro contou com o apoio de ferramentas de Inteligência Artificial (IA) para aprimorar a qualidade do texto, dos exemplos de código e dos materiais de apoio. Ao longo do desenvolvimento, diferentes assistentes de IA, como DeepSeek, Gemini, ChatGPT e Claude, foram utilizados de forma iterativa para auxiliar em atividades como:

  • aprimoramento da clareza, da precisão e da fluidez das explicações;
  • identificação e correção de erros de sintaxe, lógica e digitação em exemplos de código;
  • sugestão de melhorias na organização, na estrutura e na apresentação do conteúdo.

Além disso, algumas ilustrações foram geradas com o auxílio do Gemini, com o objetivo de facilitar a visualização de conceitos abstratos e complementar as explicações apresentadas ao longo do texto.

Embora essas ferramentas tenham contribuído significativamente para o processo de produção, a seleção, a validação técnica, a organização e a responsabilidade pelo conteúdo final são inteiramente do autor.

Mais do que utilizar IA para gerar conteúdo, o maior desafio consiste em selecionar, verificar, adaptar e organizar esse material de forma pedagogicamente consistente. Nesse contexto, merece destaque o conjunto de simuladores interativos desenvolvidos em JavaScript e incorporados às versões HTML e IPYNB do livro, os quais proporcionam experimentação prática e contribuem para a consolidação dos conceitos apresentados.

A biblioteca morph.py

A biblioteca morph.py (Zampirolli et al., 2025) acompanha toda a obra como uma ferramenta de apoio ao ensino. Seu objetivo não é substituir bibliotecas consolidadas, como OpenCV, scikit-image, NumPy ou Matplotlib, nem competir com elas em desempenho ou abrangência. Em vez disso, procura tornar transparentes os algoritmos fundamentais de Processamento Digital de Imagens e Visão Computacional (PDI-VC), permitindo que o estudante compreenda sua implementação, modifique o código e desenvolva novas funcionalidades.

Sempre que possível, a biblioteca oferece duas versões para um mesmo algoritmo: uma implementação didática, escrita passo a passo para refletir diretamente as definições matemáticas apresentadas no livro, e outra implementação otimizada, baseada em bibliotecas especializadas para aplicações práticas.

NotaHerança Técnica

A estrutura da morph.py tem como base ferramentas de Morfologia Matemática desenvolvidas no Brasil, como MMachLib (Lotufo et al., 1997) e MMach (Barrera et al., 1998), além da mmorph, utilizada na obra de Dougherty; Lotufo (2003). Essas bibliotecas serviram de referência para o ensino da área durante décadas.

Essa filosofia pode ser observada, por exemplo, nos operadores morfológicos de dilatação:

  • mm.dil: implementação otimizada, indicada para aplicações práticas;
  • mm.dil0: implementação didática da dilatação para elementos estruturantes planares, seguindo diretamente a definição clássica da Morfologia Matemática;
  • mm.dil1: implementação didática da dilatação para funções estruturantes (kernels não planares), seguindo rigorosamente sua formulação matemática.

A biblioteca também oferece funções para leitura, exibição, conversão de cores, filtragem e morfologia matemática por meio de uma interface simples:

from morph import mm

img = mm.gray(mm.read("lena.jpg"))  # leitura e conversão para níveis de cinza
grad = mm.gradm(img)                # gradiente morfológico
mm.show(grad)                       # exibição

Ao longo do livro, novos métodos são introduzidos na biblioteca para simplificar a realização dos Exercícios de Programação (EPs). Entre eles estão mm.readTrain() e mm.readTest(), que automatizam a leitura das bases de treinamento e teste utilizadas nos capítulos dedicados ao reconhecimento de padrões.

Além disso, todos os projetos do Gemini Notebook incluem o arquivo morph.py, permitindo consultar e discutir diretamente a implementação dos algoritmos apresentados no livro. Dessa forma, o estudante pode utilizar o próprio Gemini Notebook como um assistente de estudos, fazendo perguntas como:

Explique como foi implementado o algoritmo mm.knn0 do morph.py, mostrando o código e comentando cada etapa de forma didática. Além disso, explique as diferenças entre mm.knn0() e mm.knn().

ImportanteImplementações didáticas e implementações otimizadas

Em vários capítulos, um mesmo algoritmo é apresentado em duas versões. As funções com sufixo 0, 1, etc. (por exemplo, mm.knn0(), mm.dil0() e mm.dil1()) são implementações didáticas, desenvolvidas para facilitar o entendimento dos algoritmos. Já as funções sem sufixo (como mm.knn() e mm.dil()) utilizam implementações otimizadas, frequentemente baseadas em bibliotecas especializadas, sendo mais adequadas para aplicações práticas.

Nas atividades avaliadas pelo VPL do Moodle, bibliotecas como scikit-learn e, em alguns casos, scikit-image, podem não ser utilizadas devido às limitações de memória do ambiente de execução. Por esse motivo, os Exercícios de Programação (EPs) empregam preferencialmente as implementações didáticas da morph.py, que produzem os mesmos resultados, embora com menor desempenho computacional. Essa restrição não existe quando os programas são executados localmente, por exemplo, no VS Code, Jupyter Notebook ou Google Colab.

O código-fonte da biblioteca está disponível em:

https://github.com/fzampirolli/pdi-vc/tree/master/morph

Exercícios de Programação (EPs) e Validação Automática

Cada unidade do livro inclui Exercícios de Programação (EPs) práticos e de complexidade crescente, projetados para consolidar os conceitos apresentados ao longo do capítulo. Cada EP é acompanhado por um simulador interativo, disponível nas versões HTML e IPYNB, que permite ao estudante manipular parâmetros, visualizar o comportamento dos algoritmos e desenvolver uma compreensão intuitiva do problema antes de iniciar sua implementação. Dessa forma, o processo de aprendizagem combina experimentação, programação e validação automática.

A validação das soluções é feita localmente pela classe TestSuite (testsuite.py), que compara a saída do programa com os arquivos de casos de teste (.cases):

TestSuite("EP01_01.py").run()

O sistema suporta múltiplas linguagens (Python, Java, C++, C, JavaScript e R) e pode ser integrado diretamente ao Moodle. Para o passo a passo completo de integração com o VPL do Moodle, consulte o Guia do Professor: Publicação de EPs no Moodle.

Código aberto

O projeto é regido por princípios de código aberto. O repositório público reúne o texto, os códigos, as imagens e os scripts: github.com/fzampirolli/pdi-vc

Cada versão do livro é arquivada permanentemente no Zenodo com um DOI citable. Para citar este material em trabalhos acadêmicos:

ZAMPIROLLI, Francisco de Assis. PDI+VC — Processamento Digital de Imagens e Visão Computacional. UFABC, 2026. DOI: 10.5281/zenodo.20784606


Guia do Professor: Publicação de EPs no Moodle

Esta seção destina-se a docentes que desejam integrar os Exercícios de Programação (EPs) às atividades VPL (Virtual Programming Lab) do Moodle.

Integração com o Moodle (VPL)

Os EPs dos notebooks podem ser convertidos em atividades VPL no Moodle. O script ep_tools.py (executado via make build) automatiza a exportação dos EPs do final de cada capítulo em duas etapas:

  1. Extração (make eps): gera um HTML interativo independente por EP, com enunciado, exemplos e simulador, em gen/book/eps/<versao>/. Veja um exemplo em: https://fzampirolli.github.io/pdi-vc/eps/py.pt/EP01_01.html
  2. Conversão (make moodle): transforma o HTML em um fragmento autocontido, sem dependência de CSS externo, pronto para ser colado no editor do Moodle, em gen/book/eps/<versao>_moodle/. Veja um exemplo em: https://fzampirolli.github.io/pdi-vc/eps/py.pt_moodle/EP01_01.html

Ao publicar com make publish, essas duas versões de cada EP ficam disponíveis nos links indicados. O professor pode combinar as duas estratégias: colar a versão Moodle no editor VPL (com simulador funcional) e incluir no enunciado um link para a versão completa, onde as fórmulas são renderizadas corretamente pelo MathJax.

AvisoRevisão obrigatória antes de publicar no Moodle

Embora automatizada, a conversão exige revisão do professor em razão das limitações do editor TinyMCE/HTML Purifier do Moodle:

  • Fórmulas matemáticas — O TinyMCE descarta barras invertidas (\), corrompendo equações LaTeX. Por isso, a versão Moodle converte fórmulas simples para HTML puro (entidades como &ge;, &times;). Fórmulas complexas (\begin{cases}, matrizes, integrais) podem sair incompletas — revise e, se necessário, reescreva-as em texto ou indique a versão completa via link.
  • Figuras externas — Imagens complementares devem ser inseridas manualmente na atividade VPL.
  • Simuladores — Funcionam perfeitamente desde que utilizem JavaScript padrão com estilos inline e manipulação direta do DOM (getElementById). Atenção: se incluir fórmulas em LaTeX que contenham o caractere \ no Moodle, os simuladores podem parar de funcionar.

Como Publicar no Moodle

  1. Acesse a versão Moodle do EP desejado:

    https://fzampirolli.github.io/pdi-vc/eps/py.pt_moodle/EPXX_YY.html
  2. Copie o código-fonte completo da página (Ctrl+UCtrl+ACtrl+C).

  3. No Moodle, crie a atividade VPL, acesse o editor HTML, cole o conteúdo (Ctrl+V) e salve.

  4. Importe os arquivos .cases da pasta all/capXX/casos/ nas configurações de testes do VPL.

DicaReaproveitamento dos Casos de Teste

Os arquivos .cases são compatíveis com o VPL, permitindo usar o mesmo conjunto de testes tanto no desenvolvimento local quanto na correção automatizada no Moodle.


Antes de começar: Notebooks em Python

O conceito de Literate Programming (Programação Literária), proposto por Donald Knuth (Knuth, 1984), fundamenta a estrutura deste material. A lógica inverte o paradigma tradicional: o programa é escrito para a leitura humana, assemelhando-se a um ensaio, enquanto o código é extraído separadamente para execução computacional.

O conteúdo é estruturado em notebooks — documentos que intercalam células de texto (em Markdown) e células de código (em Python).

  • Execução: células de código são identificadas por [ ]. A execução pode ser realizada com Shift + Enter ou pelo botão ▶️ da interface.
  • Ambientes: os notebooks podem ser executados localmente, por meio do Jupyter ou do Visual Studio Code (VS Code), bem como em ambientes de nuvem, como o Google Colab.
DicaNota sobre o formato

Em ambientes interativos, o código pode ser modificado e executado. Nas versões estáticas (HTML ou PDF), os blocos de código têm finalidade de leitura e referência, sem prejuízo à integridade das explicações.