Escolar Documentos
Profissional Documentos
Cultura Documentos
Ementa:
• Estrutura básica dos computadores
• Arquitetura e conjunto de instruções
• BIOS - Basic Input/Output
• Software
• Basic Processing Unit
• Pipelining
• Organização de entrada e saída
• Sistema de memória
• Unidade Lógica Aritmética (ULA)
• Sistemas embarcados
• Sistemas em um único chip
• Processamento e desempenho paralelos
• Interfaces
Bibliografia Básica (Ementa original):
“Visão Computacional e
Reconhecimento de Imagens
em Sistemas Embarcados”
Nova Ementa proposta
- Representação
O que é uma imagem, Layout de uma imagem, cor da imagem, resolução e quantização, tipos de dados
na imagem, compressão, RGB, conversão de imagens RGB em escalas de cinza, acesso a valores de pixel.
- Formação
Sistemas de captura de imagens, a câmera, Processos de Digitalização, resolução versus desempenho,
ruído
- Pixels
Imagens binárias, imagens em escalas de cinza, histogramas, equalização de histogramas, operações
com imagens em cores
- Realce
Realce por meio de filtragem, filtragem pela média, pela mediana, por ordem e filtragem por Gaussiana
Filtragem para detecção de bordas
Detecção de bordas com operador laplaciano, laplaciano de Gaussiana, detetor de passagem por zero.
- Geometria
Deformações e transformações na imagem
- Processamento morfológico
Imagens binárias, Dilatação, Erosão e Elementos Estruturais
- Características
Descritores de Forma de um Parâmetro e Análise de Componentes Principais
- Segmentação de imagens
Funções de Segmentação, Filtros Laplaciano de gaussiana, detetores de Canny,
WaterShelds
- Classificação
Classificação Supervisionada e não-supervisionada, classificadores simples, Knn,
Classificador Bayesiano, k-médias.
• A biblioteca OpenCV
• A versão otimizada do OpenCV para sistemas
embarcados: SimpleCV
• Aplicações em SimpleCV para Raspberry PI
[1] http://simplecv.org/
[2] http://www.embarcados.com.br/opencv-2-4-
9-qt5-ubuntu/
[3] http://www.simplecv.org/download
[4] https://github.com/sightmachine/simplecv
Bibliografia recomendada
• Livros sobre teoria geral de Processamento de Imagens
Na Biblioteca Virtual temos:
Livro sobre SimpleCV e Raspberry PI
https://imagej.nih.gov/ij/
Site importante de consulta
https://www.bogotobogo.com/Matlab/Matlab_Tutorial_Digital_Image_Proce
ssing_I.php
Processamento de Imagens - Etapas
O processamento digital de imagens é composto pelas etapas ilustradas no diagrama
de blocos da Figura 1.
A captura da imagem consiste no uso de dispositivos físicos sensíveis a espectros de
energia eletromagnética que convertem o sinal elétrico para um formato digital. O
pré-processamento consiste no realce da imagem para enfatizar características de
interesse ou recuperar imagens que sofreram alguma degradação devido à
introdução de ruído, perda de contraste ou borramento. A segmentação é a
extração ou identificação dos objetos contidos na imagem, separando a imagem
em regiões. Por fim, a classificação, é o processo que identifica a imagem
observada (GONZALES, 2000).
O que é uma imagem digital ?
• Uma imagem digital é a representação de uma imagem bidimensional
usando números binários codificados de modo a permitir seu
armazenamento, transferência, impressão ou reprodução, e seu
processamento por meios eletrônicos.
• Há dois tipos fundamentais de imagem digital:do tipo rastreio(raster) e
outra do tipo vetorial.
• Uma imagem digital do tipo raster, ou bitmap, ou ainda matricial, é aquela
que em algum momento apresenta uma correspondência bit-a-bit entre
os pontos da imagem raster e os pontos da imagem reproduzida na tela de
um monitor. A imagem vetorial não é reproduzida necessariamente por
aproximação de pontos, antes era destinada a ser reproduzida
por plotters de traçagem que reproduziam a imagem por deslocamento de
canetas-tinteiro.
• Tipicamente, as imagens raster são imagens fotográficas, e as imagens
vetoriais são desenhos técnicos de engenharia. Os quadrinhos ilustrados
se assemelham em qualidade a imagens raster, mas são impressos
em plotters que passaram a imprimir à maneira das impressoras comuns
por jato de tinta.
Em outras palavras...
• Imagem é uma matriz de números. Pode ser
uma matriz bidimensional nXm (no caso de
imagens monocromáticas ou em Escala de
Cinza) ou então uma Matriz tridimensional
n X m X cor no caso de uma imagem em
cores RGB.
O que precisamos para processar
imagens ?
• Precisamos de uma Linguagem de Programação que trabalhe
com facilidade com matrizes.
C ou C++ dificulta o trabalho, porque não consegue operar
com matrizes sem usar bibliotecas para isso.
Linguagens que facilitam o trabalho:
Obs: Muitas vezes, a imagem binária já tem informações suficientes para fazer o
Reconhecimento das características desejadas no projeto. Um exemplo disso,
são os sistemas OCR, que reconhecem as chapas dos carros.
Outro exemplo
im = imread('lena.bmp');
bw = im2bw(im, 0.4);
imshow(bw);
Conversão de imagem RGB para binário usando o
MATLAB
X= imread('arvores.bmp');
RGB = imread('Stonehenge.jpg');
imshow(RGB)
I = rgb2gray(RGB);
figure
imshow(I)
Atividade 1
1) Transforme a imagem abaixo em escala de cinzas:
4) Encontre uma imagem RGB (em cores) na internet a sua escolha, e repita para ela os
passos (1), (2) e (3)
Imagem “rice.png”
RGB = imread('Stonehenge.jpg');
imshow(RGB)
I = rgb2gray(RGB);
imshow(I)
Imagem ‘coins.png’
Resultado da Aplicação do Limiar de
Otsu no Histograma de ‘coins.png’
Seleção de Limiar através do Método de Otsu usando
MATLAB
I =imread (‘pout.tif’);
Ieq = histeq(I);
Subplot(2,2,1), imshow(I);
Subplot(2,2,2), imshow(Ieq);
Subplot(2,2,3), imhist(I);
Subplot(2,2,4), imhist(Ieq);
Equalização do Histograma
Equalização Adaptativa do Histograma
Este método também está disponível no MATLAB e no OpenCV.
A obtenção de uma imagem com as desejadas características de contraste é uma arte que exige
a variação destes parâmetros baseado na experiência
Experimente o código MATLAB a seguir com imagens da sua preferência.
Veja o resultado no próximo slide.
I = imread ('pout.tif');
I1 = adapthisteq(I, 'clipLimit',0.02,'Distribution','rayleigh');
I2 = adapthisteq(I, 'clipLimit',0.02,'Distribution','exponential');
I3 = adapthisteq(I, 'clipLimit',0.08,'Distribution','uniform');
subplot(2,2,1),imshow(I); subplot(2,2,2),imshow(I2);
subplot(2,2,3),imshow(I2); subplot(2,2,4),imshow(I3);
(1)
im = imread ('fambrini.bmp')
% Imagem em 24 bits
% im é uma matriz m x n x 3
R = im(:, :, 1); % Componente de vermelho
G = im(:, :, 2); % Componente de verde
B = im(:, :, 3); % Componente de azul
subplot(2,2,1 );imshow(R);
subplot(2,2,2 );imshow(G);
subplot(2,2,3 );imshow(B);
subplot(2,2,4 );imshow(im);
Decompondo a imagem e gerando novamente a partir de
suas 3 componentes
Decompor a imagem ‘fambrini.bmp’ em suas três componentes RGB.
f = imread(‘fambrini.bmp');
fR = f(:, :, 1);
fG = f(:, :, 2);
fB = f(:, :, 3);
subplot(2,3,1);imshow(f) subplot(2,3,2);imshow(fR)
subplot(2,3,3);imshow(fG) subplot(2,3,4);imshow(fB)
Exemplo:
Converter uma imagem RGB em uma imagem Indexada.
RGB = imread('peppers.png');
[X, map ] = rgb2ind(RGB, 256);
figure
imshow(X,map)
Alterar o número de cores de uma imagem
indexada
Para alterar o número de cores de uma imagem
indexada pode-se usar a função imapprox que
tem a seguinte sintaxe:
onde [r(k) g(k) b(k)] são os valores RGB que especificam uma linha de um mapa de
cor. O mapa deve ser completado variando-se k.
Para verificar as dimensões de uma imagem no
MATLAB
Conversão entre tipos de imagem
1-Converte a imagem RGB para uma imagem em
escala de cinzas:
RGB = imread('peppers.png');
I = rgb2gray(RGB);
figure
imshow(I)
figure
imshow(RGB)
Outro exemplo:
Converter imagem RGB em Escala de Cinza
D = imread('onion.png');
Dgray=rgb2gray(D);
subplot(2,1,1);imshow(D); axis image;
subplot(2,1,2);imshow(Dgray);
Imagem Indexada
Verificar o tipo da imagem
Matriz plotada como imagem
Escrever uma imagem para um arquivo
Operações Geométricas
Rotação
Adicionar ruído a uma imagem
Filtrar a imagem
Exemplo de uso do Filtro
Acesso a valores de pixel na imagem
B=imread('cell.tif');
imview(B);
B(25,50);
B(25,50)=255; % Especifica o valor do pixel em (25,50) como Branco
imshow(B);
-----------------------------------------------------------------------------------
Para imagens RGB em cores:
B=imread('onion.png');
imview(B);
B(25,50,1);
Im = imread('lego.png');
imshow( Im);
azuis = Im(:,:,1) < 90;
imshow(azuis);
Solução – Parte 2
• Agora podemos identificar quais objetos há nessa foto.
Para isso usamos a função bwboundaries. Essa função identifica
os objetos presentes em uma imagem em preto e branco
(binária):
[B,L] = bwboundaries(azuis, 'noholes');
Solução – parte 3
• A função bwboundaries retorna duas variáveis: a primeira
representa os contornos dos objetos, a segunda é uma matriz de
índices em que cada elemento da matriz é um inteiro indicando de
qual objeto esse elemento da matriz faz parte.
• Se não ficou claro o que é a segunda variável, pense nela como uma
representação dos objetos na foto.
Im = imread('lego.png');
imshow( Im);
azuis = Im(:,:,1) < 90;
imshow(azuis);
[B,L] = bwboundaries(azuis,'noholes');
stats = regionprops(L, 'Area');
qtd_azuis = sum([stats.Area] > 50);
qtd_azuis
imshow(Im);
title(sprintf('\\fontsize{16} {Existem %d objetos azuis nessa imagem}', qtd_azuis));
hold on
for k = 1:length(B)
area = stats(k).Area;
if area > 50
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'black', 'LineWidth', 2);
text(boundary(1,2), boundary(1,1), sprintf('%.0f',area),...
'Color', 'white',...
'FontSize', 12,...
'FontWeight', 'bold',...
'BackgroundColor', 'black');
end
end
hold off
Atividade 4
• Faça um programa que mostre a quantidade
de peças peças vermelhas e amarelas na
mesma figura.
pecas = NovaImagemRGB8(:,:,1)>225;
subplot(2,2,2); imshow(pecas)
%Conta o total de peças vermelhas + amarelas
[B,L] = bwboundaries(pecas,'noholes');
stats = regionprops(L, 'Area');
verm_amarel = sum([stats.Area] > 1000);
verm_amarel
Subtrai a quantidade de peças
vermelhas
A) Remoção de Ruídos
B) Extração de Características (Descritores)
C) Realce de Características
D) Detecção de Bordas (ou Contornos) nas
imagens.
Filtragem para remoção de ruído
• O script MATLAB abaixo abre a imagem das moedas e acrescenta
ruído do tipo “sal e pimenta” (salt & pepper) e também ruído tipo
Gaussiano na imagem:
I = imread('eight.tif');
subplot(1,3,1), imshow(I);
Isp =imnoise(I,'salt & pepper',0.03);
subplot(1,3,2), imshow(Isp);
Ig=imnoise(I,'gaussian',0.02);
subplot(1,3,3), imshow(Ig);
No exemplo do slide anterior usamos a função
imnoise para acrescentar ruído à imagem de
entrada. A intensidade de ruído é especificada
pela densidade percentual e pela variância
(com média zero), respectivamente. Explore
os efeitos da alteração destes parâmetros de
ruído e, também, outros efeitos de ruído que
esta função implementa.
Filtragem Gaussiana para reduzir os ruídos
Para reduzir o ruído de uma imagem, podemos
usar diversos tipos de Filtros digitais. Alguns
deles são:
a) Filtro de Média
b) Filtro de Mediana
c) Filtro de Ordem (Rank Filter)
d) Filtro Gaussiano
No próximo slide, mostramos um exemplo do
Filtro Gaussiano para reduzir ruído.
Filtragem Gaussiana de Imagem
k = fspecial('gaussian',[5,5],2);
I_g = imfilter (I,k);
Isp_g = imfilter(Isp,k);
Ig_g=imfilter(Ig,k);
subplot(1,3,1), imshow(I_g);
subplot(1,3,2), imshow(Isp_g);
subplot(1,3,3), imshow(Ig_g);
Neste exemplo definimos um filtro Gaussiano com núcleo 5X5 e desvio padrão =2 pela
Função fpsecial e o aplicamos às três imagens geradas com ruído. Explore diferentes
dimensões de núcleo e diferentes valores de desvios padrão para entender os efeitos
do filtro na imagem resultante.
Atividade 2
• Tome uma imagem em cores qualquer à sua
escolha e:
A) Transforme a imagem RGB para Escala de
Cinza;
B) Acrescente ruído Sal e Pimenta e ruído
Gaussiano nesta imagem.Mostre a imagem
com ruído na tela;
c) Use o filtro Gaussiano para eliminar o ruído.
Mostre o resultado após a aplicação do filtro.
•
Atividade 2-B
Aplique diversos filtros de ruído na imagem abaixo, que mostra 2 flores. Tente melhorar ao máximo a
imagem, eliminando o ruido o máximo que você puder. Mostre o resultado.
EXTRAÇÃO DE CONTORNOS
(BORDAS)
Detecção de Bordas
Extrair os contornos (bordas) das figuras em uma imagem é
também muito importante para o reconhecimento de
imagens. Extraindo as bordas podemos calcular (a partir de
tais bordas) vários descritores que podem ser úteis para
identificar a imagem. No entanto, não é qualquer medida
extraída da borda que serve como um bom descritor. Um
descritor para ser considerado bom deve ser invariante:
a) À translação;
b) À rotação;
c) Às mudanças de escalas da figura.
Filtros para detectar bordas
A detecção de bordas faz uso de operadores diferenciais (derivadas) para
detectar alterações nos gradientes de níveis de cinza ou de cores em uma
imagem. A detecção de bordas é dividida em 2 categorias principais:
de 1ª ordem e de 2ª ordem. Existem diversos algoritmos para detectar bordas
em uma imagem, entre eles cita-se:
Baseados em derivadas de 1ª Ordem:
a) Detector de Roberts;
b) Detector de Prewitt;
c) Detector de Sobel.
Baseados em derivadas de 2ª Ordem (segunda derivada ou Laplaciano):
a) Detector Laplaciano;
b) Detector Laplaciano de Gaussiana (LoG) ;
c) Detector de Passagem por Zero;
d) Detector de Canny (considerado o melhor dentre todos).
Detectando bordas com MATLAB
• O exemplo abaixo ilustra o uso do detector de Canny (2ª
Ordem) e de Prewitt (1ª Ordem) e mostras as duas imagens
lado a lado, para você comparar o funcionamento deste dois
tipos de filtros de bordas.
O “melhor” filtro depende de cada necessidade.
I = imread('cameraman.tif');
imshow(I)
BW1 = edge(I,'Canny');
BW2 = edge(I,'Prewitt');
imshowpair(BW1,BW2,'montage')
Atividade 5
• Aplique os seguintes filtros de borda na imagem a seguir, e
extraia os contornos da imagem:
a) Canny
b) Prewitt
c) Sobel
d) Laplacian Enviar os resultados para fambrini@unicamp.br
O titulo do email deve ser seu_nome_Ativ5
Atividade 6
• Atividade 6.
• a) Explique como funcionam os filtros
detectores de borda para imagens.
• b) Explique quais são os sistemas de Cores
que existem e quais as principais diferenças
entre eles.
Pixel e Voxel
a) Discuta a diferença entre pixel e voxel
b) Dê exemplos de onde são usando os voxels.
PRAZO FINAL PARA ENTREGA DAS
ATIVIDADES
16 de Maio
Referências usadas na elaboração deste material
[3] Parker, James R., Algorithms for Image Processing and Computer
Vision, New York, John Wiley & Sons, Inc., 1997, pp. 23-29.