matlab greycomatrix,Python:采用非矩形区域的GLCM

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

但是,skimage中的greycomatrix功能与MATLAB实现的功能完全不同.将像素设置为NaN时,函数会在断言上失败,以检查是否所有值都大于0.

是否有可用于非矩形ROI的Python实现?

解决方法:

虽然mahotas也是一个优秀的计算机视觉库,但没有必要停止使用skimage来做到这一点.

正如@Tonechas指出的那样,必要的是将那些NaN值设置为整数,因为np.nan的类型为float,而greycomatrix函数需要一个整数数组.

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

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

4-D ndarray

[…] The value P[i,j,d,theta] is the number of times that grey-level j occurs at a distance d and at an angle theta from grey-level i. If normed is False, the output is of type uint32, otherwise it is float64. The dimensions are: levels x levels x number of distances x number of angles.

换句话说,数组的前两个维度定义了一个矩阵,告诉我们两个不同的值有多少次相隔一定距离.请注意,GLCM不保持输入数组的形状.那些行和列告诉我们值是如何相关的.

知道了这一点,很容易过滤出ROI之外的值(想象我们将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')

标签:mahotas,scikit-image,python,image-processing,glcm

来源: https://codeday.me/bug/20191002/1844884.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值