Índice:
- Etapa 1: Pré-requisitos
- Etapa 2: Pré-requisitos (continuação)
- Etapa 3: Pré-requisitos (continuação)
- Etapa 4: Pré-requisitos (continuação)
- Etapa 5: limpar o Matlab para se preparar para executar o código
- Etapa 6: selecione 10 imagens de olhos normais e 10 imagens com sintomas de retinopatia diabética
- Etapa 7: selecione 10 imagens de olhos normais e 10 imagens com sintomas de retinopatia diabética (continuação)
- Etapa 8: Crie 2 variáveis (normal e diagnosticada) e defina-as como iguais a 0
- Etapa 9: Crie um for Loop para carregar automaticamente imagens normais
- Etapa 10: Crie um for Loop para fazer o upload automático de imagens normais (continuação)
- Etapa 11: recorte as bordas da imagem
- Etapa 12: Criar uma imagem em escala de cinza
- Etapa 13: Criar uma imagem contrastada
- Etapa 14: Aumente a imagem de contraste
- Etapa 15: Crie um filtro de média
- Etapa 16: Combine o filtro de média com a imagem contrastada
- Etapa 17: faça uma nova máscara média subtraindo pixels
- Etapa 18: Criar uma imagem binária filtrada
- Etapa 19: remover blobs menores encontrados nas imagens filtradas
- Etapa 20: Criar um elemento de estruturação de disco
- Etapa 21: realizar operações morfológicas de fechamento
- Etapa 22: Encontre os objetos com conectividade de pelo menos 8
- Etapa 23: Encontre o número máximo de pixels conectados
- Etapa 24: defina os valores máximos de pixels como 0 e encontre pixels com conectividade> = 26 pixels
- Etapa 25: Remova os vasos sanguíneos na imagem
- Etapa 26: exibição da figura
- Etapa 27: remover vasos e contar gotas de sangue
- Etapa 28: diagnosticar a imagem retinal com base no número de coágulos sanguíneos identificados
- Etapa 29: se houver mais de 5 blobs …
- Etapa 30: Repita o processo de filtragem para imagens normais com valores de dígitos de imagem como 2 e 3
- Etapa 31: Repita todo o processo para as imagens diagnosticadas
- Etapa 32: Análise Estatística
- Etapa 33: Encontrando o intervalo de confiança
Vídeo: Diagnóstico automatizado de retinopatia diabética via MATLAB: 33 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
(Veja o esboço do código acima)
A retinopatia diabética é uma doença ocular relacionada ao diabetes, causada por níveis elevados de açúcar no sangue. Os altos níveis de açúcar no sangue fazem com que os vasos sanguíneos da retina inchem, o que leva ao aumento dos vasos sanguíneos e até mesmo a vazamentos dos vasos, o que leva a manchas escuras nas imagens da retina. Com este código, pretendemos usar o aparecimento de manchas de vazamento de vasos sanguíneos como um indicador de retinopatia diabética de fundo, embora outras técnicas de diagnóstico sejam necessárias no mundo real. O objetivo deste código é automatizar o processamento de imagens e o diagnóstico de imagens da retina para identificar sinais de retinopatia diabética mostrados por meio de manchas escuras nas imagens da retina.
10 imagens retinais normais e 10 imagens retinais diagnosticadas foram processadas por meio de um código que primeiro lê e filtra as imagens e, em seguida, quantifica os pontos escuros para determinar se os sintomas de retinopatia diabética estão presentes, com base em um determinado limiar. Os resultados são então impressos na janela de comando para interpretação do visualizador.
Etapa 1: Pré-requisitos
1. Certifique-se de ter baixado o programa MATLAB em seu computador.
2. Baixe o arquivo txt encontrado no link. (Pressione ‘ctrl + s’ para salvar no mesmo diretório do Código MATLAB)
Etapa 2: Pré-requisitos (continuação)
4. Abra o MATLAB e digite ‘uiimport’ na janela de comando.
5. Selecione o arquivo officialdiagnoses.txt e importe-o para o MATLAB como uma matriz celular.
6. Certifique-se de ver ‘diagnósticos oficiais’ como uma variável no espaço de trabalho.
Etapa 3: Pré-requisitos (continuação)
7. Baixe a função ModWald.m, que pode ser obtida do código acima ou baixe do Canvas.
(Código fornecido pelo Professor King e Professor Choi)
Etapa 4: Pré-requisitos (continuação)
8. Baixe as 400 imagens brutas da seção de dados do Projeto STARE.
Etapa 5: limpar o Matlab para se preparar para executar o código
Adicionar ao código:
1. fechar tudo (fecha todas as imagens abertas anteriormente)
2. clearvars - exceto diagnósticos oficiais (limpa todas as variáveis, exceto o arquivo txt de diagnósticos oficiais importado anteriormente)
3. cclc (limpa a janela de comando)
Etapa 6: selecione 10 imagens de olhos normais e 10 imagens com sintomas de retinopatia diabética
1. Pegue o arquivo de texto de diagnóstico e extraia os nomes das imagens. Esses nomes estão contidos na primeira coluna do arquivo de texto, então para extraí-los digite 'officialdiagnoses (:, 1)'. A matriz de nomes de imagem foi atribuída a uma variável, “all_image_numbers”
2. Converta a variável all_image_numbers de uma matriz de células para uma matriz de matriz usando a função cell2mat
Etapa 7: selecione 10 imagens de olhos normais e 10 imagens com sintomas de retinopatia diabética (continuação)
3. Selecione 10 imagens de olhos normais para executar o código. As imagens selecionadas neste caso foram 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Coloque esses números em uma matriz e atribua-os a uma variável que será chamada ao carregar as imagens.
4. Repita a etapa 3 para imagens da retina que foram diagnosticadas com retinopatia diabética. As imagens selecionadas neste caso foram 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
Etapa 8: Crie 2 variáveis (normal e diagnosticada) e defina-as como iguais a 0
Crie essas variáveis antes do loop for para inicializar os números do loop.
Etapa 9: Crie um for Loop para carregar automaticamente imagens normais
1. Crie um loop for
2. Defina uma variável de contagem (i, neste caso) para uma matriz de valores 1-10. Esta variável de contagem será usada para chamar cada imagem individualmente
3. Pegue o elemento i na matriz de imagens para extrair e converter o nome da imagem de uma string em um número usando a função num2str.
Encontre o número de dígitos presentes no nome da imagem usando a função numel. Atribua esse valor a uma variável, digits_normal. Esse número deve ser 1 para números de um dígito, 2 para números de dois dígitos e 3 para números de três dígitos. Essas informações serão usadas para chamar imagens automaticamente.
Etapa 10: Crie um for Loop para fazer o upload automático de imagens normais (continuação)
3. Crie uma instrução if contendo todas as três possibilidades das etapas anteriores. Se o nome da imagem tiver 1 dígito, a imagem será chamada de “im000”, se tiver 2 dígitos, a imagem será chamada de “im00”, e se tiver 3 a imagem será chamada de “im0”.
4. Sob cada instrução if, atribua uma variável para imread “im” sob a instrução if correspondente com o número apropriado de zeros (conforme descrito acima), seguido por i.
Etapa 11: recorte as bordas da imagem
Pegue a imagem original e aplique um filtro imcrop para eliminar as bordas pretas e atribua a uma variável I_crop. O retângulo de corte é especificado usando uma matriz [95, 95, 500, 410].
Etapa 12: Criar uma imagem em escala de cinza
Pegue a imagem cortada e aplique o filtro rbg2gray para mudar a imagem para tons de cinza. Atribua esta imagem à variável I2.
Etapa 13: Criar uma imagem contrastada
Pegue a imagem I2 e use imadjust para redimensionar os valores de intensidade.
Pegue os valores que estão dentro do intervalo [0,2, 0,7] e redimensione-os para a [0, 1]. O gama é definido como 0,8 para tornar a imagem mais clara. Atribua a nova imagem a I_adjusted.
Etapa 14: Aumente a imagem de contraste
Pegue a imagem I_adjusted e use a função adapthisteq para aumentar o contraste.
A sintaxe Adapthisteq requer o nome da imagem, I_adjusted, ‘numTiles’, o tamanho de numTiles, ‘nBins’ e o número de bins. O tamanho de numTiles é definido como [8 8], dividindo a imagem em blocos de 8x8 e o número de caixas é definido como 28. Atribua a imagem a I_constrast.
Etapa 15: Crie um filtro de média
Crie uma variável chamada 'meanfilt' usando a função fspecial. Insira a 'função média' para criar o filtro de média e insira [90 90] para o tamanho da janela deslizante.
Etapa 16: Combine o filtro de média com a imagem contrastada
Crie uma nova variável chamada mask_mean e use a função imfilter para obter a imagem I_contrast e aplicar o filtro médio criado anteriormente.
Etapa 17: faça uma nova máscara média subtraindo pixels
Crie uma variável chamada mask_mean2 e use a função imsubtract para subtrair o valor de cada pixel em I_contrast do pixel correspondente em mask_mean.
Etapa 18: Criar uma imagem binária filtrada
Transforme imagens em tons de cinza em preto e branco usando imbinarizar. Input mask_mean2, ‘adaptive’, ‘ForegroundPolarity’, ‘dark’, ‘Sensitivity’, 0.6. Atribua esta nova imagem a mask_binarize.
Etapa 19: remover blobs menores encontrados nas imagens filtradas
Remova objetos com conectividade inferior a 100 pixels usando a função bwareaopen em mask_binarize e defina o valor limite para 100. Atribua a variável como bw.
Etapa 20: Criar um elemento de estruturação de disco
Crie um elemento de estruturação de disco (com um raio de 2) usando a função strel. Atribua-o a se.
Etapa 21: realizar operações morfológicas de fechamento
Pegue bw e aplique a função imclose ao elemento estrutural para realizar uma operação de fechamento morfológico no objeto.
Etapa 22: Encontre os objetos com conectividade de pelo menos 8
Pegue bw e use bwconncomp para encontrar os objetos com conectividade de pelo menos 8 na imagem. Atribua o número de saída a cc_1.
Etapa 23: Encontre o número máximo de pixels conectados
Use a função cellfun para executar a função “numel” em cada célula em CC. Isso encontra o número de elementos na célula PixelIdxList. Atribua valor a “numPixels”.
Encontre os valores máximos em numPIxels. Atribua o maior máximo a “maior” e o índice do valor máximo a “idx”.
Etapa 24: defina os valores máximos de pixels como 0 e encontre pixels com conectividade> = 26 pixels
= 26 conectividade de pixels "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 conectividade de pixels "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Conectividade de Pixel "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">
= 26 Conectividade de Pixel "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">
Defina os pixels com os maiores valores na imagem “bw” para 0, tornando os pixels pretos.
Encontre os objetos com uma conectividade de pelo menos 26 pixels na imagem usando bwconncomp. Atribua à variável cc_1.
Etapa 25: Remova os vasos sanguíneos na imagem
Remova os vasos sanguíneos ainda presentes na imagem usando a função bwpropfilt com um intervalo de [0, 0,9].
[0,9, 1] é excluído porque valores próximos a 1 indicam uma linha. Atribua a “RemoveVessels”.
Etapa 26: exibição da figura
Exibir cada imagem filtrada em uma subtrama. Imshow. com entradas 'border' e 'tight', exibe cada imagem em uma estrutura de subplot. Adicione um título a cada imagem para distinguir qual filtro foi usado.
Etapa 27: remover vasos e contar gotas de sangue
1. Pegue “RemoveVessels” e aplique o recurso ‘Centroid’ em regionprops para identificar os centróides dos objetos na imagem. Esses objetos devem corresponder aos coágulos sanguíneos presentes na imagem.
2. Conte o número de coágulos sanguíneos identificados medindo o comprimento da matriz centróide.
Etapa 28: diagnosticar a imagem retinal com base no número de coágulos sanguíneos identificados
Use instruções if para diagnosticar a imagem com base no número de coágulos sanguíneos identificados.
Se o número de centróides identificados fosse menor ou igual a 5, a imagem era identificada como normal.
Se o número de centróides fosse maior que 5, a imagem era diagnosticada com retinopatia diabética.
O resultado é impresso na janela de comando usando fprintf.
Etapa 29: se houver mais de 5 blobs …
Repita as instruções acima para imagens diagnosticadas como uma instrução else. Esta parte será executada se o número de blobs for maior que 5.
Encerre a instrução if.
Etapa 30: Repita o processo de filtragem para imagens normais com valores de dígitos de imagem como 2 e 3
Repita o processo para o restante das instruções if originais quando numel (o número de dígitos no número da imagem) for igual a 2 e 3. Isso completa o loop for para as imagens normais.
Finalize o loop for.
Etapa 31: Repita todo o processo para as imagens diagnosticadas
Repita todo o processo usando as imagens diagnosticadas listadas pela matriz “numbers_to_extract_diagnosed”.
Certifique-se de passar por cada figura (i) e altere-a para a figura (i + 10) para que as figuras diagnosticadas apareçam como imagens 11 a 20.
Etapa 32: Análise Estatística
1. 'Actual_Diagnosis_Matrix' é usado para comparar os resultados com o diagnóstico oficial encontrado no arquivo txt. Os primeiros 10 zeros indicam que as primeiras 10 imagens devem ser normais. As últimas 10 indicam que as últimas 10 imagens devem ser classificadas como retinopatia diabética.
2. O sinal de igual duplo usado para criar 'number_correct' cria uma matriz lógica comparando o valor dos elementos correspondentes de 'Actual_Diagnosis_Matrix' com 'Diagnosis_Matrix' criado a partir do loop for.
Para cada elemento que corresponda ao diagnóstico será adicionado 1, significando que o código diagnosticou corretamente aquela imagem. Se estiver incorreto, adicionará um 0 à matriz.
Então, pegando a soma disso soma todos os outros. Em outras palavras, ele encontra a soma das imagens diagnosticadas corretamente.
3. 'Final_percentage_correct' é a porcentagem calculada de quão preciso o código diagnosticou retinopatia diabética. O número de imagens diagnosticadas corretamente é dividido por 20 (o número total de imagens) e multiplicado por 100 para encontrar a porcentagem de diagnósticos bem-sucedidos.
Etapa 33: Encontrando o intervalo de confiança
1. Certifique-se de ter baixado o ModWald.m para chamá-lo como uma função. Sem a função, você mesmo teria que calcular o intervalo de confiança usando o método de Wald modificado.
2. A função ModWald possui 2 entradas onde a primeira é o número de imagens corretamente identificadas e a segunda é a quantidade total de imagens.
3. A função ModWald produzirá os limites inferior e superior do intervalo de confiança das proporções para a precisão dos dados amostrados. Em outras palavras, você fornecerá um intervalo de porcentagens em que estará a verdadeira porcentagem de precisão do código.
4. Use fprintf abaixo para gerar as estatísticas e o intervalo de confiança na janela de comando.
> fprintf ('%. 0f por cento das imagens da retina foram diagnosticadas corretamente de acordo com o diagnóstico oficial. / n / n', Final_percentage_correct)
> fprintf ('A verdadeira porcentagem em que nosso código diagnosticará corretamente a retinopatia diabética / n cairá na faixa de [%.3f,%.3f], com base em 20 imagens de amostra / n', base_inferior, base_maior)
Recomendado:
Modelo de circuito de ECG automatizado: 4 etapas
Modelo de circuito de ECG automatizado: O objetivo deste projeto é criar um modelo de circuito com vários componentes que podem amplificar e filtrar adequadamente um sinal de ECG de entrada. Três componentes serão modelados individualmente: um amplificador de instrumentação, um filtro de entalhe ativo e um
Reparação fácil / diagnóstico de assistência ao estacionamento: 4 etapas
Reparação fácil / diagnóstico de assistência ao estacionamento: Ok, vamos começar, tenho um Chevrolet Avalanche 2010 e tem 4 sensores de assistência ao estacionamento no pára-choque traseiro. Este intratável pode ser usado em um veículo até onde eu sei, se você tiver frente ou Rea ou ambos. Então fui para o meu favorito
Discos rígidos: Diagnóstico, solução de problemas e manutenção: 3 etapas
Discos rígidos: diagnóstico, solução de problemas e manutenção: o que é um disco rígido? - Simplificando, o disco rígido é o que armazena todos os seus dados. Ele hospeda o disco rígido, onde todos os seus arquivos e pastas estão fisicamente localizados. As informações são armazenadas magneticamente no disco, portanto, permanecem na unidade mesmo quando
Guia de codificação / diagnóstico BMW INPA E60: 4 etapas
Guia de codificação / diagnóstico do BMW INPA E60: Neste artigo, irei coletar alguns casos sobre o case de trabalho BMW INPA no BMW E60 e, se você tiver outro case do BMW INPA E60 para compartilhar com as pessoas, envie para o meu e-mail. vai colocar aqui para compartilhar
Estoque - Diagnóstico rápido de PC agora substituído, veja abaixo: 6 etapas
Inventário - Diagnóstico rápido de PC agora substituído, veja abaixo: Se você precisar trabalhar em um PC que não está na sua frente, você precisa de um inventário preciso. Este instrutível surgiu simplesmente porque um colega está tendo problemas para encontrar um driver para um pc. Vou usar o Aida32 pessoal de http://majorgeeks.com