Самая быстрая библиотека изменения размеров изображения C/C++ [закрывается]

У меня все еще была проблема с кодом, где рабочие узлы регистрируются, только если eks был установлен только для общедоступных подсетей.

module "eks" { subnets = ["${module.vpc.public_subnets}"] }

Я не хотел, чтобы мои работники были в общедоступных подсетях. Я изменил

module "eks" {
   subnets                              = ["${module.vpc.private_subnets}"]
}

module "vpc" {
   single_nat_gateway = false
}

kubectl получить узлы

NAME                                       STATUS    ROLES     AGE       VERSION
ip-10-0-1-247.us-east-2.compute.internal   Ready     <none>    17m       v1.11.5
ip-10-0-1-75.us-east-2.compute.internal    Ready     <none>    17m       v1.11.5
ip-10-0-2-225.us-east-2.compute.internal   Ready     <none>    17m       v1.11.5
ip-10-0-3-210.us-east-2.compute.internal   Ready     <none>    17m       v1.11.5
18
задан rr- 26 August 2013 в 17:03
поделиться

6 ответов

Взгляните на Intel IPP (Integrated Performance Primitives) (ссылка на Wiki лучше, чем у Intel ...), она также работает на AMD и имеет функции изменения размера образы (билинейные, ближайший сосед и т. д.) и работает в Linux и Windows.

Это не бесплатно (но это не сломает банк), но это самый быстрый способ, который вы можете найти.

13
ответ дан 30 November 2019 в 07:56
поделиться

Если IPP выполняет то, что вам нужно (например, функция Resize в разделе 12), то я сомневаюсь, что вы найдете значительно более быстрый код x86 где-нибудь еще. , Имейте в виду, что он может вернуться к более медленным «эталонным реализациям» при работе на процессорах AMD.

Если процессор не соответствует вашим требованиям к производительности, вы можете рассмотреть возможность изменения размера на графическом процессоре с помощью OpenGL (простейшая реализация с использованием наложение текстуры выиграет от аппаратных интерполяторов, для более сложной фильтрации используйте код шейдера GLSL). Способность графического процессора делать такие вещи примерно в сто раз быстрее, чем процессор (плюс-минус ноль), должна быть сопоставлена ​​с относительно медленной передачей данных на карту и с карты (обычно гигабайт или два в секунду максимум).

5
ответ дан 30 November 2019 в 07:56
поделиться

Если вы ищете открытый исходный код, как насчет FreeImage? Для рекламы я использую Snowbound. Оба они довольно быстрые и поддерживают множество различных форматов изображений и алгоритмов изменения размера.

0
ответ дан 30 November 2019 в 07:56
поделиться

@Chris Becke's comment:

"think for just a moment about that statement. What part of doing it in a single (complicated) step is going to make it any faster? The image decoding routines still need to decode every pixel in order for the filter routines to filter them."

That isn't always the case. For example, when decoding a JPEG you can ask the JPEG library to give you a 1/2, 1/4, 1/8 size image (or something like that; it's a while since I've looked in detail) which it can do without having to decode the extra detail at all, due to the way JPEG works. It can be much quicker than a full decode + scale.

(Obviously you may need to scale a bit afterwards if the smaller image isn't the exact size you want.)

(Sorry I can only post this reply as a comment due to no reputaton. First time I've tried to post anything here. If someone wants to repost this or something similar as a comment and delete my answer, feel free!)

4
ответ дан 30 November 2019 в 07:56
поделиться

Хорошо, я нашел другой алгоритм: псевдоним метода (также упоминается в этом ответе ). По сути, он создает такое разделение вероятностного пространства:

  • Есть n разделов, все одинаковой ширины r st nr = m . . 12113] каждый раздел содержит два слова в некотором соотношении (которое сохраняется вместе с разделом).
  • для каждого слова w i , f i = ∑ разделы тс. tw i ∈ t r × ratio (t, w i )

Поскольку все разделы имеют одинаковый размер, выбор того, какой из разделов, может выполняться в постоянной работе (выберите случайный индекс из 0 ... n-1 ), и коэффициент раздела затем можно использовать для выбора того, какое слово будет использоваться в постоянной работе (сравните число в формате pRNG с соотношением между двумя слова). Таким образом, это означает, что выбор p может быть выполнен в O (p) работе с таким разделом.

Причина, по которой такое разделение существует, состоит в том, что существует слово w i st f i , если и только если существует слово w i ' st f i '> r , поскольку r - это среднее значение частот.

Учитывая такую ​​пару w i и w i ' , мы можем заменить их псевдословом w' i частоты f ' i = r (что представляет w i с вероятностью f i / r и w i ' с вероятностью 1 - f i / r ) и новым словом w' i ' настроенной частоты f' i ' = f i' - (r - f i ) соответственно. Средняя частота всех слов по-прежнему будет r, и по-прежнему действует правило из предыдущего абзаца. Поскольку псевдослово имеет частоту r и состоит из двух слов с частотой r, мы знаем, что если мы итерируем этот процесс,

  • одно из слов с частотой ≤ r
  • одно из слов с частотой> r
  • затем вытащить слово из первого списка
    • , если его частота = r, то превратить его в одноэлементный раздел
    • в противном случае, извлечь слово из другого списка и использовать его для заполнения двухсловного раздела. Затем верните второе слово в первый или второй список в соответствии с его настроенной частотой.
  • Это действительно работает, если количество разделов q> n (вам просто нужно доказать это по-другому). Если вы хотите убедиться, что r является целым, и вы не можете легко найти множитель q из m st q> n , вы можете заполнить все частоты в n , поэтому f ' i = nf i , что обновляет m' = mn и устанавливает r '= m , когда q = n .

    В любом случае, этот алгоритм требует только O (n + p) работы,

    0
    ответ дан 30 November 2019 в 07:56
    поделиться

    Взгляните на VIPS. Это самый быстрый, который я нашел на данный момент.

    9
    ответ дан 30 November 2019 в 07:56
    поделиться