Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 16, 2021 18:59:42

SergioX13
Зарегистрирован: 2021-12-16
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Ускорение кода numpy

Данный код добавляет шум Гаусса на фото.
Возникла проблема со скоростью: фото fhd обрабатывается около 0,45 секунд. Для моих задач это непозволительно. Необходимо достичь скорости хотя бы единиц миллисекунд.

 import numpy as np
import cv2
image = cv2.imread('1.jpg')
row,col,ch= image.shape
mean = 0
var = 0.1
sigma = var**0.5
gauss = np.random.normal(mean,sigma,(row,col,ch))
gauss = gauss.reshape(row,col,ch)
noisy = image + gauss
cv2.imwrite('2.jpg', noisy)


Уже оптимизировал самую медленную часть кода(генерацию массива рандомных чисел)(данная операция занимает окооло 0,32с):
 gauss = np.random.normal(mean,sigma,(row,col,ch))
gauss = gauss.reshape(row,col,ch

Уменьшил матрицу в сто раз, а потом размножил в сто раз:
 roww=int(row/100)
b = timeit.default_timer()
gauss = np.random.normal(mean,sigma,(roww,col,ch))
gauss = gauss.reshape(roww*col*ch)
gauss = np.tile(gauss, 100)
gauss = gauss.reshape(row,col,ch)
Код выше выполняется 20мс, из которых больше всего времени занимает размножение одной матрицы в большую(18мс):
 gauss = np.tile(gauss, 100)
Как можно было бы сделать данную операцию быстрее?

А теперь к основной проблеме: весь этот код по-прежнему выполняется очень долго(170мс),самые времязатратные операции:

Сложение матриц занимает 30мс.
 noisy=image+gauss

Открытие(35мс) и сохранение(90мс) фото:
 image = cv2.imread("1.jpg"
 cv2.imwrite('2.jpg', noisy)

Можно ли эти операции как-либо ускорить на python?
Спасибо!


Полный код:
 import numpy as np
import cv2
image = cv2.imread('1.jpg')
row,col,ch= image.shape
mean = 0
var = 0.1
sigma = 10
roww=int(row/100)
gauss = np.random.normal(mean,sigma,(roww,col,ch))
gauss = gauss.reshape(roww*col*ch)
gauss = np.tile(gauss, 100)
gauss = gauss.reshape(row,col,ch)
noisy=image+gauss
cv2.imwrite('2.jpg', noisy)

Отредактировано SergioX13 (Дек. 16, 2021 19:01:22)

Офлайн

#2 Дек. 16, 2021 19:55:19

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Ускорение кода numpy

SergioX13
SergioX13
вот сильно сомневаюсь что вам еще удасться чтото сильно выжать, cpython сам по себе сравнительно медленный, иногда чтобы чтот укорить нужно вопсользваться альтернативами типа numba или pypy, в определенных случая можно добиться увеличение быстродейсвия от 10 раз и более. Это если не рассматривать вынос части функционала на более низкоуровенвые языки.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Дек. 16, 2021 19:56:18)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version