Baixe o app para aproveitar ainda mais
Prévia do material em texto
Implementac¸a˜o de Operac¸o˜es Avanc¸adas no Tratamento de Imagens em MATLAB Gustavo Siebra Lopes 22 de Outubro de 2014 1 Introduc¸a˜o Esse trabalho e´ para compor a nota na disciplina de Processamento Digital de Imagens, consiste na implementac¸a˜o do co´digo de operac¸o˜es avanc¸adas no tratamento de imagens em MATLAB e um breve relato´rio sobre as te´cnicas utilzidas e seus resultados. 2 Imagem Digital Uma imagem digital pode ser considerada como sendo uma matriz de pontos elementares, em que cada ponto recebe o nome de pixel. Quanto maior a quan- tidade de pixels melhor a resoluc¸a˜o da imagem e consequ¨entemente maior o seu tamanho. Cada pixel e´ representado por um valor que indica a intensidade de brilho, denominado n´ıvel de cinza, e a quantidade de n´ıveis de cinza depende da quantidade de bits usada na representac¸a˜o de cada pixel. 3 Pre´-Processamento O pre´-processamento de imagens consiste na aplicac¸a˜o de te´cnicas para realce de imagens, que visam destacar uma regia˜o dentro da imagem, permitindo a sua visualizac¸a˜o com mais detalhes, de modo que a imagem resultante seja mais apropriada para uma aplicac¸a˜o espec´ıfica do que a imagem original. Neste tra- balho, a fim de analisar a efica´cia dessas transformac¸o˜es em imagens digitais, foram abordadas algumas te´cnicas de pre´-processamento como ajuste de con- traste e brilho utilizando transformac¸a˜o linear e correc¸a˜o Gamma, aplicac¸a˜o de filtro passa baixa e passa alta no domn´ınio da frequeˆncia, transformada Haar, detecc¸a˜o de pele e objetos coloridos, erosa˜o, dilatac¸a˜o e morfologia matema´tica. 4 Transformac¸o˜es Geome´tricas E´ uma aplicac¸a˜o bijectiva entre duas figuras geome´tricas, no mesmo plano ou em planos diferentes, de modo que, a partir de uma figura geome´trica original 1 se forma outra geometricamente igual ou semelhante a` primeira. Os princi- pais paraˆmetros de instanciamento utilizados em Computac¸a˜o Gra´fica sa˜o as transformac¸o˜es de rotac¸a˜o, translac¸a˜o e escala. A seguir cada uma destas trans- formac¸o˜es sera´ apresentada em detalhe. 4.1 Rotac¸a˜o Rotac¸a˜o e´ a figura que, sem sair da origem, vai rodando em diferentes graus definindo a sua posic¸a˜o final. Pode ser positiva, quando se move ao contra´rio do sentido dos ponteiros do relo´gio, ou negativa, quando se move no mesmo sentido dos ponteiros dos relo´gios. Figura 1: Demonstrac¸a˜o da rotac¸a˜o nos eixos x e y. 4.1.1 Rotac¸a˜o 2D Ca´lculo da equac¸a˜o:{ x = r cosφ y = r sinφ { x′ = r cos(φ+ θ) y′ = r sin(φ+ θ) Desenvolvendo as expresso˜es de x’ e y’, tem-se:{ x′ = r cosφ cos θ − r sinφ sin θ y′ = r cosφ sin θ + r sinφ cos θ Substituindo r cos(φ) e r sin(φ) por x e y nas equac¸o˜es anteriores tem-se:{ x′ = x cos θ − y sin θ y′ = x sin θ + y cos θ Forma matricial:[ x′ y′ ] = [ cos θ − sin θ sin θ cos θ ] × [ x y ] A func¸a˜o utilizada demonstra ser bastante eficiente, na˜o perdendo informac¸o˜es das bordas como verificado na Figura 2. 2 (a) Imagem Original (b) Rotac¸a˜o de 32° (c) Rotac¸a˜o de 110° Figura 2: Resultados da transformac¸a˜o geome´trica de rotac¸a˜o 4.2 Translac¸a˜o Transladar um ponto (x, y) significa desloca´-lo de uma quantidade de movimento linear (∆x,∆y). Figura 3: Demonstrac¸a˜o da translac¸a˜o nos eixos x e y. Ca´lculo da equac¸a˜o: { x′ = x+ ∆x y′ = y + ∆y Forma matricial:[ x′ y′ ] = [ x y ] + [ ∆x ∆y ] • x’ na˜o e´ uma combinac¸a˜o linear de x e y • y’ na˜o e´ uma combinac¸a˜o linear de x e y Pode-se observar os resultados na Figura 4. 3 (a) Imagem Original (b) Translac¸a˜o 1 (c) Translac¸a˜o 2 Figura 4: Resultados da transformac¸a˜o geome´trica de translac¸a˜o 4.3 Escala Podemos alterar as dimenso˜es de um objeto multiplicando as coordenadas dos seus ve´rtices por fatores de escala apropriados. Figura 5: Demonstrac¸a˜o da escala nos eixos x e y. Tal fato pode ser expresso em termos da seguintes fo´rmula:{ x′ = λx× x y′ = λy × y Onde as novas coordenadas x’ e y’ do objeto sa˜o obtidas a partir das suas coorde- nadas iniciais x e y por aplicac¸a˜o de fatores de escala λx e λy nas direcc¸o˜es X e Y. Usando notac¸a˜o matricial, podemos representar a transformac¸a˜o geome´trica atrave´s de uma multiplicac¸a˜o de matrizes.[ x′ y′ ] = [ x y ] × [ λx 0 0 λy ] Pode-se observar os resultados na Figura 6. 4 (a) Esacala de 0.5 (b) Imagem Original (c) Escala de 1.5 Figura 6: Resultados da transformac¸a˜o geome´trica escala 5 Processamento de Intensidade As te´cnicas de transformac¸o˜es de intensidade atuam diretamente nos pixels da imagem. Do ponto de vista conceitual, uma u´nica equac¸a˜o define esse tipo de transformac¸a˜o: g(x,y) = T [ f(x,y)] Onde f(x,y) e´ a imagem de entrada (original), g(x,y) a imagem de sa´ıda (pro- cessada) e T a func¸a˜o de intensidade/func¸a˜o de contraste. A func¸a˜o T e´ aplicada a cada um dos pontos da imagem (pontual em cada pixel). A transformac¸a˜o em cada pixel na˜o esta´ atrelada aos pixels da vizinhanc¸a. Embora trivial, essa operac¸a˜o e´ bastante aplicada para realce de imagens, de forma obter uma nova imagem com melhor visualizac¸a˜o. 5.1 Transformac¸a˜o Linear Em operac¸o˜es de aumento de contraste, pode-se controlar com uma maior pre- cisa˜o qual faixa de valores de intensidade deve ter uma melhor representac¸a˜o imagens com baixo contraste podem resultar de problemas como iluminac¸a˜o fa- lha ou faixa de aquisic¸a˜o do sensor inadequada. Um exemplo de func¸a˜o que possibilita o controle do contraste e´ dado por: s = c× r + b Em que: • b e´ o ajuste de brilho • b > 0 aumenta o brilho • b < 0 diminui o brilho • c e´ o controlador de contraste 5 • θ > 45 : aumenta o contraste • θ < 45 : diminui o contraste A Figura 7 mostra os resultados obtidos: (a) Imagem Original (b) Transformac¸a˜o Linear 1 (c) Transformac¸a˜o Linear 2 Figura 7: Resultados da Transformac¸a˜o Linear A Figura 8 mostra o resultado dos histogramas: (a) Imagem Original (b) Histograma 1 (c) Histograma 2 Figura 8: Resultados do Histograma da Transformac¸a˜o Linear 5.2 Transoformac¸a˜o de Poteˆncia Uma func¸a˜o de transformac¸a˜o exponencial e´ dada por: 6 s = c× rγ Onde c e γ sa˜o constantes positivas, variando γ obtem-se um grupo de trans- formac¸o˜es que podem realc¸ar baixas ou altas intensidades de modos diferentes. Dependendo do valor de γ a func¸a˜o de transformac¸a˜o ira´ se comportar de ma- neira diferente, para valores de γ fraciona´rios (entre 0 e 1): alargam uma faixa estreita escura, comprimindo a faixa clara. Inteiros maiores que 1: estreitam uma faixa estreita escura, alargando a faixa clara. Correc¸a˜o Gamma de imagens pode ser necessa´ria para que a imagem seja vista em um monitor com as intensidades originais. Dispositivos CRT teˆm uma func¸a˜o de resposta de intensidade-voltagem que e´ uma func¸a˜o de poteˆncia com γ vari- ando entre 1.8 e 2.5. Essa transformac¸a˜o tambe´m utilizada para manipulac¸a˜o de contraste em imagens. A Figura 9 mostra os resultados obtidos: (a) Imagem Original (b) gamma = 2 (c) gamma = 3 Figura 9: Resultados da Transoformac¸a˜o de Poteˆncia A Figura 10 mostra o resultado dos histogramas: 7 (a) Imagem Original (b) Histograma 1 (c) Histograma 2 Figura 10: Resultados do Histograma da Transformac¸a˜o de Poteˆncia 6 Filtragem no Domı´nio da Frequeˆncia As te´cnicas de filtragem no domı´nio da frequeˆncia se baseiam na modificac¸a˜o da transformada de Fourier para atingir um objetivo espec´ıfico e calcular a DFT inversa para retornar ao domı´nio da imagem. Portanto, o processamento de imagem no domı´nio da frequeˆncia e´ realizado usualmente atrave´s de treˆs passos conforme o esquema da Figura 11: Figura 11: Esquema de processamento no domı´nio da frequeˆncia usando atrans- formada de imagens. 1 - a imagem e´ transformada do domı´nio espacial para o da frequeˆncia, usando a transformada de Fourier; 2 - operac¸o˜es sa˜o realizadas nessa imagem; 3 - e para que a imagem possa ser exibida e vista por olhos humanas, ocorre o processo inverso, onde a imagem no domı´nio da frequ¨eˆncia e´ transformada para o domı´nio espacial 8 Este u´ltimo passo sera´ realizado atrave´s da transformada inversa de Fourier. Assim, seguir sera´ descrita a transformada de Fourier, devido a sua importaˆncia e grande aplicac¸a˜o no processamento de imagens. 6.1 Filtro Passa-Baixa Sa˜o os detalhes da imagem que geram altas frequeˆncias. Por exemplo as bordas, lados e outras transic¸o˜es abruptas de n´ıvel de cinza. Utilizando um filtro passa baixa obte´m-se uma imagem menos n´ıtida ou suavizada, tendo perda de deta- lhes que sa˜o os componentes de altas frequeˆncias. Os filtroa podem ser de va´rios tipos, os mais comuns sa˜o: Ideal, Butterworth e Gaussiano. Pode-se observar os resultados na Figura 12: (a) Imagem Original (b) Filtro Ideal (c) Filtro Butterworth (d) Filtros Gaussiano Figura 12: Resultados dos Filtros Passa-Baixa Resultado do espectro de Fourier com filtro passa-baixa Figura 13: 9 Figura 13: Resultado do espectro de Fourier Resultado da imagem do filtro passa-baixa Figura 14: (a) Filtro Ideal (b) Filtro Butterworth (c) Filtros Gaussiano Figura 14: Resultado do espectro de Fourier Resultado da perspectiva do filtro passa baixa Figura 15: (a) Filtro Ideal (b) Filtro Butterworth (c) Filtros Gaussiano Figura 15: Resultado da perspectiva do filtro passa baixa 10 6.2 Filtro Passa-Alta Na filtragem passa-alta, os componentes de alta frequeˆncia da transformada de Fourier na˜o sa˜o alterados, enquanto os de baixa frequ¨eˆncia sa˜o removidos, isso faz com que os detalhes finos da imagem sejam enfatizados. Os filtros podem ser de va´rios tipos, os mais comuns sa˜o: Ideal, Butterworth e Gaussiano. Pode-se observar os resultados na Figura 16: (a) Imagem Original (b) Filtro Ideal (c) Filtro Butterworth (d) Filtros Gaussiano Figura 16: Resultados dos Filtros Passa-Alta Resultado do espectro de Fourier com filtro passa-alta Figura 17: Figura 17: Resultado do espectro de Fourier 11 Resultado da imagem do filtro passa-alta Figura 18: (a) Filtro Ideal (b) Filtro Butterworth (c) Filtros Gaussiano Figura 18: Resultado do espectro de Fourier Resultado da perspectiva do filtro passa alta na Figura 19: (a) Filtro Ideal (b) Filtro Butterworth (c) Filtros Gaussiano Figura 19: Resultado da perspectiva do filtro passa alta 7 Transformada Haar A Transformada de Haar e´ um transformada matema´tica discreta usada no processamento e ana´lise de sinais, na compressa˜o de dados e em outras aplicac¸o˜es de engenharia e cieˆncia da computac¸a˜o. A transformada de Haar e´ um caso particular de transformada discreta de Wavelet, onde o wavelet e´ um pulso quadrado definido por: ψ(t) = 1, 0 ≤ t < 0.5−1, 0.5 ≤ t < 1 0, para outros valores de t Pode-se observar na Figura 20 o resultado da implementac¸a˜o da transformac¸a˜o Haar. 12 (a) Imagem Original (b) Primeiro Nı´vel (c) Segundo Nı´vel (d) Terceiro Nı´vel Figura 20: Resultados da Transformada Haar 8 Processamento de Imagens Coloridas A apareˆncia de um objeto e´ o resultado de uma complexa interac¸a˜o da luz incidente sobre este objeto, suas caracter´ısticas o´pticas e a percepc¸a˜o humana. A Cor esta´ associada com os comprimentos de onda da luz, ou melhor, com as distribuic¸o˜es destes comprimento de onda. O olho humano so´ consegue diferir algumas dezenas e tons de cinza, contudo, pode distinguir uma grande variedade de cores. Este e´ um fator importante para a ana´lise de imagem atrave´s do olho humano. 8.1 RGB Cada cor e´ descrito atrave´s das cores prima´rias Vermelho Verde e Azul. As cores sa˜o especificadas como vetores da origem a coordenadas de cor. Os n´ıveis de cinza possuem componentes R, G e B de mesma intensidade. 13 Figura 21: Esquema´tico do cubo de cor RGB. O modelo de cores RGB e´ conhecido como Cubo de Cores RGB. Nos ve´rtices do cubo esta˜o as cores prima´rias (Vermelho, Verde, Azul) e as cores secunda´rias (Ciano, Magenta, Amarelo). O Preto esta´ localizado na origem e o Branco na extremidade oposta. A diagonal do cubo entre Preto e Branco e´ a Escala de Cinza. 8.2 HSV Retina humana tem treˆs tipos de ce´lulas foto-receptoras de cor. As treˆs compo- nentes nume´ricas necessa´rias para descrever uma cor sa˜o: intensidade, matiz e saturac¸a˜o. O Espac¸o de Cor HSV e´ baseado em coordenadas cil´ındricas. Figura 22: Esquema´tico do cilindro de cor HSV. O H e´ a cor pura e e´ expresso em graus de aˆngulo onde zero e´ a cor Vermelha. V e´ medido ao longo do eixo do cone hexagonal onde V = 0 e´ o preto e V=1 e´ o branco. S e´ a “pureza da cor” e e´ medida como a distaˆncia do eixo V. 8.3 Aplicac¸o˜es Resultados da implementac¸a˜o de detecc¸a˜o de pele: 14 (a) Imagem Original (b) Detecc¸a˜o de Pele Binari- zada (c) Detecc¸a˜o de Pele HSV (d) Detecc¸a˜o de Pele RGB Figura 23: Resultados da Detecc¸a˜o de Pele Resultados da implementac¸a˜o de detecc¸a˜o de um objeto colorido: (a) Imagem Original (b) Detecc¸a˜o de Objeto Colorido (c) Detecc¸a˜o de Objeto Colorido Figura 24: Resultados da Detecc¸a˜o de objeto colorido 15 Resultados da implementac¸a˜o de detecc¸a˜o de objetos conectados: (a) Imagem Original (b) Detecc¸a˜o de Objeto Colorido (c) Imagem Original (d) Detecc¸a˜o de Objeto Colo- rido Figura 25: Resultados da Detecc¸a˜o de objeto colorido 9 Morfologia Matema´tica A morfologia matema´tica e´ a parte do processamento de imagem na˜o-linear que tem por objetivo extrair caracter´ısticas da imagem associadas a` geometria dos objetos. A morfologia matema´tica foi desenvolvida inicialmente por Georges Matheron e Jean Serra na de´cada de 60, para imagens bina´rias utilizando a teoria de conjuntos. Posteriormente, ela foi estendida para imagens em tons cinza (func¸o˜es) utilizando a teoria de reticulados, onde uma imagem e´ vista como a superf´ıcie de um relevo. 9.1 Elemento estruturante Uma transformac¸a˜o morfolo´gica consiste essencialmente da comparac¸a˜o da ima- gem com outra menor, cuja geometria e´ conhecida, denominada elemento es- truturante. Um elemento estruturante planar e´ um conjunto de coordenadas de pixel. Por exemplo, o elemento cruz e´ definido por E = {(0,1,0);(1,1,1);(0,1,0)}. Uma transformac¸a˜o morfolo´gica requer uma operac¸a˜o na˜o-linear entre a ima- gem e o elemento estruturante, o qual desliza sobre a imagem de forma similar a` 16 convoluc¸a˜o discreta. Neste sentido, o elemento estruturante planar define uma relac¸a˜o de adjaceˆncia do tipo (p, q) ∈ A se q - p ∈ E. Um elemento estruturante na˜o-planar e´ um par (E,V) que consiste de um conjunto de coordenadas de pixel E e um conjunto de valores V associados a cada coordenada, assim como uma imagem. Por exemplo, V = {2, 1, 1, 1, 1} para o caso do elemento cruz. Este tipo de elemento e´ usado apenas em operac¸o˜es com imagens em tons de cinza. Neste caso, o elemento estruturante pode ser visto como uma ma´scara de con- voluc¸a˜o, muito embora a operac¸a˜o seja outra. No caso particular, onde todos valores em V sa˜o zero, o elemento estruturante se torna planar. 9.2 Dilatac¸a˜o A dilatac¸a˜o, tambe´m as vezes chamada de dilac¸a˜o, e´ uma transformac¸a˜o mor- folo´gica que combina dois conjuntos usando adic¸a˜o vetorial. Seu s´ımbolo e´ ⊕. Como o nome diz, o resultado sera´ uma imagem “engordada”. A dilatac¸a˜o de um conjunto A pelo conjunto B e definida por: A ⊕ B = { c | c = a + b , a ∈ A , b ∈ B } Onde A representa a imagem sendo operada e B e´ um segundo conjunto onde e´ chamado elemento estrutural e sua composic¸a˜o define a natureza especi-fica da dilatac¸a˜o, sendo assim a dilatac¸a˜o expande uma imagem. Ela pode ser representada pela unia˜o A ⊕ B = A ∪ B. Seja o conjunto A = { (0,1);(1,1);(2,1);(2,2);(3,0)} e B = {(0,0);(0,1)} enta˜o o resultante da dilatac¸a˜o e´: A ⊕ B = {A + {(x1 ∈ B)} ∪ A + {(x2 ∈ B)}} A ⊕ B = {(0,1);(1,1);(2,1);(3,0);(0,2);(1,2);(2,2);(2,3);(3,1)} Uma aplicac¸a˜o da dilatac¸a˜o e´ o preenchimento de buracos, ver Figura 26: (a) Imagem Original (b) Dilatac¸a˜o - square (c) Dilatac¸a˜o - line (d) Dilatac¸a˜o - disk Figura 26: Resultados da Dilatac¸a˜o com diferentes Elementos Estruturantes 17 9.3 Erosa˜o A erosa˜o basicamente encolhe uma imagem e pode ser vista como uma trans- formac¸a˜o morfolo´gica que combina dois conjuntos usando vetores de subtrac¸a˜o. Ela e´ expressa como a intersec¸a˜o de A e B. Assim e definido A B = B ∩ A. A erosa˜o da imagem A pelo elemento estrutural B pode ser definida como: A B = {( x | x + b ∈ A para todo b ∈ B)} ou, A B = { c | B’ ⊆ A } Assim define-se que a erosa˜o e o conjunto de todos os pixels, e o elemento estruturante B e transladado pelo c corresponde a um conjunto de pixel em A. O conjunto A B e´ o conjunto de translac¸o˜es de B que alinham B sobre o conjunto de pixels pretos em A. Isso Significa que nem todas as translac¸o˜es necessitam ser consideradas, mas somente aquelas que inicialmente localizam sua origem de B em um membro de A. Uma aplicac¸a˜o daerosa˜o e´ a remoc¸a˜o de detalhes pequenos (irrelevantes), ver Figura 27: (a) Imagem Original (b) Erosa˜o - square (c) Erosa˜o - line (d) Erosa˜o - disk Figura 27: Resultados da Erosa˜o com diferentes Elementos Estruturantes 9.4 Abertura A abertura em geral suaviza o contorno de uma imagem, quebra estreitos e elimina proemineˆncias delgadas, a operac¸a˜o de abertura e usada tambe´m para remover ru´ıdos da imagem. A abertura de um conjunto A por elemento estru- turante B e denotado A ◦ B e definida como: A ◦ B = (A B) ⊕ B A aplicac¸a˜o de uma erosa˜o imediatamente seguida de uma dilatac¸a˜o usando o mesmo elemento estrutural e´ uma operac¸a˜o de abertura, ela tende a abrir pequenos vazios ou espac¸os entre objetos pro´ximos numa imagem. Ou seja em 18 outras palavras uma abertura e uma erosa˜o seguida de uma dilatac¸a˜o usando um mesmo elemento estruturante, relembrando que a erosa˜o acha todos os lu- gares onde o ajuste do elemento estruturante esta dentro a imagem, mas isto somente marca esta posic¸a˜o a origem de um elemento. Pore´m seguinte uma erosa˜o por uma dilatac¸a˜o, nos enchemos de brancos os lugares onde o ajuste do elemento estruturante estiver dentro do objeto. Na abertura podem se considerar para ser a unia˜o de todos copias traduzidos de um ajuste elemento estruturante que possam estar dentro do objeto. 9.5 Fechamento O fechamento funde pequenos quebras e alargas golfos estreitos elimina peque- nos orif´ıcios, se uma abertura cria pequenos vazios na imagem, um fechamento ira´ preencher ou fechar os vazios, estas operac¸o˜es podem remover muitos dos pixels brancos com ru´ıdos, ou seja basicamente ele e igual a abertura so´ que primeiramente e feita a dilatac¸a˜o e apo´s e feita a erosa˜o assim ela se define como: A • B = (A ⊕ B) B Em outras palavras o fechamento trabalha de um modo oposto ao me´todo abertura, onde ela remove todos os pixels onde o ajuste do elemento estrutu- rante na˜o esta dentro da imagem (primeiro pano), fechamento enche todos os lugares onde o elemento estruturante na˜o iria ajustar na imagem (pano fundo). Entretanto operac¸o˜es inversas, abertura e fechamento na˜o ira˜o estabelecer a imagem original. 9.6 Gradiente Morfolo´gico Esta operac¸a˜o e´ composta por treˆs outras operac¸o˜es ba´sicas da morfologia: a dilatac¸a˜o, erosa˜o e a subtrac¸a˜o sendo definida da seguinte forma: X = (A ⊕ B) - (A B) Onde: A e´ a imagem original e B o elemento estruturante. Uma importante aplicac¸a˜o do gradiente e´ para fechar fronteiras, ver Figura 28: 19 (a) Imagem Original (b) Gradiente Morfolo´gico Figura 28: Resultados Gradiente Morfolo´gico 10 Conclusa˜o Neste trabalho foi feito um estudo sobre algumas das principais te´cnicas de pre´-processamento de imagens digitais e para implementac¸a˜o dessas te´cnicas utilizou-se o software MATLAB como ferramenta computacional a fim de com- provar a efica´cia dessas te´cnicas em cada imagem analisada. A importaˆncia de estudar essas te´cnicas de imagem podem ser percebida pela forte relac¸a˜o entre o processamento digital de imagens e outras a´reas como o estudo de Redes Neurais, Inteligeˆncia Artificial, Sensoriamento Remoto usando imagens de sate´lite e Imageamento Me´dico dentre outras. Refereˆncias [1] GONZALEZ, Rafael C.; WOODS, Richard E. Processamento de Imagens Digitais. 1. ed. Sa˜o Paulo: Edgard Blu¨cher, 2000. [2] PARKER, J. R.. Algorithms for Image Processing and Computer Vision. New York, John wiley & Sons, 1997. [3] RUSS, John C. . The image processing handbook. 2 ed., Boca Raton, CRC Press, 1995. [4] MARQUES FILHO, Ogeˆ & VIEIRA NETO, Hugo. Processamento digital de Imagens. Rio de Janeiro, Brasport, 1999. [5] QUEIROZ, J. E. R.; GOMES, H. M. Introduc¸a˜o ao Processamento Digital de Imagens. 2001. [6] GOMES, J.; VELHO, L. Image Processing for Computer Graphics. Springer- Verlag, 1997. [7] REBOUC¸AS FILHO, P. P.Notas de Aula da Disciplina Processamento Di- gital de Imagens. 2014. 20 A Apeˆndice Co´digo para implementac¸a˜o em MATLAB Rotac¸a˜o 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 img = imread('stef-01.gif'); 13 14 %% Rotacao 15 A = imrotate(img, 32); 16 B = imrotate(img, 110); 17 C = imrotate(img, 280); 18 19 %% Mostra imagem 20 imshow(img) %Imagem Original 21 figure, imshow(A) %Imagem Rotacionada 32 22 figure, imshow(B) %Imagem Rotacionada 110 23 figure, imshow(C) %Imagem Rotacionada 280 Translac¸a˜o 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 img = imread('stef-01.gif'); 13 14 %% Translacao 15 A = imtranslate(img,[-70, -50]); 16 B = imtranslate(img,[40, -20]); 17 C = imtranslate(img,[50, -50]); 18 19 %% Mostra imagem 20 imshow(img) %Imagem Original 21 figure, imshow(A) %Imagem Translacao [-70, -50] 22 figure, imshow(B) %Imagem Translacao [40, -20] 23 figure, imshow(C) %Imagem Translacao [50, -50] 21 Escala 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 img = imread('stef-01.gif'); 13 14 %% Escala 15 A = imresize(img, 0.5); 16 B = imresize(img, 1.5); 17 C = imresize(img, 2); 18 19 %% Mostra imagem 20 imshow(img) %Imagem Original 21 figure, imshow(A) %Imagem Escala 0.5 22 figure, imshow(B) %Imagem Escala 2 23 figure, imshow(C) %Imagem Escala 2.5 Transformac¸a˜o Linear - Brilho e Contraste 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 img = imread('pirate.tif'); 13 14 %% Transformacao Linear - Contrates e Brilho 15 A = imadjust(img,[0.1 0.3],[]); 16 B = imadjust(img,[0.5 0.7],[]); 17 C = imadjust(img, stretchlim (img), []); 18 19 %% Mostra imagem 20 imshow(img) %Imagem Original 21 figure, imshow(A) %Imagem contrastee brilho 0.1 0.3 22 figure, imshow(B) %Imagem contraste e brilho 0.3 0.7 23 figure, imshow(C) %Imagem contraste e brilho equalizada 22 Transformac¸a˜o de Poteˆncia - Brilho e Contraste 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 img = imread('pirate.tif'); 13 14 %% Transformacao de Potencia - Contrates e Brilho 15 A = imadjust(img,[0.1 0.3],[],2); 16 B = imadjust(img,[0.5 0.7],[],3); 17 C = imadjust(img,stretchlim (img),[],4); 18 19 %% Mostra imagem 20 imshow(img) %Imagem Original 21 figure, imshow(A) %Imagem contraste e brilho gamma 2 22 figure, imshow(B) %Imagem contraste e brilho gamma 3 23 figure, imshow(C) %Imagem contraste e brilho gamma 4 Filtro passa-baixa no domı´nio da frequeˆncia 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 img = imread('peppers gray.tif'); 13 14 %% Grab only the Red component to fake gray scaling 15 img = img(:,:,1); 16 imshow(img), title('Imagem Original'); 17 18 %% Preenchimento da matriz PQ 19 PQ = paddedsize(size(img)); 20 D0 = 0.05 * PQ(1); 21 22 %% Calculate the LPF 23 H = lpfilter('ideal', PQ(1), PQ(2), D0); 24 25 %% Calculate the discrete Fourier transform of the image 26 F = fft2(double(img),size(H,1),size(H,2)); 27 28 %% Multiply the Fourier spectrum by the LPF and apply the inverse, 29 %discrete Fourier transform 23 30 LPF img = real(ifft2(H.*F)); 31 32 %% Resize the image to undo padding 33 LPF img = LPF img(1:size(img,1), 1:size(img,2)); 34 figure, imshow(LPF img, []); %title('LPF'); 35 36 %% Display the Fourier Spectrum 37 Fc = fftshift(F); % move the origin of the transform to 38 %the center of the frequency rectangle 39 S2 = log(1+abs(Fc)); % use abs to compute the magnitude 40 %(handling imaginary) and use log to brighten display 41 figure, imshow(S2,[]), %title('Fourier Spectrum'); 42 43 %% Lowpass Filter Ideal 44 HLPF ideal = fftshift(lpfilter('ideal', 500, 500, 50)); 45 mesh(HLPF ideal(1:10:500,1:10:500)) 46 colormap([0 0 0]) 47 axis off 48 grid off 49 axis([0 50 0 50 0 1]) 50 figure, imshow(HLPF ideal) %title('Filter Ideal'); 51 52 %% Lowpass Filter Butterworth 53 HLPF btw = fftshift(lpfilter('btw', 500, 500, 50)); 54 figure, mesh(HLPF btw(1:10:500,1:10:500)) 55 colormap([0 0 0]) 56 axis off 57 grid off 58 axis([0 50 0 50 0 1]) 59 figure, imshow(HLPF btw) %title('Filter Butterworth'); 60 61 %% Lowpass Filter Gaussian 62 HLPF gauss = fftshift(lpfilter('gaussian', 500, 500, 50)); 63 figure, mesh(HLPF gauss(1:10:500,1:10:500)) 64 colormap([0 0 0]) 65 axis off 66 grid off 67 axis([0 50 0 50 0 1]) 68 figure, imshow(HLPF gauss) %title('Filter Gaussian'); Filtro passa-alta no domı´nio da frequeˆncia 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 img = imread('peppers gray.tif'); 13 14 %% Grab only the Red component to fake gray scaling 15 img=img(:,:,1); 16 imshow(img) %imagem original 24 17 18 %% Preenchimento da matriz PQ 19 PQ = paddedsize(size(img)); 20 D0 = 0.05*PQ(1); 21 22 %% Calculate the HPF 23 H = hpfilter('btw', PQ(1), PQ(2), D0); 24 F = fft2(double(img),size(H,1),size(H,2)); % Calculate the discrete 25 %Fourier transform of the image 26 HPF football = real(ifft2(H.*F)); % multiply the Fourier 27 %spectrum by the LPF and apply the inverse, discrete Fourier 28 %transform 29 HPF football = HPF football(1:size(img,1), 1:size(img,2)); 30 % Resize the image to undo padding 31 figure, imshow(HPF football, []) %imagem com filtro 32 33 %% Display the Fourier Spectrum 34 Fc=fftshift(F); % move the origin of the transform to the 35 %center of the frequency rectangle 36 S2=log(1+abs(Fc)); % use abs to compute the magnitude 37 %(handling imaginary) and use log to brighten display 38 figure, imshow(S2,[]) 39 40 %% Highpass Filter Ideal 41 HHPF ideal=fftshift(hpfilter('ideal', 500, 500, 50)); 42 mesh(HHPF ideal(1:10:500,1:10:500)) 43 colormap([0 0 0]) 44 axis off 45 grid off 46 axis([0 50 0 50 0 1]) 47 figure, imshow(HHPF ideal) 48 49 %% High Filter Butterworth 50 HHPF btw=fftshift(hpfilter('btw', 500, 500, 50)); 51 figure, mesh(HHPF btw(1:10:500,1:10:500)) 52 colormap([0 0 0]) 53 axis off 54 grid off 55 axis([0 50 0 50 0 1]) 56 figure, imshow(HHPF btw) 57 58 %% Highpass Filter Gaussian 59 HHPF gauss=fftshift(hpfilter('gaussian', 500, 500, 50)); 60 figure, mesh(HHPF gauss(1:10:500,1:10:500)) 61 colormap([0 0 0]) 62 axis off 63 grid off 64 axis([0 50 0 50 0 1]) 65 figure, imshow(HHPF gauss) 25 Transformada Haar 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 img = imread('football.jpg'); 13 14 %% Transformada Haar 15 A = haar(img, 1); 16 B = haar(img, 2); 17 C = haar(img, 3); 18 19 %% Mostra imagem 20 imshow(img) %Imagem Original 21 figure, imshow(A) %Imagem Haar 1 22 figure, imshow(B) %Imagem Haar 2 23 figure, imshow(C) %Imagem Haar 3 Detecc¸a˜o de Pele 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 img orig=imread('gustavo.png'); 13 14 figure, imshow(img orig) %, title('Original'); 15 16 img=img orig; %copy of original image 17 18 [m,n] = size(img(:,:,1)); 19 bin = ones(m,n); 20 21 hsv=rgb2hsv(img); 22 h=hsv(:,:,1); 23 s=hsv(:,:,2); 24 25 [r c v]=find(h>0.25 | s<=0.15 | s>0.9); %non skin 26 numid=size(r,1); 27 28 for i=1:numid 29 img(r(i),c(i),:)= 0; 26 30 end 31 32 figure, imshow(img); %title('Segmentacao HSV'); 33 34 35 %% Segmentacao YCbCr 36 img ycbcr=img; %image from the previous segmentation 37 ycbcr=rgb2ycbcr(img ycbcr); 38 cb=ycbcr(:,:,2); 39 cr=ycbcr(:,:,3); 40 41 %Detect Skin 42 [r,c,v] = find(cb>=77 & cb<=127 & cr>=133 & cr<=173); 43 %[r c v] = find(cb<=77 | cb >=127 | cr<=133 | cr>=173); 44 numid = size(r,1); 45 46 %Mark Skin Pixels 47 for i=1:numid 48 img ycbcr(r(i),c(i),:) = [0 0 255]; 49 bin(r(i),c(i)) = 0; 50 end 51 52 figure, imshow(img ycbcr) %, title('Segmentacao YCbCr'); 53 54 figure, imshow(bin) %, title('Segmentacao Binaria'); 55 56 57 %% Segmentacao RGB 58 59 img rgb=img ycbcr; 60 r=img rgb(:,:,1); 61 g=img rgb(:,:,2); 62 b=img rgb(:,:,3); 63 64 65 [row col v]= find(b>0.79*g-67 & b<0.78*g+42 & 66 b>0.836*g-14 & b<0.836*g+44 ); %non skin pixels 67 numid=size(row,1); 68 69 for i=1:numid 70 img rgb(row(i),col(i),:)=0; 71 end 72 73 figure, imshow(img rgb) %, title('Segmentacao RGB'); 27 Detecc¸a˜o de Objetos Coloridos 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 original = imread('lego.png'); 13 im = imfilter(original, ones(5)/25); 14 15 %% Tamanho da Imagem 16 [a l c] = size(im); 17 18 %% Convert and slice in HSV 19 im2 = rgb2hsv(im); 20 h = im2(:,:,1); 21 s = im2(:,:,2); 22 v = im2(:,:,3); 23 24 %% Detect color (binarize)25 %im2 = im 2bw(h, 0.2, 0.4) & im2bw(s, 0.25); % Verde 26 im2 = im 2bw(h, 0.6, 0.75) & im2bw(s, 0.3) & im2bw(v, 0.35); % Azul 27 %im2 = im 2bw(h, 0.1, 0.2) & im2bw(s, 0.25); % Amarelo 28 29 %% Show image 30 f = figure; 31 imshow(original); 32 33 %% Extract properties 34 [L Ne] = bwlabel(im2); 35 props = regionprops(L); 36 hold on 37 38 %% Plot rectangles, centroids and positions of objects 39 for i=1:size(props,1) 40 rectangle('Position', props(i).BoundingBox, 'EdgeColor', 41 'g', 'LineWidth', 2); 42 text(props(i).Centroid(1)+5, props(i).Centroid(2)+5, 43 sprintf('%.0f x %.0f',props(i).Centroid(1), 44 props(i).Centroid(2)),'FontSize',18); 45 plot(props(i).Centroid(1), props(i).Centroid(2), 46 'g*', 'LineWidth', 3); 47 end 28 Erosa˜o e Dilatac¸a˜o 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 img = imread('dog-3.gif'); 13 14 %% Elemento Estruturante 15 s = strel('square',5) % 11-by-11 square 16 s1 = strel('line',10,90) % length 10, angle 45 degrees 17 s2 = strel('disk',5) % disk, radius 15 18 19 %% Dilatacao e Erosao 20 f2 = imdilate(img,s); 21 f3 = imerode(img,s); 22 23 f4 = imdilate(img,s1); 24 f5 = imerode(img,s1); 25 26 f6 = imdilate(img,s2); 27 f7 = imerode(img,s2); 28 29 %% Mostra Imagens 30 subplot(3,3,1);imshow(img);title('original image1'); 31 subplot(3,3,2);imshow(f2);title('dilated image'); 32 subplot(3,3,3);imshow(f3);title('erosion image'); 33 34 subplot(3,3,4);imshow(img);title('original image2'); 35 subplot(3,3,5);imshow(f4);title('dilated image'); 36 subplot(3,3,6);imshow(f5);title('erosion image'); 37 38 subplot(3,3,7);imshow(img);title('original image3'); 39 subplot(3,3,8);imshow(f6);title('dilated image'); 40 subplot(3,3,9);imshow(f7);title('erosion image'); 29 Detecc¸a˜o de Objetos Conectados 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Primeiro teste 12 im = imread('pocket-20.jpg'); 13 14 img = im2bw(im, graythresh(im)); 15 cc1 = bwconncomp(img); 16 17 labeled = labelmatrix(cc1); 18 RGB label = label2rgb(labeled, @copper, 'c', 'shuffle'); 19 figure, imshow(im); 20 figure, imshow(RGB label,'InitialMagnification','fit'); 21 22 %% Segundo teste 23 im = imread('horseshoe-19.gif'); 24 figure, imshow(im); 25 cc1 = bwconncomp(im); 26 labeled = labelmatrix(cc1); 27 RGB label = label2rgb(labeled, @copper, 'c', 'shuffle'); 28 figure, imshow(RGB label,'InitialMagnification','fit'); 29 30 %% Terceiro teste 31 im = imread('dog-7.gif'); 32 figure, imshow(im); 33 cc1 = bwconncomp(im); 34 labeled = labelmatrix(cc1); 35 RGB label = label2rgb(labeled, @copper, 'c', 'shuffle'); 36 figure, imshow(RGB label,'InitialMagnification','fit'); 30 Gradiente Morfolo´gico 1 %% @autor: Gustavo Siebra 2 % IFCE - Campus Fortaleza 3 % Programa de Pos-Graduacao em Ciencias da Computacao - PPGCC 4 % Disciplina: Processamento Digital de Imagens - PDI 5 6 %% Limpeza 7 clear all 8 close all 9 clc 10 11 %% Le imagem 12 I = imread('pirate.tif'); 13 14 %% Gradiente Morfologico 15 se = strel(ones(3,3)); 16 basic gradient = imdilate(I, se) - imerode(I, se); 17 18 %% Mostra Imagem 19 figure, imshow(I); 20 figure, 21 h = imshow(basic gradient, [0 255]); 31
Compartilhar