Я работаю над изображением 6641x2720, чтобы сгенерировать его изображения функций (характеристики Haralick, такие как контраст, второй момент и т. Д.), С помощью движущегося GLCM (матрицы уровня совпадения уровня). Но навсегда нужно бежать. Код работает нормально, поскольку я тестировал его на более мелких изображениях. Но мне нужно заставить его работать быстрее. Уменьшение размеров до 25% (1661x680) требует 30 минут для запуска. Как я могу заставить его работать быстрее? Вот код:Уменьшить время работы в анализе текстуры с помощью GLCM [Python]
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)
Возможно, вам стоит попробовать свести ваши данные в 4 бит [0-16] и не использовать все 256 значений серого. Посмотрите на уровни параметров в http://scikit-image.org/docs/dev/api/skimage.feature.html#skimage.feature.greycomatrix. –
Уменьшить количество ящиков не изменит время вычисления. – FiReTiTi
'greycomatrix' имеет 4 вложенных цикла' for' в своей реализации, что означает, что этот код, вероятно, имеет время выполнения O (n ** 6). Я не уверен, что эту конкретную функцию можно уменьшить, не переписывая функции «greycomatrix» и «greycoprops». – callyalater