1

在此处输入图像描述 欧几里得距离分割后的图片(只是绝对的,不是绝对平方的)在此处输入图像描述 原始纹理图片

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

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

4

2 回答 2

5

Analysing the texture using k-means cause you to disregard spatial relations between neighboring pixels: If i and j are next to each other, then it is highly likely that they share the same texutre.
One way of introducing such spatial information is using pair-wise energy that can be optimized using graph cuts or belief-propagation (among other things).

Suppose you have n pixels in the image and L centroids in your k-means, then D is an L-by-n matrix with D(i,l) is the distance of pixel i to center l.

If you choose to use graph cuts, you can download my wrapper (don't forget to compile it) and then, in 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;

You can find sparse_adj_matrix here.


For a recent implementation of many optimization algorithms, take a look at opengm package.

于 2013-10-28T12:56:29.847 回答
0

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

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

于 2013-11-02T13:49:57.827 回答