我需要使用自适应阈值技术从腹部CT图像中分割肝脏。但是我将整个前景与背景分开了。我只需要分离前景的肝脏部分。
在http://www.ijcaonline.org/casct/number1/SPE34T.pdf中查看pdf文件。
我需要一个类似于图6所示的输出。

我在这里附上我的编码。请帮帮我。

%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 (xgl99@mails.tsinghua.edu.cn)
%  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);




我为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');


评论

有必要使用自适应阈值吗?

blogs.mathworks.com/steve/2006/06/02/cell-segmentation发现了这一点,您可以尝试一下

是的,我只需要使用自适应阈值。如果没有,您能建议我其他任何好的分割方法(区域增长和FCM除外)吗?

www4.comp.polyu.edu.hk/~cslzhang/code.htm我发现这个可以查找K. Zhang,H。Song和L. Zhang的代码,“由局部图像拟合能量驱动的主动轮廓”,模式认识卷43,第4期,第1199-1206页,2010年4月。对于此图像,效果很好

非常感谢。我得到了输出。我更改了参数值并进行了形态学运算。谢谢大家。

#1 楼

我看到了您所引用的(SS Kumar的)论文链接和获得代码(HIPR)的链接是两种不同的算法-尽管两种听起来都像是自适应阈值

首先,我想告诉你区别。

在HIPR方法中,一般假设实质上是2类级别的图像-即前景和背景。在任何2类阈值中,人们都希望图像直方图中有2个峰或区域,特别是背景与前景,文本与白皮书。如果您以某种方式在直方图中找到了最佳谷点,则得到的划分最干净。直方图如下所示:

但是,该谷点可能会在局部附近稍微移动。那里有很好的照明变化示例。因此,该最佳谷点随处可见,但在空间上略有变化,因此通用阈值将失败。因此,在每个局部区域上计算谷点(阈值)。

SS Kumar的论文的方法,尤其是要处理的图像类别,是多类的(多个对象,每个对象的强度带和散布程度不同)。在这种情况下,直方图是多峰的,即它具有许多峰和谷,并且每个峰可能对应于不同的对象,但是它可能更加复杂。

直方图可能看起来像这样:(与纸上的图像相同)。


在这种情况下,由于没有一个好的谷底,上述2类方法将完全失败。这就是为什么您发布的第一张图片看起来周围都是黑白点。

自适应阈值的含义在这里,意味着您需要确定正确的峰值,并且覆盖杠杆大多数强度的灰度带和其他对象形成鲜明对比,这使得

你应该怎么办?

首先,如果必须使用自适应阈值,请找到直方图并查看强度范围,然后在强度阈值左侧或右侧确定应该丢弃哪些像素。

或者,您可以使用“区域增长”或“拆分合并”算法。有关此信息,请参阅此问题:哪些分割方法可用于简单图像?

评论


$ \ begingroup $
非常感谢。先生,这是一个非常有用的答案。
$ \ endgroup $
– Gomathi
2012年3月19日13:59