【问题标题】:Improving Texture Segmentation Results on Matlab在 Matlab 上改进纹理分割结果
【发布时间】:2013-11-07 04:53:11
【问题描述】:

用欧几里得距离分割后的图片(只是绝对,不是绝对平方) 原始纹理图片

当我使用 Kmeans 算法和 Laws Texture Energy 过滤器(簇质心/组 =6)执行聚类时,我得到了上面的结果(图 1)

改善结果的可能方法是什么?从结果可以看出,纹理没有明确的界限。 可以以某种方式实现膨胀/侵蚀吗?如果是,请指导。

【问题讨论】:

  • 离题:我建议使用“打印屏幕”按钮而不是使用相机。
  • @EitanT 这就是“屏幕截图”的重点!

标签: matlab image-processing textures image-segmentation mathematical-morphology


【解决方案1】:

使用 k-means 分析纹理会导致您忽略相邻像素之间的空间关系:如果 ij 彼此相邻,那么它们很可能共享相同的纹理。
引入此类空间信息的一种方法是使用成对能量,可以使用graph cutsbelief-propagation(除其他外)进行优化。

假设图像中有n 像素,k-means 中有L 质心,那么 D 是一个L-by-n 矩阵,D(i,l) 是像素i 到中心l 的距离。

如果你选择使用图形切割,你可以下载my wrapper(别忘了编译它),然后在Matlab中:

>> sz = size( img ); % n should be numel(img)
>> [ii jj] = sparse_adj_matrix( sz, 1, 1 ); % define 4-connect neighbor grid
>> grid = sparse( ii, jj, 1, n, n );
>> gch = GraphCut('open', D, ones( L ) - eye(L), grid );
>> [gch ll] = GraphCut('expand', gch );
>> gch = GraphCut('close', gch );
>> ll = reshape( double(ll)+1, sz );
>> figure; imagesc(ll);colormap (rand(L,3) ); title('resulting clusters'); axis image;

你可以找到sparse_adj_matrixhere


有关最近许多优化算法的实现,请查看opengm 包。

【讨论】:

  • - 感谢您的帮助,但问题是我不太精通编码,我不明白您所说的“编译”包装器是什么意思。你能指导我如何去做吗?
  • @Raaj 下载软件包并按照>> doc GraphCut 中的说明进行操作,有一个compile_gc m 文件可以实际为您工作。您所要做的就是确保事先设置了 mex 编译器。 >> mex -setup.
【解决方案2】:

关于形态过滤,我建议参考:Texture Segmentation Using Area Morphology Local Granulometries。该论文基本上描述了一个morphological area opening filter,它去除了小于给定区域参数阈值的灰度分量。在二值图像中,可以通过在每个图像像素位置放置一个窗口并在每次打开操作后计算其中剩余像素的数量来生成局部粒度尺寸分布。这会导致局部大小分布,可以对其进行归一化以给出局部 pdf 。图案光谱的微分给出了在像素处产生局部图案光谱的密度,提供了包含每个像素位置局部纹理信息的概率密度。

Here 是使用图像粒度的示例。它们基本上是在灰度分量区域上工作的非线性比例空间。基本直觉是每个纹理都可以根据它们的灰度分量的区域光谱来表征。 Matlab 中提供了一个简单的二元区域开口过滤器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多