Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Processamento digital, Manuais, Projetos, Pesquisas de Programação em Python

Processamento digital em python

Tipologia: Manuais, Projetos, Pesquisas

2019

Compartilhado em 23/09/2023

gabriel-baltazar-1
gabriel-baltazar-1 🇧🇷

4 documentos

1 / 16

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
TT902L-Introdução ao Trabalho de Conclusão de Curso
Tema: Processamento de Imagens Médicas
Relatório 2
Autor: Gabriel Alves Baltazar RA: 234628
Orientador: Prof. Rangel
Limeira
07 de Março de 2023
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Pré-visualização parcial do texto

Baixe Processamento digital e outras Manuais, Projetos, Pesquisas em PDF para Programação em Python, somente na Docsity!

TT902L-Introdução ao Trabalho de Conclusão de Curso

Tema: Processamento de Imagens Médicas

Relatório 2

Autor: Gabriel Alves Baltazar RA: 234628

Orientador: Prof. Rangel

Limeira

07 de Março de 2023

1 Introdução

Aplicação de processamentos morfológicos de imagens, erosão, dilatação, abertura, fecha-

mento, top-hat e watershad, utilizando Python e a biblioteca OpenCV (cv2).

O processamento morfológico de imagens é uma técnica utilizada para extrair informa-

ções sobre a forma, estrutura e geometria de objetos em imagens digitais. É uma técnica

fundamental no campo do processamento de imagens que permite analisar e manipular a

forma e estrutura dos objetos em uma imagem.

O processamento morfológico de imagens é baseado na teoria matemática da morfologia

matemática, que é um conjunto de operações matemáticas que envolvem a transformação

de formas geométricas em uma imagem. Essas operações são aplicadas a uma imagem

para extrair informações sobre a sua estrutura, como bordas, áreas, formas e texturas.

As operações morfológicas básicas incluem a erosão e a dilatação, que são usadas para

remover ou preencher pequenos buracos, bem como para separar ou unir objetos na ima-

gem. Outras operações morfológicas incluem a abertura e o fechamento, que são usados

para suavizar os contornos dos objetos e para eliminar ruídos ou irregularidades.

O processamento morfológico de imagens é amplamente utilizado em áreas como visão

computacional, reconhecimento de padrões, análise de imagem médica, inspeção de qua-

lidade, entre outras. É uma técnica poderosa para a segmentação de imagens, extração

de características e detecção de objetos em imagens digitais.

Em resumo, o processamento morfológico de imagens é uma técnica essencial em proces-

samento de imagens que permite analisar e manipular a forma e estrutura dos objetos em

uma imagem.

2.2 Erosão

A operação de erosão é uma das operações morfológicas básicas no processamento de

imagens. Ela é usada para remover pequenos detalhes ou regiões da imagem que não

correspondem ao padrão denido por um elemento estruturante.

A operação de erosão é aplicada a cada pixel da imagem e é denida pelo elemento

estruturante, que é um conjunto de pixels com uma determinada forma geométrica e

tamanho. Para cada pixel da imagem, o valor do pixel é alterado para o valor mínimo da

região correspondente ao elemento estruturante.

A operação de erosão é usada para suavizar as bordas dos objetos e remover pequenos

detalhes indesejados da imagem. Ela pode ser utilizada isoladamente ou em conjunto com

outras operações morfológicas, como a dilatação e a abertura, para segmentar objetos e

extrair características relevantes da imagem.

A escolha do elemento estruturante na operação de erosão é fundamental para o sucesso da

operação. Um elemento estruturante muito grande pode remover detalhes importantes da

imagem, enquanto um elemento estruturante muito pequeno pode não remover detalhes

indesejados. Por isso, é importante selecionar um elemento estruturante adequado para

cada aplicação.

Em resumo, a operação de erosão é uma das operações morfológicas básicas no proces-

samento de imagens. Ela é usada para remover pequenos detalhes indesejados da imagem

e suavizar as bordas dos objetos. A escolha do elemento estruturante é crucial para o

sucesso da operação.

1 import cv 2 from matplotlib import pyplot as plt 3 4 5 img = cv2. imread ( ' imagens / j. png ' , cv2. IMREAD_GRAYSCALE ) 6 7 ele1 = cv2. getStructuringElement ( cv2. MORPH_CROSS ,(7 ,7) ) 8 ele2 = cv2. getStructuringElement ( cv2. MORPH_ELLIPSE ,(7 ,7) ) 9 ele3 = cv2. getStructuringElement ( cv2. MORPH_RECT ,(7 ,7) ) 10 11 erode1 = cv2. erode ( img , ele1 ) 12 erode2 = cv2. erode ( img , ele2 ) 13 erode3 = cv2. erode ( img , ele3 ) 14 15 plt. subplot (2 ,2 ,1) , plt. imshow ( img , ' gray ') , plt. title ( ' ORIGINAL ') 16 plt. subplot (2 ,2 ,2) , plt. imshow ( erode1 , ' gray ') , plt. title ( ' CROSS ') 17 plt. subplot (2 ,2 ,3) , plt. imshow ( erode2 , ' gray ') , plt. title ( ' ELLIPSE ') 18 plt. subplot (2 ,2 ,4) , plt. imshow ( erode3 , ' gray ') , plt. title ( ' RECT ') 19 20 plt. show () 21 22 23 cv2. waitKey ()

