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.
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 |
| 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:
- Parte Teórica, localizada na abertura de cada capítulo, contendo os conceitos apresentados e exemplos de código executáveis;
- 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.
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.
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.
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çãoAo 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.knn0domorph.py, mostrando o código e comentando cada etapa de forma didática. Além disso, explique as diferenças entremm.knn0()emm.knn().
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:
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:
- Extração (
make eps): gera um HTML interativo independente por EP, com enunciado, exemplos e simulador, emgen/book/eps/<versao>/. Veja um exemplo em: https://fzampirolli.github.io/pdi-vc/eps/py.pt/EP01_01.html - 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, emgen/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.
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≥,×). 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
Acesse a versão Moodle do EP desejado:
https://fzampirolli.github.io/pdi-vc/eps/py.pt_moodle/EPXX_YY.htmlCopie o código-fonte completo da página (
Ctrl+U→Ctrl+A→Ctrl+C).No Moodle, crie a atividade VPL, acesse o editor HTML, cole o conteúdo (
Ctrl+V) e salve.Importe os arquivos
.casesda pastaall/capXX/casos/nas configurações de testes do VPL.
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 comShift + Enterou 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.
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.