Plataforma
Sciva
O desenvolvimento da plataforma SCIVA
para processamento de imagens foi motivado pelas seguintes questões:
-
Os softwares de processamento de imagens
que se encontram no mercado são fechados. Por isso, há grande
dificuldade em adicionar funcionalidade ao software para adaptá-lo
às necessidades de um problema específico de processamento
de imagens científico.
-
Alguns desses softwares oferecem recursos
para atender à funcionalidade exigida pelo problema, mas não
são suficientemente eficientes. Há problemas que precisam
ser atendidos em tempo real.
-
No meio científico, são
encontrados softwares de processamento de imagens "open source", mas são
pacotes muito grandes, com muita funcionalidade desnecessária para
se tratar um dado problema específico e exigem um considerável
esforço para serem compreendidos. Para se adicionar funcionalidade
num software desse tipo, muitas vezes o esforço é tão
grande que se torna mais prático construí-lo sem nenhuma
ferramenta de apoio.
Objetivos
1. Abrir e salvar arquivos
bitmap de qualquer formato.
2. Criar novos arquivos;
3. Transformar dados desses arquivos
em "pacotes" que sejam facilmente manipulados pelos algoritmos de processamento
de imagens;
4. Facilitar o acoplamento de novos
algoritmos ao sistema;
5. Fazer aquisição
de imagens através de uma câmera.
Justificativas
As seguintes considerações
motivaram os objetivos mencionados no tópico anterior:
-
Devido à multiplicidade de tipos
de imagem (colorida, monocromática ou em níveis de cinza)
e à definicação da imagem que se almeja, existem vários
tipos de formato de bitmaps. Desejava-se ter um software que fosse capaz
de manipular qualquer formato de arquivo bitmap.
-
Muitos algortimos de processamento de
imagens dão como resultado uma nova imagem. E pode-se querer guardá-la
num disco, por exemplo, para posterior análise. Por isso, é
interessante o recurso de se criar novos arquivos a partir da aplicação.
-
Novamente pela variedade de formatos
de arquivos bitmap, muitas vezes é necessário "sujar" algoritmos
de processamento de imagens com desvios condicionais para tratar o tipo
da imagem. Para se desviar desse problema, a implementação
de um tipo abstrato de dados que escondesse detalhes de formato do arquivo
seria muito útil.
-
A funcionalidade de se capturar uma
imagem dentro do próprio software de tratamento da imagem pode poupar
esforços: evita-se ter de capturar uma imagem através de
um software e tratá-la em outro.
Metodologia
Etapa 1 - Treinamento
O programador recebeu treinamento
no ambiente de desenvolvimento Visual Studio, na linguagem de interface
gráfica Windows SDK e em Visual C++. Além disso, também
houve treinamento em MFC (biblioteca de classes para interface gráfica).
Etapa 2 - subsistema de entrada e saída de arquivos bitmap
Nessa etapa foi construído
o esqueleto da interface: o módulo principal, a janela principal
do sistema e seu menu. Esse módulo é responsável por
fazer a criação da classe da aplicação usando
o Windows SDK (ferramenta para construção de programas Windows)
e também por atender às mensagens enviadas à janela
principal.
Etapa 3 - subsistema de entrada e saída (E/S) de arquivos-imagem
O
desenvolvimento do subsistema de E/S teve as seguintes tarefas:
-
Carregar qualquer tipo de arquivo bitmap;
-
Exibir imagens na janela Display (janela
grande para visualização da imagem aberta);
-
Criar novos arquivos bitmap;
-
Mecanismo de copiar imagens para área
de transferência.
Etapa 4 - subsistema de gerenciamento de imagem
Seu desenvolvimento compôs-se
das seguintes tarefas:
-
Modelar uma classe Imagem que pudesse
"fabricar" objetos com propriedades relevantes obtidas do arquivo bitmap,
bem como os próprios bits que representam a imagem. Essa classe,
além de encapsular as propriedades da imagem, também serve
de módulo para agrupar a funcionalidade de se manipular imagens
no sistema SCIVA. Isso facilita a manipulação e localização
de características da imagem pelo programador.
-
Criar uma lista de imagens para que
as imagens fossem colocadas em fila (ordem) e para que fosse possível
se ter tantas imagens abertas no sistema quanto a memória suportar.
-
Implementar uma galeria de imagens:
trata-se de uma janela Windows que exibe todas as imagens abertas pelo
usuário de forma miniaturizada. O usuário pode então
observar quais imagens estão abertas na plataforma SCIVA e jogá-las
numa janela maior para melhor visualização, ao dar um duplo
clique sobre a miniatura.
-
Possibilitar a localização
de uma imagem também pelo seu nome. Esse objetivo foi alcançado
através da implementação de uma janela Windows com
uma lista de seleção que permite abrir a imagem escolhida
numa janela grande ou apagá-la.
Etapa
5 - subsistema de empacotamento dos bits das imagens
A produção
do subsistema de empacotamento de bits das imagens foi um dos maiores desafios
do projeto SCIVA. Nesse subsistema se intencionava gerar mecanismos que
encapsulassem as diferenças entre os vários tipos de imagem.
Desejava-se passar para uma função de processamento de imagem
apenas o pacote de bits da imagem, sem que essa função tivesse
que fazer tratamento diferenciado de acordo com o formato desses bits.
Esses objetivos foram alcançados
por meio da abstração da "Coleção de Pixels",
que motivou o desenvolvimento das seguintes classes:
-
ColecaoPels ("Coleção
de Pixels") - esta classe implementa uma interface comum a todas as coleções;
-
ColecaoPelsMono ("Coleção
de Pixels Monocromática") - nela, os bits da imagem são guardados
de forma econômica e o acesso é também feito de forma
muito rápida. É muito útil para algoritmos de tempo
real;
-
ColecaoPelsByte ("Coleção
de Pixels" com valores de zero a 255) - são eles os pixels de imagens
coloridas de 256 cores ou imagens em níveis de cinza. É duas
vezes mais econômica quanto ao espaço ocupado quando comparada
aos recursos alocados pelo Windows para armazenamento de imagens em níveis
de cinza. No caso de imagens coloridas, são usadas três coleções
desse tipo: uma para representar o vermelho, outra para o verde e outra
para o azul (padrão RGB);
-
ColecaoPelsRegiao - agrega uma ColecaoPels
e faz a conversão de coordenadas dessa coleção de
modo que essa região seja tratada como se fosse uma coleção
completa. Dessa forma, evita exaustivos cálculos para acessar cada
pixel dessa região. Exemplo:

Uma das utilidades do software é agregar algoritmos
de detecção de defeitos em bocais de garrafas. A ColecaoPelsRegiao
é ideal para esse algoritmo, pois uma vez encontrada a localização
do bocal, pode-se criar um objeto da ColecaoPelsRegiao e tratá-lo
como se fosse uma ColecaoPels apenas. Assim evita-se transformações
de coordenadas para acessar cada pixel dessa região.
A plataforma SCIVA está sendo usada também
para um projeto de monitoramento de tráfego que tem parceria com
a Secretaria de Trânsito. Já foram embutidos algoritmos para
análise dos caracteres da placa.