【问题标题】:Using skimage for non-rectangular image areas将 skimage 用于非矩形图像区域
【发布时间】:2017-11-10 17:06:16
【问题描述】:

假设我关心的是图像的一部分,我想为它计算 GLCM,因为它不是矩形的。我该怎么办?我做了一个遮罩程序,将我不关心的图像部分归零,我只是不知道如何在不考虑图像的归零部分的情况下拍摄这个“遮罩”图像......

感谢您的帮助!

【问题讨论】:

  • 一种可能的解决方案是使用 mahotas 库来计算 GLCM 功能,如 here 所述

标签: feature-extraction scikit-image image-masking glcm


【解决方案1】:

如果您能够将零强度值分配给背景像素,则可以通过简单地丢弃完整图像的 GLCM 的第一行和第一列来获得感兴趣区域的 GLCM。这实际上相当于摆脱了那些涉及背景像素的共现。

演示

以下 sn-p 演示了如何从黑色背景上圆形对象的 GLCM 中提取几个 Haralick 特征:

In [25]: import numpy as np

In [26]: from skimage import io

In [27]: from skimage.feature import greycomatrix, greycoprops

In [28]: img = io.imread('https://i.stack.imgur.com/6ESoP.png')

In [29]: glcm = greycomatrix(img, 
    ...:                     distances=[1, 2], 
    ...:                     angles=[0, np.pi/4, np.pi/2, 3*np.pi/4],
    ...:                     symmetric=True,
    ...:                     normed=False)
    ...: 

In [30]: glcm_br = glcm[1:, 1:, :, :]

In [31]: glcm_br_norm = np.true_divide(glcm_br, glcm_br.sum(axis=(0, 1)))

In [32]: np.set_printoptions(threshold=1000, precision=4)

In [33]: props = ['energy', 'homogeneity']

In [34]: feats_br = np.hstack([greycoprops(glcm_br_norm, p).ravel() for p in props])

In [35]: feats_br
Out[35]: 
array([ 0.0193,  0.0156,  0.0173,  0.0166,  0.0151,  0.0156,  0.0136,
        0.0166,  0.1255,  0.0788,  0.0978,  0.0929,  0.0782,  0.0788,
        0.0545,  0.0929])

请注意,在去掉全图 GLCM 的第一行和第一列后,必须对 GLCM 进行归一化处理。

注意:后缀_br 代表背景已移除

【讨论】:

  • 谢谢!只是我很清楚,这不会以某种方式“标准化”矩阵吗?我只是担心一个图像中的遮蔽区域是否比另一个图像更大,第一行/列会使其他图像倾斜,并且我的测量结果会很差。这有意义吗?如果不清楚,请见谅
  • 是的,当然。我已经编辑了我的答案以修复代码。感谢您发现这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多