使用GLCM减少纹理分析的运行时间[Python]

阿比

我正在处理6641x2720图像,以使用移动的GLCM(灰度共生矩阵)窗口生成其特征图像(诸如对比度,第二矩等Haralick特征)。但是它需要永远的运行。该代码工作正常,因为我已经在较小的图像上对其进行了测试。但是,我需要使其运行更快。将尺寸减小到25%(1661x680),需要30分钟我如何使其运行更快?这是代码:

from skimage.feature import greycomatrix, greycoprops
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import time
start_time = time.time()
img = Image.open('/home/student/python/test50.jpg').convert('L')
y=np.asarray(img, dtype=np.uint8)
#plt.imshow(y, cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
contrast = np.zeros((y.shape[0], y.shape[1]), dtype = float)

for i in range(0,y.shape[0]):
    for j in range(0,y.shape[1]):
        if i < 2 or i > (y.shape[0]-3) or j < 2 or j > (y.shape[1]-3):
            continue
        else:
            s = y[(i-2):(i+3), (j-2):(j+3)]
            glcm = greycomatrix(s, [1], [0],  symmetric = True, normed = True )
            contrast[i,j] = greycoprops(glcm, 'contrast')
print("--- %s seconds ---" % (time.time() - start_time))
plt.imshow(contrast, cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
FiReTiTi

填充GLCM是线性操作:您只需遍历图像/窗口上的所有像素,然后填充匹配的矩阵大小写即可。您的问题是您对每个像素执行操作,而不仅仅是对图像执行操作。因此,在您的情况下,如果图像尺寸为Width x Height,而窗口尺寸为NxN,则总复杂度为Width x Height x(NxN + FeaturesComplexity),这确实很糟糕。

有一个更快的解决方案,但是实现起来比较棘手。目的是减少基质填充操作。这个想法是使用一个Front Front和Backward Front逐行进行工作(原理已经用于获取快速的数学形态学运算符,请参见此处此处)。当您为两个连续的像素填充矩阵时,您将重用大多数像素,实际上只有左右两个像素是不同的,因此分别为后向和前向。

这是尺寸为3x3的GLCM窗口的说明:

x1 x2 x3 x4

x5 p1 p2 x6

x7 x8 x9 x10

当窗口以p1为中心时,您将使用像素:x1,x2,x3,x5,p2,x7,x8,x9。当窗口在p2上居中时,将使用像素:x2,x3、4,p1,x6,x8,x9,x10。因此,对于p1,您使用x1,x5和x7,但对于p2不使用它们,但是所有其他像素都相同。

该算法的思想是正常计算p1的矩阵,但是当移至p2时,将删除后向前沿(x1,x2,x5),然后添加前向前沿(x4,x6,x10)。这大大减少了计算时间(对于数学形态学运算,线性而不是二次)。这是算法:

  1. 对于每一行:
  2. -----填充行中第一个像素的矩阵(通常),然后计算特征
  3. -----对于以下每个像素
  4. ----- -----添加前锋(窗口中的新像素)
  5. ----- -----移除后部正面(窗口中不再有像素)
  6. ----- -----计算功能

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用GLCM减少纹理分析的运行时间[Python]

来自分类Dev

Python 在 PostgreSQL 查询上使用多处理减少运行时间

来自分类Dev

使用 NumExpr 提升 NumPy 代码的运行时间:分析

来自分类Dev

分析嵌套循环运行时间?

来自分类Dev

循环的运行时间分析

来自分类Dev

算法运行时间分析

来自分类Dev

分析嵌套for循环的运行时间

来自分类Dev

Python)如何减少大数据集解析的运行时间

来自分类Dev

如何减少for循环数以缩短Python编程的运行时间?

来自分类Dev

如何减少在for循环中使用setValues()和copyto()的Google App脚本的运行时间

来自分类Dev

使用pentaho数据集成加载事实表-减少ktr的运行时间

来自分类Dev

如何减少SQL Server中的查询运行时间?

来自分类Dev

减少我的递归子集和算法的运行时间

来自分类Dev

ro如何减少mysql查询的运行时间

来自分类Dev

如何简化该代码并减少运行时间?

来自分类Dev

Python的低层性能与高层性能(回文函数的运行时间分析)

来自分类Dev

使用Big-O渐近分析计算总运行时间

来自分类Dev

分析时间时C ++中的运行时错误

来自分类Dev

big-O中的运行时间分析

来自分类Dev

分析以下重复发生的运行时间

来自分类Dev

链表和ArrayList之间的运行时间?代码分析

来自分类Dev

使用QueryPerformanceCounter()向后运行时间

来自分类Dev

Libgdx在运行时更新纹理

来自分类Dev

LibGdx 动态(运行时)纹理

来自分类Dev

从Python中的日期/时间计算正常运行时间

来自分类Dev

是否可以分阶段运行VBA宏,从而减少运行时间?

来自分类Dev

运行时间控制

来自分类Dev

运行时间太长

来自分类Dev

算法的运行时间

Related 相关文章

热门标签

归档