如何消除图像中不需要的小区域

时间:2015-04-23 09:08:50

标签: matlab image-processing

我将分割算法应用于MRI脊柱图像,然后对分割图像进行连通分量分析,得到以下图像。

该图像由不需要的区域组成。我只需要垂直脊柱,更具体地说是椎间盘。你能建议任何提取它的方法。形态操作无济于事。我试过了

  • img1
  • img2

一些代码:

Img= imread('sub.png');
figure,imshow(Img);
Img=rgb2gray(Img);
Img = adapthisteq(Img);
K1=imadjust(Img);
figure, imshow(Img), title('After Adjustment Image')
hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(Img), hy, 'replicate');
Ix = imfilter(double(Img), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);
figure, imshow(gradmag,[]), title('gradmag')
%threshold = graythresh(im);
originalImage = im2bw(Img,.18);
figure, imshow(originalImage), title('After thresholding')
originalImage = bwareaopen(originalImage,150);
figure, imshow(originalImage), title('After bwarea')
k=2;
tic
[mask1,mu1,v,p]=EMSeg(ima,k);
for i=1:k
    figure
    im2bw(mask1==i);
end
toc
im=mask1;
hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(im), hy, 'replicate');
Ix = imfilter(double(im), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);
figure, imshow(gradmag,[]), title('gradmag')

se = strel('disk', 1); %# structuring element
closeBW = imclose(gradmag,se);
CC = bwconncomp(closeBW);
L = labelmatrix(CC);
[labeled,numObjects]= bwlabel(im);
numObjects 
figure, imshow(label2rgb(L));
originalImage=labeled;
se = strel('disk', 1); %# structuring element
originalImage = imclose(originalImage,se);
figure, imshow(originalImage);
stats = regionprops(labeled, 'Area')
%idx = find([stats.Area]>1000 & [stats.Area]<300);
 labeled=labeled(labeled<50)

1 个答案:

答案 0 :(得分:0)

也许您可以使用2D相关。假设椎间盘是水平定向的椭圆形(在双色图像中),您可以尝试定义一个看起来大致与您想要找到的形状的示例形状,然后在整个场上执行2D相关。您可以获得与光盘中心对应的更亮点的图像,您可以将其用作更复杂过程的起点。您可能必须使用一系列内核重复执行此操作。

此外,虽然形态学操作没有直接解决问题,但它们仍然可能起作用。例如,如果你定义一个看起来有点像目标形状的结构元素,你可以用它来侵蚀图像,试图减少图像的线性部分(例如脊柱),然后对它进行相关。

另外,您可以尝试使用morphops来关闭光盘(重开和关闭),目的是平滑所有边缘并填充所有孔。然后你可以提取骨架,修剪短枝并走到生成的树上观察每个节点的连通性:希望如果你将每个磁盘转换成一个固定的椭圆,它们位于两个轨道之间,你可能能够根据它来检测它们。这一点。