Desenvolvimento Java Processamento digital de imagens Vídeo aulas

Carregando uma imagem em um objeto do tipo Mat – PDI 02

Processamento digital de imagens
O post Carregando uma imagem em um objeto do tipo Mat é uma parte do curso Processamento digital de imagens utilizando a biblioteca OpenCV. O objetivo deste curso é trabalhar com processamento digital de imagens utilizando a linguagem Java juntamente com a biblioteca OpenCV abordado desde a configuração do OpenCv até a utilização dos recursos mais avançados da biblioteca, como por exemplo a detecção facial. O objetivo final é desenvolver um projeto que contenha todos os tópicos abordados sobre o tema Processamento digital de imagens.

Caso não tenha visto a ultima aula acesse  Configurando o OpenCV 3.0 no NetBeans – PDI 01

Carregando uma imagem em um objeto do tipo Mat – PDI 02

O post cria o menu inicial do projeto, as variáveis que serão utilizadas para representar a imagem que será processada digitalmente e inicia o desenvolvimento do método responsável por exibir a imagem na tela.

Carregando uma imagem em um objeto do tipo Mat – PDI 02

Fundamentação teórica OpenCV

Estrutura do Objeto Mat

Mat é basicamente uma classe com duas partes de dados: o cabeçalho matriz (contendo informação, tais como o tamanho da matriz, o método utilizado para o armazenamento, em que o endereço é a matriz armazenada, e assim por diante) e um ponteiro para a matriz contendo a os valores de pixel (de tomar qualquer dimensionalidade dependendo do método escolhido para o armazenamento). O tamanho do cabeçalho matriz é constante, no entanto, o tamanho da matriz em si pode variar de imagem para a imagem e, geralmente, é maior por ordens de grandeza.
Este é sobre como você armazenar os valores de pixel. Você pode selecionar o espaço de cores eo tipo de dados usado. O espaço de cor refere-se à forma como combinamos componentes de cor, de modo a codificar uma determinada cor. O mais simples é a escala de cinza, onde as cores à nossa disposição são preto e branco. A combinação destes permite-nos criar muitos tons de cinza.Obervação: Em vídeos futuros vamos trabalhar ativamente com objetos do tipo Mat e vamos detalhar os divertos tipos de dados utilizados para representar imagens em tons de cinza e coloridas (CvTypes).

Armazenamento dos dados (pixels) em Mat

Para armazenar os pixels em mat é necessário definir o espaço de cor e o tipo de dado para representar esse espaço de cor, como exemplo, representar uma imagem coloria no espaço de cor RGB.
O espaço de cor refere-se à forma como combinamos componentes de cor, de modo a codificar uma determinada cor. O mais simples é a escala de cinza, onde as cores à nossa disposição são preto e branco. A combinação destes permite-nos criar muitos tons de cinza. Para formas coloridas que temos muito mais métodos para escolher. Cada uma delas divide-os em três ou quatro componentes básicos e podemos usar a combinação destes para criar as outras. O mais popular é RGB, principalmente porque esta é também a forma como nosso olho aumenta cores. Suas cores de fundo são vermelho, verde e azul. Para codificar a transparência de uma cor, por vezes, um quarto elemento: alfa (A) é adicionado.
Há, no entanto existe muitos outros sistemas de cores, cada um com suas próprias vantagens:
  • RGB é o mais comum como os nossos olhos usar algo semelhante, no entanto, tenha em mente que o sistema de exibição padrão OpenCV compõe as cores utilizando o espaço de cor BGR. (azul,verde,vermelho).
  • O HSV e HLS é a abreviatura para o sistema de cores formadas pelas componentes hue(matiz), saturation (saturação) e value (valor). (Mais informações)
  • YCrCb é utilizado pelo formato de imagem JPEG populares.
  • CIE L * a * b * é um espaço de cores perceptivelmente uniforme, o que se torna útil se você precisa para medir a distância de uma determinada cor para outra cor.
Cada um dos componentes de construção tem seus próprios domínios válidos. Isto leva ao tipo de dados utilizados. Como armazenamos um componente define o controle que temos sobre seu domínio. O menor tipo de dados possível é char, o que significa um byte ou 8 bits. Isto pode ser assinado (assim pode armazenar os valores de 0 a 255). Embora no caso de três componentes isso já dá 16 milhões de cores possíveis para representar (como no caso de RGB) podemos adquirir um controle melhor utilizando dados do tipo float (4 bytes = 32 bits) ou double (8 byte = 64 bits) tipos para cada componente de cor. No entanto, lembrar que o aumento do tamanho de um componente também aumenta o tamanho de toda a imagem na memória.

Representação da matriz de pixels do objeto Mat na memória do computador

O tamanho da matriz de pixels vai depender do sistema de cor utilizado, mais específico a quantidade de canais utilizados.
No caso de uma imagem em tons de cinza nos teremos uma estrutura parecida com a imagem a seguir:
No caso das imagens com mais de um canal, cada coluna da matriz será formada por sub colunas que representam a quantidade de canais da imagem. No caso de uma imagem RGB a matriz de pixel é representada conforme imagem a seguir. A pri

 

Na aula 4 vamos começar a explicar na prática essa questão dos canais da imagem.
Veja a continuação desse post acessando Exibindo uma imagem do tipo Mat na tela utilizando um label e aprenda a exibir uma imagem em um label.
Danilo Filitto

Danilo Filitto

Mestre em Ciência da Computação pela UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela UEL, Bacharel em Ciência da Computação pela UNOESTE.

Adicione um comentário

Clique aqui para enviar um comentário

Área do assinante

Assinar Blog por Email

Digite seu endereço de email para assinar este blog e receber notificações de novas publicações por email.

Junte-se a 916 outros assinantes







Você gosta de jogar?

Assista essa série incrível e crie seu primeiro jogo utilizando o GDevelop

%d blogueiros gostam disto: