Preciso segmentar o fígado a partir de uma imagem de TC abdominal usando o Adaptive Thresholding. Mas eu separo todo o primeiro plano do fundo. Eu preciso apenas da parte do fígado do primeiro plano separada. Verifique o arquivo pdf em http://www.ijcaonline.org/casct/number1/SPE34T.pdf . Preciso de uma saída semelhante à mostrada na Figura 6.
Anexo minha codificação aqui. Por favor, me ajude.
%testadaptivethresh.m
clear;close all;
im1=imread('nfliver2.jpg');
bwim1=adaptivethreshold(im1,11,0.03,0);
figure,imshow(im1);
figure,imshow(bwim1);
imwrite(bwim1,'at2.jpg');
function bw=adaptivethreshold(IM,ws,C,tm)
%ADAPTIVETHRESHOLD An adaptive thresholding algorithm that seperates the
%foreground from the background with nonuniform illumination.
% bw=adaptivethreshold(IM,ws,C) outputs a binary image bw with the local
% threshold mean-C or median-C to the image IM.
% ws is the local window size.
% tm is 0 or 1, a switch between mean and median. tm=0 mean(default); tm=1 median.
%
% Contributed by Guanglei Xiong ([email protected])
% at Tsinghua University, Beijing, China.
%
% For more information, please see
% http://homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm
if (nargin<3)
error('You must provide the image IM, the window size ws, and C.');
elseif (nargin==3)
tm=0;
elseif (tm~=0 && tm~=1)
error('tm must be 0 or 1.');
end
IM=mat2gray(IM);
if tm==0
mIM=imfilter(IM,fspecial('average',ws),'replicate');
else
mIM=medfilt2(IM,[ws ws]);
end
sIM=mIM-IM-C;
bw=im2bw(sIM,0);
bw=imcomplement(bw);
Meu código modificado para testadaptivethresh.m
clear;
im=imread('nfliver7.gif');
figure,imshow(im)
bwim1=adaptivethreshold(im,300,-0.15,0);
bw=bwareaopen(bwim1,3000);
se=strel('diamond',4);
er=imerode(bw,se);
bw1=bwareaopen(er,3000);
er1=imerode(bw1,se);
bw2=bwareaopen(er1,1000);
fi=imfill(bw2,'holes');
figure,imshow(fi)
op=uint8(fi);
seg=im.*op;
figure,imshow(seg)
imwrite(seg,'sliver7.jpg');
matlab
image-processing
computer-vision
Gomathi
fonte
fonte
Respostas:
Eu vi o link do artigo (de SS Kumar) que você referiu e o link onde você obteve o código (HIPR) são dois algoritmos diferentes - mesmo que ambos pareçam Adaptive Thresholding
Primeiro eu gostaria de lhe dizer a diferença.
No método HIPR, uma suposição geral é essencialmente imagem de nível de 2 classes - ou seja, primeiro plano e plano de fundo. Em qualquer limiar de 2 classes, espera-se 2 picos ou regiões no histograma da imagem, especificamente plano de fundo versus terreno, texto versus papel branco. Se você de alguma forma encontrou um ponto de vale ideal no histograma - obtém uma divisão mais limpa. Aqui está como o histograma pode parecer:
No entanto, esse ponto do vale pode estar mudando um pouco ao redor do local. Existem bons exemplos de variações de iluminação aqui. Portanto, esse ponto ótimo de vale existe em todo lugar, mas varia ligeiramente em termos espaciais; portanto, um limite universal falharia. Portanto, o ponto do vale (limite) é calculado em todas as regiões locais.
O método do artigo de SS Kumar e, mais especificamente, a classe de imagens com as quais você está lidando, é multi-classe (vários objetos, cada um com diferentes faixas e faixas de intensidade). Nesse caso, os histogramas são multimodais, ou seja, possuem muitos picos e vales e, presumivelmente, cada pico corresponde a um objeto diferente, mas pode ser ainda mais complexo.
O histograma pode ficar assim: (esta é a mesma imagem que no papel).
Nesse caso, a abordagem de 2 classes acima simplesmente falhará porque não existe um bom vale. É por isso que a sua primeira imagem que você postou parece com pontos preto / branco por toda parte.
O significado do limiar adaptativo aqui implica que você precisa identificar o pico correto e a faixa de escala de cinza que cobre a maior parte das intensidades da alavanca e outros objetos estão em contrastes acentuados, o que permite
O que você deveria fazer?
Primeiro, se for obrigatório usar o limiar adaptativo, encontre o histograma e veja qual faixa de intensidade e, para um limiar da esquerda ou da direita, são os limites de intensidade que os pixels devem ser descartados.
Como alternativa, você pode usar o Crescimento da região ou o algoritmo de divisão e mesclagem. Consulte esta pergunta para obter mais informações: Quais métodos de segmentação podem ser usados para imagens simples?
fonte