【问题标题】:How to detect texture or non-texture in image如何检测图像中的纹理或非纹理
【发布时间】:2015-04-05 12:28:18
【问题描述】:

我知道这个问题不能满足论坛,但我想我可以从许多聪明的图像处理专家那里得到帮助。我的问题是,我的图像在图像中包含纹理和非纹理。如何检测纹理区域?您能否向我建议任何算法或参数来区分非纹理区域和纹理区域? 太感谢了 更新: 基于关于灰度矩阵的建议。我使用一种工具来提取该纹理特征。但是,我不知道哪个最适合我的情况。让我们看看我的结果并解释帮助我选择哪个功能 @rayryeng:你能告诉我邻域灰度依赖矩阵(NGLDM)的目的是什么。在我的情况下如何使用它?

【问题讨论】:

  • 所有像素都有一定的强度值(你的图像似乎是黑白的)。要检测纹理,您可以查看像素与其周围像素的颜色强度差异,也称为梯度。您可以使用过滤矩阵并应用于图像中的所有像素。您可以查看 sobel 运算符,例如:en.m.wikipedia.org/wiki/Sobel_operator
  • 尝试查看共现矩阵。如果缺少纹理,则条目将倾斜,但如果纹理很多,则条目将分散。看看我在 GLDM 上的帖子以帮助完成这项任务:stackoverflow.com/questions/25019840/…
  • @rayryeng:你能看到我的更新问题吗?让我知道可以用于我的目的的图像

标签: algorithm image-processing textures image-segmentation


【解决方案1】:

您可以使用纹理描述符,例如 MPEG-7 中使用的那些:

  • 同质纹理描述符 (HTD)
  • 纹理浏览描述符 (TBD)
  • 边缘直方图描述符 (EHD)

您可以在Evaluation and comparison of texture descriptors proposed in MPEG-7Texture Descriptors in MPEG-7等一些科学论文中找到详细信息

计算纹理描述符的基本方法是使用Gabor filter。一些 MPEG-7 描述符是基于它的。 也可以去Grey-Level Co-occurrence Matrix texture measurements看看。

【讨论】:

    【解决方案2】:

    我不确定这是否是一种有效的方法,或者是否有人使用这种方法(我找不到任何学术论文),但我有一种直观的方法,我使用了几次并且对我来说效果很好。

    我计算图像中有效 SURF 特征的数量,并根据特征数量对图像进行排序。随着特征数量的增加,我的直觉纹理级别也会增加。下面是我提取特征数量的 Matlab 函数:

    function [num_pts] = im2surf_feature(im)
    if nargin>=1 && ischar(im) && exist(im, 'file')
        im = imread(im);
    end
    if size(im,3)==3
       im = rgb2gray(im); 
    end
    
    ptsI1 = detectSURFFeatures(im);
    [~, validPtsI1] = extractFeatures(im, ptsI1);
    num_pts = size(validPtsI1,1);
    
    end
    

    detectSURFFeaturesextractFeatures 是 Matlab 函数。

    注意:我知道这是一个很晚的答案,但也许有人可以使用它或给我反馈为什么这个方法是好还是坏。

    【讨论】:

      猜你喜欢
      • 2016-06-11
      • 2015-03-18
      • 1970-01-01
      • 2017-10-23
      • 2014-02-06
      • 1970-01-01
      • 2013-04-05
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多