24 cv2. destroyAllWindows ()

Este é um trecho de código Python que usa as bibliotecas OpenCV e Matplotlib para

realizar operações morfológicas em uma imagem.

Primeiro, o código importa as bibliotecas necessárias, incluindo cv2 (OpenCV) e pyplot

de matplotlib.

Em seguida, uma imagem é carregada usando a função cv2.imread() e armazenada em

uma variável chamada img.

Em seguida, três elementos estruturantes são denidos usando a função cv2.getStructuringElement(),

com formas e tamanhos diferentes: uma cruz, uma elipse e um retângulo. Esses elementos

estruturantes serão utilizados na operação de erosão posteriormente.

A função cv2.erode() é usada para executar erosão na imagem de entrada usando cada

um dos elementos estruturantes. O resultado de cada operação de erosão é armazenado

em uma variável separada (erode1, erode2 e erode3).

Finalmente, a imagem original e as três imagens erodidas são exibidas usando as funções

pyplot.subplot() e pyplot.imshow(). Os títulos de cada subtrama também são denidos

usando a função pyplot.title(). O gráco resultante é mostrado usando a função py-

plot.show().

No geral, o código demonstra o uso de diferentes elementos estruturantes na operação de

erosão e como eles afetam a imagem de entrada.

Resultado

Figura 2: Erosão

1 import cv 2 from matplotlib import pyplot as plt 3 4 5 img = cv2. imread ( ' imagens / j. png ' , cv2. IMREAD_GRAYSCALE ) 6 7 ele1 = cv2. getStructuringElement ( cv2. MORPH_CROSS ,(7 ,7) ) 8 ele2 = cv2. getStructuringElement ( cv2. MORPH_ELLIPSE ,(7 ,7) ) 9 ele3 = cv2. getStructuringElement ( cv2. MORPH_RECT ,(7 ,7) ) 10 11 dilate1 = cv2. dilate ( img , ele1 ) 12 dilate2 = cv2. dilate ( img , ele2 ) 13 dilate3 = cv2. dilate ( img , ele3 ) 14 15 plt. subplot (2 ,2 ,1) , plt. imshow ( img , ' gray ') , plt. title ( ' ORIGINAL ') 16 plt. subplot (2 ,2 ,2) , plt. imshow ( dilate1 , ' gray ') , plt. title ( ' CROSS ') 17 plt. subplot (2 ,2 ,3) , plt. imshow ( dilate2 , ' gray ') , plt. title ( ' ELLIPSE ') 18 plt. subplot (2 ,2 ,4) , plt. imshow ( dilate3 , ' gray ') , plt. title ( ' RECT ') 19 20 plt. show ()

Resultado

Figura 3: dilatação

2.4 Abertura

A operação de abertura é uma das operações morfológicas mais comuns no

processamento de imagens. Ela consiste na aplicação da operação de erosão

seguida da operação de dilatação.

A operação de abertura é usada para remover pequenos objetos, preencher

buracos e suavizar as bordas dos objetos. Ela é especialmente útil para

remover ruídos e outras imperfeições da imagem.

A operação de abertura é aplicada a cada pixel da imagem e é denida pelo

elemento estruturante, que é um conjunto de pixels com uma determinada

forma geométrica e tamanho. A operação de erosão remove pequenos objetos

e suaviza as bordas dos objetos, enquanto a operação de dilatação preenche

os buracos deixados pela erosão e conecta os objetos próximos.

1 import cv 2 3 4 img = cv2. imread ( ' imagens / opening. png ' , cv2. IMREAD_GRAYSCALE ) 5 kernel = cv2. getStructuringElement ( cv2. MORPH_CROSS ,(7 ,7) ) 6 7 8 opening = cv2. morphologyEx ( img , cv2. MORPH_OPEN , kernel ) 9 10 cv2. imshow ( ' Original ' , img ) 11 cv2. imshow ( ' Opening ' , opening ) 12 13 cv2. waitKey () 14 cv2. destroyAllWindows ()

Resultado

(a) entrada (b) saída

Figura 4: Operação de abertura

