Computação Gráfica II Visão Computacional Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com Visão Computacional Visão Huma na e Compuacional Área que é a combinação de conceitos, técnicas e idéias do processamento de imagens digitais Entender, Obter informações, Descrever imagens digitais capturadas através de algum dispositivo Imagem é examinada e processada pela combinação de computador e aplicação Duas grandes áreas Realce de imagem Análise de imagens 1
Algumas áreas de utilização Reconhecimento de Caracteres Processamento de documentos Comércio (verificação de assinatura) Biométrico (autenticação pela face, digital, Iris, etc.) Identificação de movimento Inspeção automática de produtos na linha de produção Biomedicina (diagnósticos e cirurgia) Militar: Vigilância e identificação de alvos Navegação (robôs e veículos) Geoprocessamento Segurança: Visão Noturna Treinamento Realidade virtual Representação da Imagem Daqui em diante, o termo imagem será utilizado para imagem digital São representadas através de vetores ou matrizes ti Um pixel na posição (x,y) corresponde ao brilho daquela posição Existem quatro tipos de representação da imagem Binária Escala de cinza Imagem colorida Multiespectral 2
Imagem Binária Tipo mais simples Também conhecida como imagem branco e preto Só existem dois valores 0 - branco e 1 preto para cada pixel na imagem São normalmente utilizadas em situações onde existam formas básicas, contornos ou necessito de informações de posição Ex: Reconhecimento de caracteres, braço robótico para pegar objetos Podem ser facilmente obtidas através de imagens em escala de cinza utilizando o processo de threshold Escala de Cinza Contém mais informações do que as imagens binárias Imagens de tons de cinza somente contém informação do brilho. Normalmente, é uma imagem de 8bits, o que cria uma faixa de tons de cinza entre 0 e 256 Esse tipo de imagem pode conter algum tipo de ruído 3
Imagem Colorida Imagens coloridas têm conjunto de dados monocromáticos, cada um corresponde a uma cor diferente Normalmente as três cores são vermelho, verde e azul (RGB) Cada uma das três cores contém 8bits de dados, No total umaimagemrgbtêm24bitsdecor. Para cada posição em uma imagem RGB, um pixel corresponde a uma cor no vetor (R,G,B) Multiespectral Imagem Tipicamente contém informações que não são perceptíveis pelos humanos Contém mais de 30 conjuntos Estas imagens não podem ser visíveis diretamente para o ser humano, entretando podem ser reduzidas para RGB e assim podem ser vistas. Exemplos: Infravermelho, Ultra violeta Imagens de Satélites, imagens de sonar, 4
Imagem adquirida por uma cãmera CCD Histograma Útil para análise e realce de imagem Para cada nível de contraste (cinza) de 0 branco a 255 preto, mostra a quantidade de pixels naquele nível Indica: Imagem está distribuída corretamente dentre os níveis (está equalizada) Equalização Obter o melhor contraste da imagem Applet http://www.imageprocessingbasics.com/index.php?page=a pplet3 5
Pouco espalhamento Baixo contraste Espalhamento significativo Alto Contraste Concentrado na extremidade baixa Imagem escura Concentrado na extremidade alta Imagem clara Propriedades do Histograma Histograma (Exemplos) 6
Histograma (Exemplos) Histograma (Exemplos) 7
Lendo os Pixels de uma imagem public static void main(string[] args) { // TODO code application logic here File inputfile = new File("C:/lixo/aa.jpg"); BufferedImage image = null; try { image = ImageIO.read(inputFile); } catch (IOException ex) { System.out.println(ex); } String imageinfo = "Dimensoes: " + image.getwidth() + "x" + image.getheight() + " Bands: " + image.getraster().getnumbands(); ImageIcon icon = new ImageIcon(image); JLabel imagelabel = new JLabel(icon); JFrame frame = new JFrame(); frame.settitle( Imagem Lida"); Container contentpane = frame.getcontentpane(); contentpane.setlayout(new BorderLayout()); contentpane.add(new JScrollPane(imageLabel), BorderLayout.CENTER); contentpane.add(new JLabel(imageInfo), BorderLayout.SOUTH); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setsize(400, 400); frame.setvisible(true); } //Pegando os pixels da imagem int width = image.getwidth(); int height = image.getheight(); int nbands = image.getsamplemodel().getnumbands(); Raster inputraster = image.getdata(); int[] pixels = new int[nbands * width * height]; inputraster.getpixels(0, 0, width, height,,p pixels); for (int h = 0; h < height; h++) { for (int w = 0; w < width; w++) { int rgb = image.getrgb(w, h); int r = (int) ((rgb & 0x00FF0000) >>> 16); // Red level int g = (int) ((rgb & 0x0000FF00) >>> 8); // Green level int b = (int) (rgb & 0x000000FF); // Blue level System.out.print("at (" + w + "," + h + "): "); System.out.println(r + "," + g + "," + b); } } Questões 1-) Como é feito o processo de digitalização de um filme analógico para digital? 2-) Qual a diferença entre câmeras CCD e CMOS? 3-) Descreva os tipos mais comuns de formato de arquivos? 4-) Escolha uma área onde o processamento de imagem possa ser utilizado (ex: medicina) e descreva com detalhes como é feito esse processo (técnicas utilizadas)? 5-) Como é feita a detecção de faces e sorrisos utilizadas nas máquinas fotográficas atuais? 6-) Implemente o histograma de imagens em Java. 8
Informações Bibliografia GOMES, J. e VELHO, L. Computação Gráfica: Volume 1. Série Computação e Matemática, SBM/IMPA, 1998. VELHO, L. e GOMES, J. Sistemas Gráficos 3D. Serie Computação e Matemática, SBM/IMPA, 2001. Complementar FOLEY, J. D. et al. Computer Graphics Principles and Practice. Addison-Wesley, 1990. HEARN D., BAKER, M.P., Computer Graphics: C Version, 2nd edition, Prentice Hall WATT, A. 3D Computer Graphics. Addison-Wesley, 1993. 9