Python:获取非矩形区域的GLCM

发布于 2021-01-29 15:03:27

我一直在使用skimage的SLIC实现来分割超像素中的图像。我想使用GLCM从这些超像素中提取其他功能,以解决分类问题。这些超像素不是矩形的。在MATLAB中,您可以将像素设置为NaN,算法将忽略它们(link)。我可以使用它在超像素周围制作边框,然后将未使用的像素设置为NaN。

skimage中的greycomatrix函数与MATLAB实现并不完全相同。将像素设置为NaN时,该函数在断言时失败,无法检查所有值是否都大于0。

有没有可以与非矩形ROI一起使用的Python实现?

关注者
0
被浏览
54
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    尽管mahotas它也是一个出色的计算机视觉库,但无需停止使用skimage它。

    什么
    必要的,因为@Tonechas已经指出的那样,是那些NaN值设定为一个整数,由于np.nan具有类型floatgreycomatrix功能需要的整数数组。

    最简单的选择是将那些设置NaN为零,但是,如果像素中已经有零值并且不想混合它们,则可以选择任何其他常数。之后,您要做的就是从GLCM中过滤出所选的值(再一次,通常为零)。

    要了解这意味着什么,让我们看看是什么skimage告诉我们该greycomatrix函数的输出:

    4维数组

    值P
    [i,j,d,theta]是灰度级j在距灰度级i的距离为d且角度为θ的角度出现的次数。如果normed为False,则输出为uint32类型,否则为float64。尺寸为:水平x水平x距离数x角度数。

    换句话说,数组的前两个维定义一个矩阵,该矩阵告诉我们两个不同的值相隔一定距离多少次。请注意,GLCM并 没有
    保留输入数组的形状。这些行和列告诉我们这些值之间的关系。

    知道这一点,很容易过滤掉投资回报率之外的值(假设我们将那些NaN设置为零):

    glcm = greycomatrix(img, [1], [0])  # Calculate the GLCM "one pixel to the right"
    filt_glcm = glcm[1:, 1:, :, :]           # Filter out the first row and column
    

    现在,您可以轻松计算过滤后的GLCM的Haralick属性。例如:

    greycoprops(filt_glcm, prop='contrast')
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看