2.6 Top-Hat

A operação de top-hat é uma operação morfológica que envolve a subtração

de uma imagem de entrada da sua abertura. Ela é frequentemente utilizada

para realçar características pequenas ou nas em uma imagem.

A abertura é uma operação morfológica que consiste em aplicar a operação

de erosão seguida da operação de dilatação em uma imagem. A subtração

da imagem de entrada pela abertura resulta em uma imagem que destaca

características nas, como bordas e linhas.

A operação de top-hat pode ser aplicada a uma imagem em escala de cinza

ou em uma imagem binária. Em uma imagem binária, a operação de top-hat

destaca os objetos que são menores do que o elemento estruturante usado na

abertura.

O tamanho e a forma do elemento estruturante usado na operação de

top-hat afetam o resultado da operação. Um elemento estruturante maior

destaca características maiores, enquanto um elemento estruturante menor

destaca características menores.

Em resumo, O ltro top-hat é usado para aprimorar objetos brilhantes de

interesse em um fundo escuro.

1 import cv 2 3 4 img = cv2. imread ( ' imagens / tophat. png ' , cv2. IMREAD_GRAYSCALE ) 5 kernel = cv2. getStructuringElement ( cv2. MORPH_CROSS ,(7 ,7) ) 6 7 8 opening = cv2. morphologyEx ( img , cv2. MORPH_OPEN , kernel ) 9 10 topHat = img - opening 11 12 cv2. imshow ( ' Original ' , img ) 13 cv2. imshow ( ' Opening ' , topHat ) 14 15 cv2. waitKey () 16 cv2. destroyAllWindows ()

Resultado

(a) entrada (b) saída

Figura 6: Operação de top-hat

2.7 Watershed

A operação de Watershed é uma técnica de segmentação de imagens que

tem como objetivo separar regiões distintas em uma imagem, como áreas de

objetos ou elementos, com base em seus gradientes e intensidades.

Essa técnica funciona transformando a imagem em um mapa de elevação,

onde cada pixel é um ponto em um terreno. A partir disso, a imagem é divi-

dida em regiões com base em locais de baixa elevação, denominados mínimos

locais, que são considerados como marcadores de sementes. Então, a técnica

de Watershed é aplicada para preencher a imagem com água, simulando um

processo de inundação. Os marcadores de sementes atuam como represas,

evitando que a água inunde certas áreas da imagem.

Por m, os bordos das áreas inundadas representam as fronteiras de seg-

mentação da imagem. A operação de Watershed é muito utilizada em aplica-

ções de segmentação de imagens, em particular, para segmentação de objetos

em imagens médicas e de microscopia.

No entanto, a aplicação da técnica de Watershed pode ser complexa e

sensível a ruídos, exigindo o ajuste de parâmetros e o pré-processamento

adequado da imagem. Além disso, a seleção adequada dos marcadores de

sementes é crucial para obter uma segmentação precisa da imagem.

Proximo passo:

Removendo pequenos ruídos, obtendo o plano de fundo, achando

o primeiro plano e a região desconhecida.

1 # noise removal 2 kernel = np. ones ((3 , 3) , np. uint8 ) 3 opening = cv. morphologyEx ( thresh , cv. MORPH_OPEN , kernel , iterations =2) 4 # sure background area 5 sure_bg = cv. dilate ( opening , kernel , iterations =3) 6 # Finding sure foreground area 7 dist_transform = cv. distanceTransform ( opening , cv. DIST_L2 , 5) 8 ret , sure_fg = cv. threshold ( dist_transform , 0.7 * dist_transform. max () , 255 , 0) 9 # Finding unknown region 10 sure_fg = np. uint8 ( sure_fg ) 11 unknown = cv. subtract ( sure_bg , sure_fg ) 12 13 14 # cv. imshow ( ' Remocao de ruido ' , opening ) 15 # cv. imshow ( ' Plano de Fundo ' , sure_bg ) 16 # cv. imshow ( ' Primeiro Plano ' , sure_fg ) 17 # cv. imshow ( ' Regiao Desconhecida ' , unknown ) 18 19 # cv. waitKey () 20 # cv. destroyAllWindows ()

(a) Abertura (b) Plano de fundo

(c) Primeiro plano (d) Região desconhecida

Figura 8: Processo de Segmentação

Finalizando: Aplicando watershed

1 markers = cv. watershed ( img , markers ) 2 img [ markers == -1] = [0 ,0 ,255] 3 4 cv. imshow ( ' Watershed ' , np. uint8 ( img ) ) 5 6 cv. waitKey () 7 cv. destroyAllWindows ()

Resultado

(a) Marcadores Segmentados (b) Watershed

Figura 10: Processo de Watershed