Я выполнил поиск по предыдущему заданному вопросу, но не нашел, что мне нужно для оптимизации моего кода.
Для информации, я работаю на Python 2.7, но при необходимости могу измениться на 3
Я конвертирую каждый пиксель изображения, и из-за некоторых условий я должен сделать это попиксельно.Так что я вложил в цикл цикл с оператором if-elif-else, и для его запуска требуется очень много времени.Для изображения размером 1536 x 2640 весь код занимает ~ 20 секунд, и 90% времени находится внутри этого двойного цикла for
Я считаю, что должен быть лучший способ написания кода ниже
for pixel in range(width):
for row in range(height):
ADC = img_original[row, pixel]
if ADC < 84:
gain = gain1
offset = offset1
elif ADC > 153:
gain = gain3
offset = offset3
else:
gain = gain2
offset = offset2
Conv_ADC = int(min(max(ADC * gain + offset, 0),255))
img_conv[row, pixel] = Conv_ADC
Спасибо за помощь
для дополнительной информации отредактируйте:
@ Жан-Франсуа Фабр прав, и я применяю три различных коэффициента усиления / смещения в зависимости от того, в каком разделе я нахожусь междуОт 0 до 255. Но разделы не всегда равномерно распределены и могут быть изменены.Может быть, чтобы дать некоторый дополнительный контекст, я просто применяю пользовательскую S-кривую к изображению, чтобы сместить значение пикселя вверх / вниз.И каждый столбец в изображении имеет свою собственную S-кривую
Мои значения коэффициента усиления1,2,3 / смещения1,2,3 являются плавающей точкой.усиление всегда будет положительным, а смещение может быть отрицательным или положительным. У меня также есть индивидуальное значение для каждого пикселя в направлении ширины, но они являются общими в направлении строки.
Например, все пиксели из столбца1 с может использовать усиление / смещение 1,2,3 из 1-й строки в таблице ниже.Все пиксели из столбца 2 на изображении будут использовать усиление / смещение из строки 2 в таблице ниже
Pixel Gain1 Offset1 Gain2 Offset2 Gain3 Offset3
1 0.417722 24.911392 0.623188 7.652176 1.175676 -76.878357
2 0.43038 25.848103 0.623188 9.652176 1.148649 -70.743225
3 0.443038 23.784809 0.637681 7.434776 1.175676 -74.878357
4 0.443038 22.784809 0.652174 5.217384 1.175676 -74.878357
5 0.455696 23.721519 0.637681 8.434776 1.202703 -78.013519
6 0.455696 21.721519 0.637681 6.434776 1.243243 -86.216217
7 0.455696 22.721519 0.623188 8.652176 1.216216 -82.081085
8 0.443038 22.784809 0.623188 7.652176 1.22973 -85.148651
... until pixel 2640 in width direction
Я посмотрю на решение @ Jean-FrançoisFabre, но пока я также смотрю на использованиенекоторые сбитые с толку подходы.
Как только я получу что-то, что вычисляется быстрее, я опубликую свою находку здесь