在matllab

时间:2015-06-07 22:04:54

标签: matlab image-processing image-segmentation fuzzy-c-means

我试图在下面的图片上执行细分任务。

orignal image

我使用模糊c-means进行一些最小的预处理。分割将有3个类:背景(蓝色区域),肉类(红色区域)和脂肪(白色区域)。背景分割效果很好。然而,照片左侧的肉和脂肪分割将许多肉类组织映射为脂肪。最后的肉面膜是这样的:

mask

我怀疑这是因为照明条件会使左侧更亮,因此算法会将该区域归类为胖级。另外我认为如果我能以某种方式使表面更平滑,可能会有一些改进。我使用了6x6中值滤波器,它可以正常工作,但我可以接受新的建议。有什么建议如何克服这个问题?可能是某种平滑? 谢谢:))

编辑1: 脂肪区域大致标在下面的照片中。顶部区域含糊不清,但正如rayryeng在评论中提到的那样,如果对我来说它是一个模糊的人类,那么算法也可以对它进行错误分类。但左手部分显然都是肉,而算法将其中很大一部分分配为脂肪。 rough fat segments

2 个答案:

答案 0 :(得分:2)

分割中的第一条规则是"尝试描述你(作为一个人)如何能够进行分割"。一旦你这样做,算法就变得清晰了。 换句话说,您必须执行以下2个任务:

  1. 确定每个分段部分的独特功能(在您的情况下 - 脂肪和肉之间有什么区别)。
  2. 选择最适合您的分类器(C-means,神经网络,SVM,决策树,Boosted分类器等)。此分类器将对步骤1中选择的功能进行操作
  3. 您似乎跳过了第1步,这是您算法的问题。

    以下是我的观察:

    1. 像素的亮度不区分肉和脂肪。它主要取决于照射,组织角度和镜面反射。所以你必须消除亮度
    2. 似乎脂肪更多"黄色"。换句话说,肉的红色/绿色比例远高于脂肪。这是我开始实现的功能。要获取该功能,请将RGB图像转换为YUVHSV色彩空间。如果使用YUV,则完全丢弃Y并在V平面上运行分类器。在HSV中,它在H平面上运行。这样您就会丢弃亮度并仅处理颜色(主要是红色和绿色成分)。我建议也使用这些颜色空间进行背景分离。
    3. 下一步 - 您应该为分类器添加更多功能,因为颜色不够。另一个观察结果是,肉是一种更灵活的组织,因此它会有更多的皱纹,脂肪往往更加光滑。您可以搜索边缘并将绝对边数插入分类器中作为另一个特征。
    4. 继续观察您的结果,确定分类器出错的位置,并尝试提出其他新功能以更好地分离两个纹理。在您的情况下可能非常好的功能示例:HOG,图像金字塔上的LBP,MCT功能,三个补丁lbp,(x,y) - 投影。我的直觉低声说三贴片lbp会对你有所帮助,但我很难解释原因。
    5. 个人建议:我不知道Matlab中实现了哪些功能。但是你应该从已经存在的功能开始,以节省编写大量新代码的时间。例如,我知道HAAR功能已经在matlab中实现,但是对于您的情况,它们可能不够具有描述性。结合几种类型的功能以获得最强的结果并避免使用重叠功能(两种不同的功能可捕获图像中几乎相同的信息)。例如 - 如果您使用MCT,请不要使用LBP。
    6. 有关详细信息,您可以阅读我关于纹理相似性的答案here。你有一个反向问题(而不是测量相似性,你想训练一个区分非相似纹理的分类器)。但解决方案的框架是相同的。确定区分纹理的重要特征,将特征连接到矢量并运行分类器。您可以在每个像素或小区域的图像块(例如5x5像素)上运行分类器。您期望的结果是训练这样一个智能分类器,对于图像中的每个补丁,它可以告诉您它是否更像是一块肉或脂肪

答案 1 :(得分:0)

如果没有输出标签,则需要应用无监督学习算法进行分类。 对于许多图像,人眼并不是进行分类的理想工具。这就是为什么我们使用计算机:D的原因,因为它可以显示强度的分布并提供不同的类。 一种替代方法是使用连接的组件来识别和分离脂肪肉和BG类,因为它们的强度完全不同,除了均值和脂肪之间的边缘。

您可以看到具有不同参数的基于阈值的细分的输出。请告诉我您是否要这样做,以便我为您提供代码支持。 最佳

parameterset 1

parameterset 2