使用Matlab进行肝分割的自适应阈值


11

我需要使用自适应阈值技术从腹部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');

是否需要使用自适应阈值?
vini 2012年

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

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

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

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

Answers:


6

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

首先,我想告诉您区别。

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

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

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

直方图可能看起来像这样:(与纸上的图像相同)。 在此处输入图片说明

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

此处,自适应阈值的含义意味着您需要确定正确的峰值,并且灰度级带覆盖了杠杆的大部分强度,其他对象形成了鲜明的对比,

你该怎么办?

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

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


非常感谢。先生,这是一个非常有用的答案。
Gomathi 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.