如何检测图像中的纹理或非纹理

时间:2015-02-05 15:16:36

标签: algorithm image-processing textures image-segmentation

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

2 个答案:

答案 0 :(得分:0)

您可以使用纹理描述符,例如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

答案 1 :(得分:0)

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

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

 for i in range(2,len(closing_values)):
    my_date = datetime.strptime(my_string[i],"%m/%d/%Y %H:%M:%S.%f000 %p")
    my_date=matplotlib.dates.date2num(my_date)
    timestamp.append(my_date)
 plt.plot_date(timestamp[29:len(closing_values)],ADX[29:len(closing_values)])

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 detectSURFFeatures是Matlab函数。

注意:我知道这是一个很晚的答案,但是也许有人可以使用它,或者就此方法的优缺点向我反馈。