Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Mestrado em Engenharia Biomédica
Análise Computacional de Imagens de
Focos de Criptas Aberrantes
Trabalhos Práticos
Diana Catarina Martins Cidre
Junho 2011
Análise Computacional de Imagens de Focos
de Criptas Aberrantes
Relatório realizado no âmbito da Unidade Curricular de
Trabalhos Práticos
Curso de Mestrado em Engenharia Biomédica
Faculdade de Engenharia da Universidade do Porto
Diana Catarina Martins Cidre
Licenciada em Engenharia Biomédica no Instituto Politécnico de
Bragança (2010)
Orientador:
João Manuel R. S. Tavares
Professor Auxiliar do Departamento de Engenharia Mecânica
Faculdade de Engenharia da Universidade do Porto
Página | III
AGRADECIMENTOS
Ao Professor João Tavares, pela orientação, pela simpatia, pelo apoio e
pela disponibilidade que sempre demonstrou.
Página | IV
RESUMO
A necessidade de segmentar imagens médicas surge na sequência da
evolução tecnológica, isto é, da necessidade do computador realizar “aquilo” que
para um médico é intuitivo – como isolar e/ou identificar uma estrutura numa
imagem. Com esta evolução não se pretende substituir o médico, mas sim auxilia-
lo na realização de um diagnóstico mais correcto, diminuindo o erro humano,
aumentando a rapidez dos processos de diagnosticar e seguimento de uma
doença e diminuindo custos sem a necessidade de recorrer a exames auxiliares e
complementares ao diagnóstico.
Neste trabalho prático usaram-se imagens de focos de criptas aberrantes
com a finalidade de segmentar as criptas existentes.
Para a realização do trabalho pratico recorreu-se ao software Matlab. Numa
primeira fase fez-se um pré-processamento das imagens originais para posterior
aplicação das técnicas de segmentação. Para simplificar a interacção e
comparação dos resultados obtidos, foi criada uma interface gráfica que permite
fácil acesso e parametrização das operações de processamento e análise
usadas.
Palavras-chave: Focos de criptas aberrantes, Matlab, processamento de
imagens, segmentação e interface gráfica de utilizador.
Página | V
ÍNDICE
1. Introdução ................................................................................................................ 1
2. Metodologia.............................................................................................................. 3
2.1. Pré-Processamento ........................................................................................... 3
2.1.1. Operações de Intensidade .......................................................................... 4
2.1.2. Operadores Locais ..................................................................................... 4
2.1.3. Operadores Morfológicos............................................................................ 6
2.2. Segmentação .................................................................................................... 6
2.2.1. Segmentação por Threshold ....................................................................... 7
2.2.2. Segmentação Baseada em Contornos ....................................................... 8
2.2.3. Segmentação Baseada em Regiões ........................................................... 9
2.3. Interface Gráfica com o Utilizador (GUI) .......................................................... 11
2.3.1. Desenho da Interface ............................................................................... 12
2.3.2. Interface Desenvolvida ............................................................................. 14
3. Análise dos Resultados .......................................................................................... 19
3.1. Pré-Processamento ......................................................................................... 19
3.2. Segmentação .................................................................................................. 24
3.3. Aplicação do Processamento em Outras Imagens .......................................... 26
4. Conclusão .............................................................................................................. 29
5. Referências ............................................................................................................ 30
Anexos ....................................................................................................................... 31
Página | VI
ÍNDICE DE FIGURAS
Figura 1 – Focos de Criptas Aberrantes ........................................................................... 2
Figura 2 – Componentes de uma Interface Gráfica .........................................................12
Figura 3 – Desenho da Interface pretendida. ..................................................................13
Figura 4- Fig-File da interface construída. .......................................................................14
Figura 5 – Janela da pasta onde estão as imagens, que abre ao clicar no botão Load, onde se escolhe a imagem inicial. ...................................................................................15
Figura 6 – Imagem inicial colocada na primeira área de imagem. ...................................15
Figura 7 – Selecção da operação a executar, dos seus parâmetros, e imagem processada na segunda área de imagem. .......................................................................16
Figura 8 – Troca da imagem original pela imagem processada e “limpeza” da segunda área de imagem. ..............................................................................................................16
Figura 9 – Execução de uma segunda operação de processamento sobre uma imagem já processada anteriormente. ...........................................................................................17
Figura 10 – Nova figura independente criada ao clicar no botão Output. ........................17
Figura 11 – Selecção do botão Save Processed Image que vai guardar a imagem processada na pasta pretendida. .....................................................................................18
Figura 12 – Selecção do botão Close the Window que vai fechar a janela da interface. .18
Figura 13 – Resultados do Filtro Média para diferentes tamanhos de máscara. .............20
Figura 14 - Resultados do Filtro Gaussiano para diferentes tamanhos de máscara. .......20
Figura 15 - Resultados do Filtro Mediana para diferentes tamanhos de máscara. ..........21
Figura 16 - Resultados do Filtro Mínimo para diferentes tamanhos de máscara. ............21
Figura 17 - Resultados do Filtro Máximo para diferentes tamanhos de máscara. ...........22
Figura 18 – Melhor resultado para cada filtro de suavização. ..........................................23
Figura 19 – Equalização e Expansão do Histograma sobre a Imagem Suavizada ..........23
Figura 20 – Aplicação dos Filtros de Realce à imagem depois da expansão. .................24
Figura 21 – Aplicação de operações morfológicas (à esquerda: abertura e à direita: fecho). .............................................................................................................................24
Página | VII
Figura 22 – Aplicação do método de Otsu às imagens depois processadas com os operadores morfológicos (à esquerda: abertura e à direita: fecho). .................................25
Figura 23 – Negativo da imagem depois do pré-processamento .....................................25
Figura 24 – Aplicação do Watershed à imagem pré-processada com ajuda de operadores morfológicos. ...................................................................................................................26
Figura 25 – Imagem A pré-processada (em cima à esquerda), com aplicação do método de Otsu (em cima à direita) e com aplicação do método de Watershed (em baixo). ........27
Figura 26 - Imagem B pré-processada (em cima à esquerda), com aplicação do método de Otsu (em cima à direita) e com aplicação do método de Watershed (em baixo). ........27
Figura 27 - Imagem C pré-processada (em cima à esquerda), com aplicação do método de Otsu (em cima à direita) e com aplicação do método de Watershed (em baixo). ........28
Página | 1
1. INTRODUÇÃO
O cancro do cólon desenvolve-se no intestino grosso, sendo designado por
cancro colorectal (CCR) e é um dos tumores malignos mais frequentes, sendo
que em Portugal, em termos de mortalidade, está entre os cinco tipos de cancro
mais importantes. Ao contrário do que acontece com outras doenças malignas, é
possível evitar o cancro colorectal devido ao longo período de tempo desde o
aparecimento de um pólipo até ao aparecimento do carcinoma que possibilita
detectar e remover a lesão benigna. Os pólipos mais usuais e clinicamente mais
importantes são os pólipos adenomatosos e de acordo com indicações médicas
internacionais, a detecção precoce e a remoção destes pólipos pode prevenir o
cancro colorectal e aumentar significativamente as hipóteses de sobrevivência.
No entanto, muitos aspectos de saúde pública relacionados com a prevenção dos
pólipos adenomatosos estão ainda em discussão, não existindo acordo sobre os
programas de prevenção. Neste contexto, os focos de criptas aberrantes (FCA)
podem ter um papel crucial e determinante[1].
Os focos de criptas aberrantes são grupos de criptas (pequenos poços, no
epitélio do cólon) aberrantes (não normais), que se supõem serem os precursores
do cancro colorectal. A sua observação in vivo é hoje possível graças às
modernas técnicas endoscópicas de amplificação e de cromoscopia e definem-se
como um conjunto de uma ou mais criptas, de maiores dimensões e
discretamente elevadas relativamente às circundantes, apresentando uma
camada de células epiteliais espessa que cora mais intensamente com o azul-de-
metileno que a das criptas adjacentes, existindo igualmente um aumento de
espaço peri-críptico (Figura 1). De facto, de acordo com estudos endoscópicos e
experiencias com animais, os FCA precedem a eclosão dos adenomas. Assim, se
tal for comprovado, isto significa que os focos de criptas aberrantes deverão ser
considerados parte da sequência adenoma-carcinoma e poderão vir a ser
utilizados não só na estratificação do risco, mas também na investigação de
agentes activos na quimioprevenção do carcinoma colo-rectal[1].
Página | 2
Figura 1 – Focos de Criptas Aberrantes[1]
.
Este trabalho prático trata do processamento de imagens endoscópicas de
FCA. O seu objectivo principal é estudar e comparar algoritmos de
processamento e análise de imagem que permitam o auxilio ao diagnóstico
médico, para prevenção e tratamento do cancro colorectal.
Os métodos actuais utilizados para classificar os FCA e os pólipos são
subjectivos pois baseiam-se em observações médicas directas, apenas, e não
estão automatizados, nem estandardizados. É necessário ter soluções, fiáveis,
capazes de identificar e detectar os focos de criptas aberrantes e reconhecer e
classificar os diversos tipos de pólipos.
As imagens de FCA que foram utilizadas neste trabalho foram obtidas com
colonoscopia, com cromoscopia e magnificação, e com endoscopia flexível.
Os algoritmos de processamento de imagem têm como objectivo serem
usados como métodos auxiliares na leitura e análise clínica, como métodos
auxiliares na estandardização dos padrões dos orifícios de criptas e classificação
dos padrões dos pólipos, e ainda permitir reduzir significativamente o tempo de
análise das imagens endoscópicas. Assim, tais algoritmos facilitariam e
acelerariam os programas de vigilância e prevenção do cancro colorectal.
Página | 3
2. METODOLOGIA
O objectivo primordial deste trabalho prático foi analisar vários algoritmos de
processamento e análise de imagens incluídos no pacote Matlab em imagens de
focos de criptas aberrantes, tentando obter uma segmentação de baixo nível; isto
é, uma segmentação elementar. Assim, usaram-se e analisaram-se técnicas de
pré-processamento para preparar as imagens para a segmentação, seguido da
aplicação e ensaio de técnicas usuais de segmentação. Para tal, foi desenvolvida
uma interface gráfica para facilitar a utilização das técnicas usadas e comparação
dos resultados obtidos.
22..11.. PPRRÉÉ--PPRROOCCEESSSSAAMMEENNTTOO
Antes de realizar a segmentação é necessário restaurar e/ou realçar as
imagens originais de forma a obter resultados mais precisos. Para isso são
normalmente realizadas operações de intensidade, operações locais e operações
morfológicas, de maneira a melhorar a qualidade da imagem a ser segmentada.
Pode ser preciso retirar o ruído presente numa imagem suavizando a
mesma, bem como melhorar o brilho e o contraste, normalizar a gama de valores
de intensidade, realçar detalhes pondo em evidência características de interesse,
preservar atributos essências da forma dos objectos e remover detalhes
irrelevantes.
Dos operadores de intensidade fazem parte a equalização e a expansão do
histograma, nas operações locais usou-se o filtro de média, o mediana, o
Gaussiano, o de mínimo e o de máximo, o Laplaciano, o High-Boost e o Unsharp,
e, por fim, nas operações morfológicas utilizou-se a erosão e a dilatação e
algumas das suas combinações, como o open e o close.
Página | 4
22..11..11.. OOPPEERRAAÇÇÕÕEESS DDEE IINNTTEENNSSIIDDAADDEE
As técnicas de modificação de histograma (operações de intensidade) são
conhecidas como técnicas ponto-a-ponto, uma vez que o valor de cinzento de um
certo pixel após o processamento depende apenas do seu valor original.
A Equalização do Histograma (histeq) aumenta o contraste das imagens,
transformando os valores numa imagem de intensidade de modo a que o
histograma da imagem resultado corresponda aproximadamente a um histograma
especificado.
Quando uma imagem apresenta uma distribuição não uniforme de níveis de
cinzento o processo de equalização de histograma, que visa o aumento da
uniformidade dessa distribuição, produz bons resultados permitindo assim realçar
diferenças de tonalidade e resultando no aumento do nível de detalhes
perceptíveis.
A expansão do histograma (imadjust) ajusta os valores de intensidade da
imagem aumentando o contraste da mesma. Nesta técnica, o histograma original
de uma imagem é modificado de tal forma que parte dele é expandida para
ocupar toda a faixa de cinzento da imagem resultante[2].
22..11..22.. OOPPEERRAADDOORREESS LLOOCCAAIISS
Nas técnicas de processamento orientadas à vizinhança (operadores locais),
o valor resultante do processamento depende do valor original do pixel e, de
alguma forma, dos pixels que circundam o elemento de imagem original.
Filtro Media - Neste filtro o valor de cinzento de cada pixel é substituído pela
média local da sua vizinhança. Tem como efeitos o blurring (desfocagem) ou
suavização da imagem. Quanto maior a máscara usada, maior a quantidade de
filtragem e maior será a quantidade de ruído reduzido o que implica uma superior
perda de detalhes. O efeito do filtro da média é eliminar conjuntos de pixels mais
claros ou mais escuros em relação aos pixels vizinhos[3].
Filtro Gaussiano – Filtro de alisamento; é adequado para remover ruídos
com distribuição normal. Actua na imagem trocando cada pixel por uma média
Página | 5
ponderada dos pixels vizinhos, evitando o espalhamento de uma propriedade
local da imagem[3].
Filtro Mediana – Este filtro procura eliminar o ruído sem sofrer os efeitos do
filtro de média. Ao utilizar uma máscara de dimensões mxn, o elemento central é
substituído pelo elemento central do vector ordenado constituído pelos m*n
elementos. Assim, retira ruído sem afectar gravemente a nitidez e preserva os
contornos[3].
Filtro de Máximo e de Mínimo – Atribui ao pixel em (i,j), o valor máximo ou
mínimo na vizinhança em torno do pixel. O filtro de máximo realça os pixels de
maior brilho na imagem, enquanto o filtro de mínimo realça os de menor brilho[3].
Filtro Laplaciano – Filtro do tipo passa-alto para detectar contornos que
geralmente funciona adequadamente ao realçar as descontinuidades, ou seja,
regiões de mudança rápida de intensidade. O seu resultado pode ser combinado
com a imagem original para evidenciar as características realçadas. É sensível ao
ruído, tendo que ser usado depois de um filtro que suavize a imagem para se
obterem melhores resultados[4].
Filtro Unsharp – Este filtro é obtido a partir do inverso do filtro Laplaciano. É
um filtro que mantém o contraste da imagem e preserva bem os limites, notando-
se também uma degradação na qualidade da imagem. O filtro Unsharp é um
simples operador de realce que recebe o seu nome pelo facto de realçar limites (e
outras componentes de alta frequência numa imagem), através da subtracção de
uma imagem suavizada à imagem original[4].
Filtro High-Boost – Filtragem passa-alto pode ser vista como a subtracção
de uma imagem filtrada com um filtro passa-baixo à imagem original. No entanto,
muitas vezes onde há a necessidade de obter uma imagem filtrada com um filtro
passa-alto, é também necessário reter algumas das componentes de baixa-
frequência para ajudar na interpretação da imagem. Então, ao multiplicar a
imagem original por um factor de amplificação antes de subtrair a imagem filtrada
com um filtro passa-baixo, obtém-se um filtro high-boost que enfatiza as altas
frequências[4].
Página | 6
22..11..33.. OOPPEERRAADDOORREESS MMOORRFFOOLLÓÓGGIICCOOSS
A aplicação de operadores morfológicos é um passo importante para certas
operações de processamento de imagem, tais como, de realce de contraste,
remoção de ruído e segmentação.
A dilatação e a erosão são duas operações morfológicas fundamentais. A
dilatação acrescenta pixels aos limites dos objectos de uma imagem, enquanto a
erosão remove tais elementos. O número de pixels adicionados ou removidos dos
objectos depende do tamanho e da forma do elemento estruturante utilizado para
processar a imagem. O elemento estruturante é o elemento fundamental das
operações de dilatação e de erosão.
Para implementar certas operações de processamento de imagem, as
operações de erosão e de dilatação são usadas frequentemente em conjunto. As
duas combinações mais comuns destas duas operações são a abertura e o fecho.
A definição de uma abertura morfológica de uma imagem é uma erosão seguida
de uma dilatação, usando o mesmo elemento estruturante para ambas as
operações. A operação relacionada, o fecho morfológico de uma imagem, é o
inverso, ou seja, baseia-se numa dilatação seguida de uma erosão, com o mesmo
elemento estruturante.
A operação morfológica de abertura pode ser usada para remover pequenos
objectos de uma imagem preservando a forma e o tamanho dos objectos maiores,
enquanto a operação de fecho elimina pequenas aberturas nos objectos da
imagem, preenche falhas nos contornos e junta objectos que estejam
relativamente próximos[5].
22..22.. SSEEGGMMEENNTTAAÇÇÃÃOO
A segmentação de imagem é uma das tarefas mais importantes para a
análise de objectos em imagens. O seu principal objectivo consiste em identificar
as regiões de uma imagem que possuam uma correlação forte com objectos ou
regiões do mundo real. Para se conseguir uma segmentação completa, isto é,
obter um conjunto de regiões disjuntas que correspondem a objectos
Página | 7
representados na imagem, é frequentemente necessário um processamento de
alto nível que contenha informação específica do problema; caso contrário poder-
se-á obter uma segmentação parcial, em que as regiões não correspondam
directamente a objectos na imagem.
Mas existem várias situações de segmentação que podem ser resolvidas
usando processamento de baixo nível, ou seja, técnicas elementares de
segmentação. Nestes casos, as imagens frequentemente contêm objectos com
contraste, localizados sob um fundo uniforme, como por exemplo, caracteres
impressos, células, etc. Nesta situação, pode ser usado um critério global, como
um threshold, obtendo-se uma segmentação completa da imagem em objectos e
fundo da imagem.
Os métodos de segmentação de baixo nível podem ser divididos em três
categorias, de acordo com as suas características principais. O primeiro grupo
depende do conhecimento global das propriedades da imagem sendo, em regra,
baseado no histograma da imagem. O segundo grupo corresponde à
segmentação baseada em contornos determinados por mudanças bruscas de
intensidade. A segmentação baseada em regiões corresponde ao terceiro grupo;
usando uma metodologia de subdivisão da imagem em regiões de acordo com
um critério pré-definido. Devido às diferentes características dos métodos de
segmentação baseados em contornos e baseados em regiões, os resultados
destes métodos podem ser combinados para melhorar a detecção da estrutura a
segmentar[6].
22..22..11.. SSEEGGMMEENNTTAAÇÇÃÃOO PPOORR TTHHRREESSHHOOLLDD
O critério de segmentação mais simples consiste na aplicação de um
threshold a uma imagem. Muitos objectos ou regiões em imagens são
caracterizados pela sua capacidade de reflexão ou absorção de luz nas suas
superfícies, correspondendo a cores ou a níveis de cinzento na imagem. Pode ser
determinada uma constante associada a estes níveis, ou seja, um threshold, para
segmentar objectos e o seu fundo. Aplicar um threshold é computacionalmente
Página | 8
simples e rápido; é um dos métodos de segmentação mais antigos e ainda
globalmente mais usado em segmentações elementares.
A aplicação de um threshold corresponde à transformação de uma imagem f,
numa imagem binária g (segmentada):
onde T é o threshold, para elementos da imagem que correspondem a
objectos ou estruturas, para elementos da imagem que pertencem ao
fundo (ou vice-versa).
O valor do threshold é crucial para o sucesso de uma segmentação por
threshold. Este valor pode ser determinado interactivamente ou ser o resultado de
um critério de detecção de threshold.
Somente em circunstâncias muito especiais, a aplicação de um único
threshold produz uma segmentação correcta em toda a imagem (threshold global)
uma vez que, mesmo as imagens mais simples podem conter variações na
intensidade dos objectos e do fundo. Estas variações podem ser devidas a
incidência (no objecto) de iluminação não uniforme, parâmetros do sistema de
aquisição não uniformes, etc. A solução para este caso corresponde a efectuar a
segmentação usando um threshold local e adaptativo, no qual o valor do threshold
depende de características locais da imagem[6].
22..22..22.. SSEEGGMMEENNTTAAÇÇÃÃOO BBAASSEEAADDAA EEMM CCOONNTTOORRNNOOSS
A segmentação baseada em contornos foi um dos primeiros critérios usados
em segmentação, utiliza os contornos extraídos de uma imagem, por um
processo de detecção de contornos, que correspondam a descontinuidades em
níveis de cinzento, cor, textura, etc. Pode ser usada uma grande variedade de
operadores de detecção de contornos, como o gradiente, operador de Roberts,
operador de Sobel, operador de Prewitt, operador de Canny, etc. O objectivo final
é agrupar contornos locais numa imagem onde existe somente conjuntos de
Página | 9
contornos que possuam uma correspondência para objectos ou partes de
imagem.
O problema mais frequente da segmentação baseada em contornos,
causado pelo ruído ou por regiões com fronteira difusa na imagem, é a presença
de contornos (pixels) onde não existe fronteira do objecto (falsos contornos), ou a
ausência de contornos onde existe uma fronteira real do objecto. Os pixels
correspondentes a um objecto numa imagem não possuem valores uniformes,
uma vez que são afectados por ruído, irregularidades da luz incidente, etc., é
portanto necessário que o operador de detecção de contornos seja
suficientemente flexível para não classificar como contornos as fronteiras das
áreas de fundo, quando estas estão influenciadas pelo ruído. Assim, os algoritmos
de detecção de contornos são tipicamente seguidos por procedimentos de ligação
de contornos.
Considerando agora a relação global dos contornos, ao contrário da análise
local referida no parágrafo anterior, os contornos podem ser ligados desde que
correspondam a objectos com forma e dimensões conhecidas. A segmentação
pode ser considerada como um problema de localizar estes objectos na imagem.
Um método eficiente para resolver este problema é a transformada de Hough,
capaz de detectar rectas e circunferências. Uma grande vantagem deste método
é a sua robustez, ou seja, não é muito sensível ao ruído ou outros artefactos na
imagem. A desvantagem é que nem sempre é possível saber as expressões
analíticas que descrevem as fronteiras dos objectos a segmentar[6].
22..22..33.. SSEEGGMMEENNTTAAÇÇÃÃOO BBAASSEEAADDAA EEMM RREEGGIIÕÕEESS
Enquanto o objectivo dos métodos de segmentação baseados em contornos
consiste em encontrar as fronteiras entre regiões, os métodos baseados em
regiões identificam directamente essas regiões. É fácil construir regiões a partir
das fronteiras sendo igualmente fácil detectar fronteiras a partir das regiões. No
entanto, o resultado da segmentação de métodos baseados em contornos e
métodos baseados em regiões não é, em geral, o mesmo, sendo uma boa
estratégia a combinação dos dois resultados. Os métodos de segmentação
Página | 10
baseados em regiões podem usar técnicas de crescimento de regiões, anexação
de regiões, separação de regiões ou ainda uma combinação de outras técnicas.
Os critérios associados a cada uma destas técnicas são idênticos, pelo que se
descreve apenas uma destas metodologias.
Em imagens com ruído, onde as fronteiras são difíceis de detectar, a técnica
de crescimento de regiões geralmente produz melhores resultados do que as
restantes técnicas.
A homogeneidade é uma propriedade importante das regiões, usada como o
critério principal de segmentação no crescimento de regiões, na qual a ideia base
consiste em dividir a imagem em zonas de máxima homogeneidade. O critério da
homogeneidade pode ser baseado em níveis de cinzento, cor, textura, etc. Apesar
do método de crescimento de regiões ser frequentemente aplicado em 2D,
também é possível efectuar implementações em 3D.
As regiões resultantes da segmentação da imagem devem ser homogéneas
e "máximas", onde "máximas" significa que o critério da homogeneidade deixa de
ser verdadeiro depois de esta região anexar qualquer outra região adjacente; ou
seja, já não existe qualquer outra região vizinha com a mesma homogeneidade
que possa ser anexada à região resultante do crescimento.
O método natural de crescimento de regiões corresponde a iniciar o
crescimento a partir de um dos pixels ou um grupo de pixels que define uma
região de uma imagem. As regiões são anexadas desde que satisfaçam o critério
de homogeneidade.
Um método alternativo, a segmentação por Watershed baseia-se no conceito
de Watershed da topografia, isto é, na representação da imagem usando as suas
duas dimensões (coordenadas espaciais) e ainda a sua intensidade. Nesta
interpretação topográfica, consideram-se 3 tipos de pontos: a) pontos
pertencentes a um mínimo regional (local); b) pontos em que se for colocada uma
“gota de água”, esta irá de certeza deslocar-se para o mesmo mínimo; c) pontos
(exemplo, os “picos das montanhas”) nos quais a “água” irá deslocar-se para mais
de um destes mínimos. Os conjuntos de pontos que satisfazem a condição b) de
um mínimo regional (local) específico são chamados mínimos desses Watershed.
Página | 11
Os conjuntos de pontos que satisfazem a condição c), ou seja os picos ou vértices
da “superfície topográfica”, são chamados linhas de divisão ou linhas de
Watershed.
O objectivo principal de este tipo de segmentação é encontrar as linhas de
fronteira de Watershed. A ideia básica é simples e usando a seguinte analogia:
admitindo-se que é efectuado um orifício em cada mínimo regional (local) e toda a
superfície topográfica é colocada sobre a água, permite-se que a água entre pelos
orifícios e com velocidade constante. Quando a água que preenche vales distintos
começa a transbordar, na margem desse vale é construída uma barragem com o
objectivo de impedir que a água de um vale vá inundar outro vale. O enchimento
dos vales irá eventualmente chegar a uma situação em que somente os topos
(vértices) das barragens estão visíveis, acima da linha de água. Estas fronteiras
das barragens correspondem às linhas de divisão de Watershed. Portanto, são as
fronteiras contínuas extraídas por este método de segmentação[6].
22..33.. IINNTTEERRFFAACCEE GGRRÁÁFFIICCAA CCOOMM OO UUTTIILLIIZZAADDOORR ((GGUUII))
Para facilitar a utilização das ferramentas disponibilizadas pelo Matlab, bem
como outras a desenvolver no âmbito deste projecto, e para uma melhor análise
dos resultados, existe uma ferramenta que permite construir interfaces gráficas de
interacção com o utilizador (GUI – “Graphical User Interface”). Para iniciar a
criação de uma nova interface, basta escrever guide (GUI Design Environment)
no command window do Matlab, abrindo-se de imediato uma janela para edição
do aspecto que irá ter a nova interface a ser construída.
O desenho da interface é um passo importante, e é vantajoso ter uma ideia
muito bem definida do que se pretende fazer para haver mais facilidade em
construir esta ferramenta de interacção com o utilizador[7].
Página | 12
22..33..11.. DDEESSEENNHHOO DDAA IINNTTEERRFFAACCEE
O primeiro passo a realizar na criação de uma interface gráfica é o desenho
dos componentes que se pretende que façam parte desta e a sua organização e
escolha do seu aspecto da maneira que se pretender tendo em conta uma boa
disposição que facilite a sua utilização e não esquecendo também o gosto
pessoal.
Existem vários tipos de componentes que podemos utilizar na criação da
interface (Figura 2). Os componentes dividem-se em controlos gráficos, dos quais
fazem parte os botões (Push Button) e as caixas de edição (Edit Text), em
elementos estáticos, sendo um exemplo as caixas de texto (Static Text), em
menus (Pop-up Menu) e em eixos (Axes). Os botões geram uma acção quando
são clicados, as caixas de edição permitem ao usuário inserir ou modificar
sequências de texto que podem ser usadas como input, as caixas de texto
estático exibem linhas de texto usadas para dar indicações úteis ao utilizador, os
menus exibem uma lista de opções quando se clica na seta e os eixos permitem
que a interface exiba elementos gráficos (gráficos e imagens).
Figura 2 – Componentes de uma Interface Gráfica.
Página | 13
Como o principal objectivo da interface feita neste trabalho era facilitar a
comparação dos resultados obtidos ao usar várias técnicas de pré-processamento
e de segmentação, foram criadas duas janelas de eixos para abrir duas imagens,
vários botões que permitem a execução de varias acções e menus e caixas de
edição para definir a técnica a utilizar e os seus parâmetros (Figura 3).
Figura 3 – Desenho da Interface pretendida.
Depois de completar o desenho da interface, pode-se seguir para a sua
programação de maneira a que funcione da maneira que se pretende. Quando se
grava o desenho são criados dois ficheiros, um ficheiro M-file onde se encontra o
código que controla a interface e onde é feita a sua programação, e um ficheiro
Fig-file que contém a descrição completa do layout e dos componentes do GUI e
que não pode ser modificada (apenas alterando o guide). Assim, quando se grava
as edições feitas no guide estas alterações ficam gravadas no Fig-file e quando
se programa a interface, o código fica armazenado no M-file.
Com a estrutura da interface construída, falta apenas programa-la para que
cada botão e cada componente existente funcionem da maneira que se desejou,
ou seja, para que o GUI responda aos eventos (cliques no botão, selecção de
componentes de menu, etc.). Esta programação tem a forma de um conjunto de
funções, chamadas de callbacks, para cada componente e para a figura do
próprio GUI.
Página | 14
Por fim, depois de finalizada a edição do M-file e do Fig-file, a interface está
pronta a ser utilizada.
22..33..22.. IINNTTEERRFFAACCEE DDEESSEENNVVOOLLVVIIDDAA
A interface desenvolvida tem o seguinte Fig-File mostrado na Figura 4
(estando o M-file correspondente apresentado em anexo):
Figura 4- Fig-File da interface construída.
Como já foi dito anteriormente, o objectivo desta GUI é a comparação dos
resultados obtidos por técnicas de pré-processamento e de segmentação. Assim
vamos ter duas janelas para as duas figuras. O primeiro botão, Load, vai carregar
a figura original e mostrá-la na primeira área de imagem (Figura 5 e Figura 6).
Página | 15
Figura 5 – Janela da pasta onde estão as imagens, que abre ao clicar no botão Load, onde se escolhe a imagem inicial.
Figura 6 – Imagem inicial colocada na primeira área de imagem.
De seguida, selecciona-se o tipo de operação de pré-processamento que se
quer utilizar (Operation to Execute), o valor dos parâmetros dessa operação (Size
of the Mask ou Size of the Structural Element) e carrega-se no botão Execute the
Operation que coloca o resultado do processamento na segunda área de imagem
(Figura 7).
Página | 16
Figura 7 – Selecção da operação a executar, dos seus parâmetros, e imagem processada na segunda área de imagem.
Como pode ser necessário executar outra operação sobre a imagem já
processada, pode-se substituir a imagem inicial pela imagem resultado
colocando-a na primeira área de imagem e limpando a segunda área de imagem
da interface. Para tal, clica-se no botão Swap the Initial Image (Figura 8).
Figura 8 – Troca da imagem original pela imagem processada e “limpeza” da segunda área de imagem.
Depois de alterada a imagem inicial, selecciona-se outra operação de
processamento e atribui-se um valor ao respectivo parâmetro, se for necessário, e
Página | 17
volta-se a carregar no botão Execute the Operation para executar essa operação
(Figura 9).
Figura 9 – Execução de uma segunda operação de processamento sobre uma imagem já processada anteriormente.
Sempre que for necessário visualizar a imagem processada em tamanho
superior numa janela independente, basta seleccionar o botão Output e é criada
uma nova figura com a imagem processada (Figura 10).
Figura 10 – Nova figura independente criada ao clicar no botão Output.
Se for pretendido guardar a imagem processada para futuramente poder ser
visualizada, sem ser necessário correr novamente o código, clica-se no botão
Página | 18
Save Processed Image e esta é guardada na pasta onde está guardado o código
(Figura 11).
Figura 11 – Selecção do botão Save Processed Image que vai guardar a imagem processada na pasta pretendida.
Finalmente, quando todas as operações pretendidas estiverem terminadas,
e se quiser fechar a interface, basta pressionar o botão Close The Window e a
janela é automaticamente encerrada (Figura 12).
Figura 12 – Selecção do botão Close the Window que vai fechar a janela da interface.
Página | 19
3. ANÁLISE DOS RESULTADOS
Nesta secção são analisados os resultados experimentais obtidos no
processamento e análise de imagens de focos de criptas aberrantes utilizando,
para uma análise mais amigável, a interface gráfica desenvolvida.
33..11.. PPRRÉÉ--PPRROOCCEESSSSAAMMEENNTTOO
Primeiro analisou-se os resultados obtidos, para uma das imagens, com os
filtros de suavização (média, Gaussiano, mediana, mínimo e máximo) com
diferentes tamanhos de máscaras: 5x5, 9x9, 15x15 e 19x19. Para cada filtro
escolheu-se o melhor resultado.
Em cada filtro escolheu-se a máscara que retira-se o ruído da imagem, mas
ao mesmo tempo que não distorce-se em demasia os limites das criptas. Na
Tabela 1 e nas Figura 13, Figura 14, Figura 15, Figura 16 e Figura 17 pode-se ver
qual o melhor resultado obtido para cada filtro.
Tabela 1 – Melhor máscara para cada um dos filtros de suavização.
Filtro Aplicado Melhor Máscara
Média 9x9
Gaussiano 19x19
Mediana 9x9
Mínimo 5x5
Máximo 5x5
Página | 20
Figura 13 – Resultados do Filtro Média para diferentes tamanhos de máscara.
Figura 14 - Resultados do Filtro Gaussiano para diferentes tamanhos de máscara.
Página | 21
Figura 15 - Resultados do Filtro Mediana para diferentes tamanhos de máscara.
Figura 16 - Resultados do Filtro Mínimo para diferentes tamanhos de máscara.
Página | 22
Figura 17 - Resultados do Filtro Máximo para diferentes tamanhos de máscara.
A partir dos “melhores” resultados obtidos verificou-se que o mais apropriado
a utilizar como filtro de suavização foi o filtro de Mediana, Figura 18.
Página | 23
Figura 18 – Melhor resultado para cada filtro de suavização.
Depois de feita a selecção do melhor filtro de suavização e de qual o melhor
parâmetro a utilizar testou-se este resultado com a expansão e com a equalização
do histograma para verificar se a imagem ficaria com uma distribuição das
intensidades mais favorável.
Pode-se concluir ao visualizar a Figura 19 que ao aplicar a expansão do
histograma obtém-se bons resultados.
Figura 19 – Equalização e Expansão do Histograma sobre a Imagem Suavizada .
Página | 24
Para tentar dar mais realce aos contornos da cripta aplicaram-se os filtros de
realce (Laplaciano, High-Boost e Unsharp). Como se pode ver na Figura 20, o
filtro que obtém melhores resultados é o High-Boost.
Figura 20 – Aplicação dos Filtros de Realce à imagem depois da expansão.
33..22.. SSEEGGMMEENNTTAAÇÇÃÃOO
Neste trabalho foram estudadas duas técnicas de segmentação de baixo-
nível: o método de Otsu (segmentação por threshold) e o método de Watershed
(segmentação baseada em regiões). Assim, às imagens resultantes da sequência
de pré processamento foram aplicadas essas duas técnicas de segmentação.
O método de Otsu é um método de detecção automática de um threshold,
por essa razão as imagens não podem ter grandes variações de intensidade.
Assim, antes da aplicação do método foram aplicadas operações morfológicas
(abertura e fecho), com um elemento estruturante linear, para atenuar tais
variações (Figura 21). Só depois da aplicação destes operadores é que foi
aplicado o método de Otsu e como se pode ver na Figura 22, a operação de fecho
apresenta melhores resultados a nível de segmentação devido ao aumento de
contraste entre a cripta e o fundo da imagem.
Figura 21 – Aplicação de operações morfológicas (à esquerda: abertura e à direita: fecho).
Página | 25
Figura 22 – Aplicação do método de Otsu às imagens depois processadas com os operadores morfológicos (à esquerda: abertura e à direita: fecho) .
O operador de segmentação Watershed detecta picos de elevada
intensidade, e como as criptas, nas imagens até agora processadas, têm baixa
intensidade, é feito o negativo da imagem para inverter as intensidades (Figura
23).
Figura 23 – Negativo da imagem depois do pré-processamento.
Depois de inverter as intensidades aplicou-se o algoritmo do método de
Watershed, onde são feitas varias combinações de operadores morfológicos, com
um elemento estruturante circular, para trabalhar as imagens de modo a se
obterem resultados mais favoráveis (Figura 24).
Página | 26
Figura 24 – Aplicação do Watershed à imagem pré-processada com ajuda de operadores morfológicos.
33..33.. AAPPLLIICCAAÇÇÃÃOO DDOO PPRROOCCEESSSSAAMMEENNTTOO EEMM OOUUTTRRAASS IIMMAAGGEENNSS
Para todas as imagens nas quais foi aplicada a segmentação foram usados
os mesmos métodos de pré-processamento, bem como os seus parâmetros
definidos anteriormente. Assim, só é mostrado, para cada imagem, o resultado
final do pré-processamento e os resultados das duas segmentações com
metodologias diferentes (Tabela 2 e Figura 25Figura 26 e Figura 27).
Tabela 2 – Parâmetros usados para cada imagem nas operações morfológicas realizadas antes das técnicas de segmentação.
Imagem Parâmetro no
Método de Otsu
Parâmetro na Operação
de Watershed
A 60 15
B 70 9
C 10 15
Página | 27
Figura 25 – Imagem A pré-processada (em cima à esquerda), com aplicação do método de Otsu (em cima à direita) e com aplicação do método de Watershed (em baixo).
Figura 26 - Imagem B pré-processada (em cima à esquerda), com aplicação do método de Otsu (em cima à direita) e com aplicação do método de Watershed (em baixo).
Página | 28
Figura 27 - Imagem C pré-processada (em cima à esquerda), com aplicação do método de Otsu (em cima à direita) e com aplicação do método de Watershed (em baixo).
Página | 29
4. CONCLUSÃO
O cancro, incluindo o cancro colorectal, é uma das doenças mais
preocupantes do mundo moderno e este acto motiva a pesquisa de novas
soluções mais rigorosas para a detecção, diagnóstico e tratamento.
Pensa-se que as criptas de focos aberrantes possam ter um papel crucial na
sequência adenoma-carcinoma do cancro colorectal, embora este facto ainda não
seja certo e estando ainda em curso várias estudos na tentativas de esclarecer
este conceito.
A detecção pode ser realizada através de endoscopia/colonoscopia ou por
endoscopia por cápsula; no entanto, o tempo gasto durante a análise pelo
especialista das imagens resultantes destes tipos de exames pode ser
substancialmente reduzido usando técnicas de processamento e análise
computacional de imagens.
Para isso existem algoritmos que podem ser aplicados às imagens
endoscópicas, como os métodos de pré-processamento e de segmentação
apresentados neste trabalho. Neste contexto, o desenvolvimento futuro será
baseado em desenvolver um algoritmo adequado para segmentar, detectar e
quantificar com robustez as estruturas dos focos das criptas aberrantes existentes
em imagens endoscópicas.
Trabalho Futuro:
Desenvolvimento e implementação de metodologias computacionais
para a detecção e quantificação de focos de criptas aberrantes a partir de
imagens de endoscopia in vivo; ou seja, metodologias para segmentar e registar
imagens de endoscopia.
Aplicação, ensaio e análise das metodologias desenvolvidas em
casos experimentais e clínicos.
Página | 30
5. REFERÊNCIAS
[1] Figueiredo P.. “Focos de Criptas Aberrantes e Carcinogénese Colo-
rectal”. O canto do Envestigador. Nº 13, Janeiro/Março 2006. ENDOnews.
[2] Filho, O., Neto, H.. “Processamento Digital de Imagens”. 1999. Brasport.
[3] Gonzalez, Rafael C.. “Digital Image Processing”. Second Edition. Prentice
Hall.
[4] Oliveira, B., Magalhães F.. “Filtragem de Imagens Fixas usando Matlab”.
Relatório. Faculdade de Engenharia da Universidade do Porto. 2005
[5] MATLAB Image Processing Toolbox – User’s Guide. The MathWorks.
Version 5.
[6] Silva, José S.. “Segmentação Pulmonar em Estudos de Tomografia Axial
Computadorizada”. Tese de Doutoramento. Universidade de Aveiro. 2005
[7] Ashi, R.. “Introduction to Graphical User Interface (GUI) MATLAB 6.5”.
UAE University.
[8] Santos, S., Teixeira, J., Figueiredo, M.. “Análise de Imagens do Sistema
Cardiovascular: Métodos e Aplicações em Imagens do Ventrículo Esquerdo”.
Projecto em Engenharia Biomédica. Universidade Católica Portuguesa. 2011.
Página | 31
ANEXOS
M-File da Interface Desenvolvida
function varargout = trabalhospraticos(varargin) % TRABALHOSPRATICOS M-file for trabalhospraticos.fig % TRABALHOSPRATICOS, by itself, creates a new TRABALHOSPRATICOS or
raises the existing % singleton*. % % H = TRABALHOSPRATICOS returns the handle to a new
TRABALHOSPRATICOS or the handle to % the existing singleton*. % % TRABALHOSPRATICOS('CALLBACK',hObject,eventData,handles,...) calls
the local % function named CALLBACK in TRABALHOSPRATICOS.M with the given
input arguments. % % TRABALHOSPRATICOS('Property','Value',...) creates a new
TRABALHOSPRATICOS or raises the % existing singleton*. Starting from the left, property value pairs
are % applied to the GUI before trabalhospraticos_OpeningFcn gets
called. An % unrecognized property name or invalid value makes property
application % stop. All inputs are passed to trabalhospraticos_OpeningFcn via
varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only
one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help trabalhospraticos
% Last Modified by GUIDE v2.5 15-Jun-2011 18:22:27
% Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @trabalhospraticos_OpeningFcn, ... 'gui_OutputFcn', @trabalhospraticos_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end
if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else
Página | 32
gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT
% --- Executes just before trabalhospraticos is made visible.
function trabalhospraticos_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to trabalhospraticos (see VARARGIN)
% Choose default command line output for trabalhospraticos
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
global B
B=0;
% UIWAIT makes trabalhospraticos wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = trabalhospraticos_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in Load.
function Load_Callback(hObject, eventdata, handles)
% hObject handle to Load (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
F=uigetfile('*.jpg', 'Pick a Figure');
G=imread(F);
G=im2double(G);
axes(handles.image1);
Página | 33
imshow(G);
global A
A=rgb2gray(G);
% --- Executes on selection change in tipodefiltro.
function tipodefiltro_Callback(hObject, eventdata, handles)
% hObject handle to tipodefiltro (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns tipodefiltro contents as cell array
% contents{get(hObject,'Value')} returns selected item from tipodefiltro
% --- Executes during object creation, after setting all properties.
function tipodefiltro_CreateFcn(hObject, eventdata, handles)
% hObject handle to tipodefiltro (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function caixatexto1_Callback(hObject, eventdata, handles)
% hObject handle to caixatexto1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of caixatexto1 as text
% str2double(get(hObject,'String')) returns contents of caixatexto1 as a double
% --- Executes during object creation, after setting all properties.
function caixatexto1_CreateFcn(hObject, eventdata, handles)
% hObject handle to caixatexto1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
Página | 34
set(hObject,'BackgroundColor','white');
end
function caixatexto2_Callback(hObject, eventdata, handles)
% hObject handle to caixatexto2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of caixatexto2 as text
% str2double(get(hObject,'String')) returns contents of caixatexto2 as a double
% --- Executes during object creation, after setting all properties.
function caixatexto2_CreateFcn(hObject, eventdata, handles)
% hObject handle to caixatexto2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in Execute.
function Execute_Callback(hObject, eventdata, handles)
% hObject handle to Execute (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global A
A;
global B
B;
global I
if B==0
I=A;
else
I=B;
end
val=get(handles.tipodefiltro,'Value');
str=get(handles.tipodefiltro,'string');
Página | 35
n=str2double(char(get(handles.caixatexto1,'String')));
r=str2double(char(get(handles.caixatexto2,'String')));
global C
switch char(str(val))
case 'Media'
w=fspecial('average',[n n]);
C=imfilter(I,w,'symmetric');
case 'Gaussiano'
w=fspecial('gaussian',[n n]);
C=imfilter(I,w,'symmetric');
case 'Mediana'
C=medfilt2(I,[n n]);
case 'Minimo'
C=ordfilt2(I,n*n,ones(n,n),'symmetric');
case 'Maximo'
C=ordfilt2(I,1,ones(n,n),'symmetric');
case 'Equalizacao'
C=histeq(I);
case 'Expansao'
C=imadjust(I);
case 'Laplaciano'
w=fspecial('laplacian',0.2);
C=I-imfilter(I, w, 'replicate');
case 'Unsharp'
a=fspecial('unsharp');
C=imfilter(I, a, 'replicate');
case 'High-Boost'
x=[-1 -1 -1;-1 9 -1;-1 -1 -1];
C=imfilter(I,x,'replicate');
case 'Open'
se=strel('line',r,315);
C=imopen(I,se);
case 'Close'
se=strel('line',r,315);
C=imclose(I,se);
Página | 36
case 'Negativo'
C=imadjust(I, [0 1], [1 0]);
case 'Otsu'
level=graythresh(I);
C=im2bw(I,level);
case 'Watershed'
hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(I), hy, 'replicate');
Ix = imfilter(double(I), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);
se = strel('disk',r);
Ie = imerode(I, se);
Iobr = imreconstruct(Ie, I);
Iobrd = imdilate(Iobr, se);
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
Iobrcbr = imcomplement(Iobrcbr);
fgm = imregionalmax(Iobrcbr);
se2 = strel(ones(5,5));
fgm2 = imclose(fgm, se2);
fgm3 = imerode(fgm2, se2);
fgm4 = bwareaopen(fgm3, 20);
bw = im2bw(Iobrcbr, graythresh(Iobrcbr));
D = bwdist(bw);
DL = watershed(D);
bgm = DL == 0;
gradmag2 = imimposemin(gradmag, bgm | fgm4);
L = watershed(gradmag2);
C = I;
C (imdilate(L == 0, ones(5, 5)) | bgm | fgm4) = 255;
end
axes(handles.image2);
imshow(C);
Página | 37
% --- Executes on button press in Change.
function Change_Callback(hObject, eventdata, handles)
% hObject handle to Change (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global C
C;
axes(handles.image1);
imshow(C);
D=1;
axes(handles.image2);
imshow(D);
global B
B=C;
% --- Executes on button press in Output.
function Output_Callback(hObject, eventdata, handles)
% hObject handle to Output (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global C
D=C;
figure, imshow(D);
% --- Executes on button press in Save.
function Save_Callback(hObject, eventdata, handles)
% hObject handle to Save (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global C
G=C;
imwrite(G, 'Imagem_filtrada.tif');
% --- Executes on button press in Close.
function Close_Callback(hObject, eventdata, handles)
% hObject handle to Close (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
display Goodbye
close(handles.figure1);