1 | ||||||
Конвертация изображения средствами numpy07.03.2018, 22:08. Показов 10063. Ответов 7
Нашел вот такое задание на форуме
Как это сделать на pure python - понятно. К тому же легко гуглятся примеры на хабре. Однако, попытка написать такое же преобразование чисто на numpy (плюс PIL для открытия изображения) дала код, который работает не то чтобы медленно... ужасно медленно. В 10 раз медленнее, чем с python циклами. Стало интересно, а можно ли вообще написать нормально работающую реализацию, следуя этому заданию? Для сравнения также использован пример чисто на встроенных функциях PIL (grayscale_pillow), который работает так и должно все работать. Вот замеры работы всех функций: Код
grayscale :8.58449101448059 grayscale pillow :0.08200454711914062 grayscale_numpy :75.70432996749878 black_white :7.205412149429321 Но именно она - при использование моей функции apply_gray для каждого пикселя - работает крайне неэффективно. Если кто-то захочет разобраться почему так и как написать правильно, смотрите код.
0
|
07.03.2018, 22:08 | |
Ответы с готовыми решениями:
7
Работа с матрицами средствами NumPy Построчный обход двумерного массива без цикла средствами Numpy Представление изображения в виде массива NumPy Конвертация цветного изображения в черно-белое Как сохранить numpy массив в виде изображения, что бы при повторном переводе в массив не было различий |
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
||||||
07.03.2018, 23:06 | 2 | |||||
Сообщение было отмечено Garry Galler как решение
Решение
Garry Galler, у numpy вообще говоря каноничное использование - это всячески операции векторизовать.
Вот что я смог выжать постаравшись не напрягаться:
grayscale :0.2801399230957031 grayscale pillow :0.006412506103515625 grayscale_numpy :0.01502847671508789 black_white :0.22236919403076172
1
|
1292 / 909 / 479
Регистрация: 05.12.2013
Сообщений: 3,074
|
|
07.03.2018, 23:22 | 3 |
Почему-то результат grey2, явно отличается от результатов gray и gray3
0
|
08.03.2018, 00:01 [ТС] | 4 |
Да, точно. Неверный подход был с apply_along_axis. Бесполезно было надеяться, что попиксельно будет работать быстро, даже в numpy, но я думал, что apply_along_axis умеет делать магию.
В общем все классно :-). Работает на моем проце, конечно, медленнее, чем в вашем бенчмарке, но хотя бы раз в 8 быстрее, чем в pure python. ----------------------------------- Это о каких результатах? Добавлено через 12 минут То что через через Image.convert быстрее? Так в PIL своя реализация grayscale - уже на чисто на С наверно.
1
|
1292 / 909 / 479
Регистрация: 05.12.2013
Сообщений: 3,074
|
|
08.03.2018, 00:02 | 5 |
Взял картинку в формате jpg, назвал tiger, запустил скрипт, получились еще 4 картинки
tiger_black_white.jpg tiger_gray.jpg tiger_gray2.jpg tiger_gray3.jpg Почему-то tiger_gray2 отличается от tiger_gray и tiger_gray3, но я уже нашел почему, цветность tiger_gray2 стала 8 бит, а у остальных осталась 24
0
|
08.03.2018, 14:40 [ТС] | 6 | |||||
Да, в доках PIL так и написано, что режим "L" возвращает 8-bit pixels.
------------------------------------------------------------------------------------------ Дополню варианты преобразования в grayscale:
Код
grayscale_numpy (rgb2gray0):0.8510487079620361 grayscale_numpy (rgb2gray1):0.8060460090637207 grayscale_numpy (rgb2gray2):0.7650439739227295
1
|
Просто Лис
|
||||||
10.03.2018, 14:21 | 7 | |||||
Garry Galler, проверь на скорость этот вариант:
0
|
10.03.2018, 15:01 [ТС] | 8 |
Проверил.
Код
grayscale_numpy (rgb2gray0):0.8300013542175293 grayscale_numpy (rgb2gray1):0.7500016689300537 grayscale_numpy (rgb2gray2):0.7400014400482178 grayscale_numpy (rgb2gray3):0.7600016593933105 Единственная серьезная разница - rgb2gray3 дает 8-битное изображение, раз мы не делаем np.repeat(sums, 3).
0
|
10.03.2018, 15:01 | |
10.03.2018, 15:01 | |
Помогаю со студенческими работами здесь
8
Пример кодирования изображения BMP в JPG средствами Python Конвертация csv в xml средствами php Конвертация doc/docx документов в HTML средствами PHPWord Построение 3d графика цветового пространства изображения в Qt Creator. OpenCV, PyPlot и NumPy Конвертация изображения Конвертация разрешения изображения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |