计算窗口和尺寸

2024-09-30 10:30:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用mahotas库对卫星图像(250x200像素)进行纹理分析(GLCM)。GLCM计算在窗口大小内进行。因此,对于滑动窗口的两个相邻位置,我们需要从头开始计算两个共现矩阵。我读到我可以设置步长,以避免计算重叠区域的GLCM。我提供了下面的代码。在

#Compute haralick features
def haralick_feature(image):
    haralick = mahotas.features.haralick(image, True)
    return haralick


img = 'SAR_image.tif'
win_s=32 #window size
step=32 #step size

rows = img.shape[0]
cols = img.shape[1]
array = np.zeros((rows,cols), dtype= object)
harList = []

for i in range(0, rows-win_s-1, step):
        print 'Row number: ', r
    for j in range(0, cols-win_s-1, step):
        harList.append(haralick_feature(image))

harImages = np.array(harList)     
harImages_mean = harImages.mean(axis=1)

对于上面的代码,我将窗口和步长设置为32。代码完成后,我得到了一个尺寸为6×8(而不是250×200)的图像,因为步长设置为32,这是有意义的。在

所以,我的问题是:通过设置步长(避免在重叠区域进行计算以及代码速度更快),我是否可以从某种程度上推导出尺寸为250 x 200的整个图像的GLCM结果,而不是有一个子集(6 x 8维)?或者我别无选择,只能用普通的方式(不设置步长)在图像上循环?在


Tags: 代码图像image区域imgstepwinrows
1条回答
网友
1楼 · 发布于 2024-09-30 10:30:55

您不能使用^{}作为计算共现映射的函数在该库中不可用。从GLCM中提取纹理特征的另一种方法是利用^{}(查看this thread了解详细信息)。在

但是如果你想坚持使用mahota,你应该尝试使用^{}而不是滑动窗口,因为它可以加快扫描图像的速度。请务必阅读文档末尾关于内存使用的警告。如果使用view_as_windows对您来说是一种负担得起的方法,那么下面的代码可以完成任务:

import numpy as np
from skimage import io, util
import mahotas.features.texture as mht

def haralick_features(img, win, d):
    win_sz = 2*win + 1
    window_shape = (win_sz, win_sz)
    arr = np.pad(img, win, mode='reflect')
    windows = util.view_as_windows(arr, window_shape)
    Nd = len(d)
    feats = np.zeros(shape=windows.shape[:2] + (Nd, 4, 13), dtype=np.float64)
    for m in xrange(windows.shape[0]):
        for n in xrange(windows.shape[1]):
            for i, di in enumerate(d):
                w = windows[m, n, :, :]
                feats[m, n, i, :, :] = mht.haralick(w, distance=di)
    return feats.reshape(feats.shape[:2] + (-1,))

演示

对于下面的示例运行,我将win设置为19,它对应于一个形状为(39, 39)的窗口。我考虑过两种不同的距离。请注意,mht.haralick产生了13个面向四个方向的GLCM特性。总的来说,这将为每个像素生成104维特征向量。当应用于陆地卫星图像中的(250, 200)像素裁剪时,特征提取在大约7分钟内完成。在

^{pr2}$

Landsat image

相关问题 更多 >

    热门问题