图像分割中的轮廓完成

时间:2013-11-01 22:22:46

标签: python opencv image-processing contour image-segmentation

我正在尝试使用机器学习(即随机森林)进行图像分割。分类器利用许多不同的像素级特征来将像素分类为边缘像素或非边缘像素。我最近将我的分类器应用于一组甚至很难手动分割的图像(Image segmentation based on edge pixel map),并且仍在努力从结果概率图中获得合理的轮廓。我还将分类器应用于更简单的图像集,并且当我将阈值调整为0.95时,我获得了相当好的预测轮廓(Rand指数> 0.97)。我有兴趣通过过滤从概率图中提取的轮廓来改进分割结果。

这是原始图片:

Original image

专家概述:

Expert Outlines

从我的分类器生成的概率图:

enter image description here

当我根据阈值0.95将图像转换为二进制时,可以进一步细化:

enter image description here

我尝试在概率图中填充孔,但这给我留下了很多噪音,有时会合并附近的细胞。我也尝试在openCV中进行轮廓查找,但由于很多这些轮廓没有完全连接,因此无法正常工作 - 这里和那里的轮廓中都会缺少一些像素。

编辑:我最终在概率图上使用了Canny边缘检测。

1 个答案:

答案 0 :(得分:3)

初始图像似乎对比良好,我想我们可以简单地通过阈值来获得对细胞的良好估计。这是基于形态区域的阈值图像过滤:

阈值:Threshold at 10

基于区域的开放过滤器(需要根据您正在研究的细胞数据集进行设置):Size smaller than 2500 pixels removed

基于区域的结束过滤器(需要根据您正在研究的细胞数据集进行设置):enter image description here

使用I-Erosion(I)的轮廓:enter image description here

代码段:

C is input image
C10 = C>10; %threshold depends on the average contrast in your dataset
C10_areaopen = bwareaopen(C10,2500); %area filters average remove small components that are not cells
C10_areaopenclose = ~bwareaopen(~C10_areaopen,100); %area filter fills holes 
se = strel('disk',1);
figure, imshow(C10_areaopenclose-imerode(C10_areaopenclose,se)) %inner contour

为了获得更平滑的形状,我猜想可以对过滤后的图像执行精细打开操作,从而去除细胞的任何凹陷部分。对于附着的细胞,也可以使用距离函数和距离函数上的分水岭来获得细胞的分割:http://www.ias-iss.org/ojs/IAS/article/viewFile/862/765

我想这也可以用在概率/置信度图上,以执行基于非线性区域的过滤。