Где я могу найти хорошее чтение о передискретизации Lanczos и бикубической интерполяции?

Используйте вспомогательный класс CustomJsonObjectRequest, упомянутый здесь .

и реализовать как это -

CustomJsonObjectRequest request = new CustomJsonObjectRequest(Method.POST, URL, null, new Response.Listener() {
    @Override
    public void onResponse(JSONObject response) {
        Toast.makeText(getActivity(), response.toString(), Toast.LENGTH_SHORT).show();
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Toast.makeText(getActivity(), "Error.", Toast.LENGTH_SHORT).show();
    }
}) {
    @Override
    protected Map getParams() throws AuthFailureError {
        Map params = new HashMap();
        params.put("id", id);
        params.put("password", password);
        return params;
    }
};
VolleySingleton.getInstance().addToRequestQueue(request);

17
задан Vilx- 3 June 2009 в 12:32
поделиться

2 ответа

Основной принцип работы обоих алгоритмов довольно прост. Они оба являются фильтрами свертки. Фильтр свертки, который для каждого выходного значения перемещает исходную точку функции свертки для центрирования на выходе, а затем умножает все значения на входе на значение функции свертки в этом месте и складывает их.

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

Один из способов понять их - это подумать функции свертки как нечто, показывающее, насколько входные пиксели влияют на выходной пиксель в зависимости от их расстояния.

Функции свертки обычно определяются так, что они равны нулю, когда расстояние больше некоторого значения, так что вам не нужно рассматривать каждое входное значение для каждого выходного значения.

Для интерполяции Ланцоша функция свертки основана на функция sinc (x) = sin (x * pi) / x , но используются только первые несколько долей. Обычно 3:

lanczos(x) = {
    0 if abs(x) > 3,
    1 if x == 0,
    else sin(x*pi)/x
}

Эта функция называется ядром фильтра.

Чтобы выполнить повторную выборку с помощью Ланцоша, представьте, что вы накладываете выходные и входные данные друг на друга, с точками, обозначающими расположение пикселей. Для каждого местоположения выходного пикселя вы берете прямоугольник + - 3 выходных пикселя от этой точки. Для каждого входного пикселя, который находится в этом поле, вычислите значение функции Ланцоша в этом месте с расстоянием от выходного местоположения в координатах выходного пикселя в качестве параметра.

12
ответ дан 30 November 2019 в 12:44
поделиться

Хотя то, что говорит Муравей Аасма, примерно описывает разницу, я не думаю, что это особенно информативно относительно того, почему вы могли бы это сделать.

Что касается ссылок, вы задаете очень простой вопрос по обработке изображений, и любой достойный вводный учебник по этому предмету это опишет. Если я правильно помню, Гонсалес и Вудс неплохо справляются с этим, но я далеко от своих книг и не могу проверить.

Теперь перейдем к деталям, это должно помочь подумать о том, что вы делают принципиально. У вас есть квадратная решетка измерений, для которой вы хотите интерполировать новые значения. В простом случае с повышающей дискретизацией представьте, что вам нужно новое измерение между каждым, что у вас уже есть (например, удвоить разрешение).

Теперь вы не получите " вы хотите подогнать что-то к большему количеству точек данных (пикселей) и что-то, что может быть нелинейным. Хороший компромисс между точностью и вычислительными затратами - это кубический сплайн. Это даст вам гладкую линию, и вы снова приблизите новое «измерение» к значению, которое оно принимает в середине. Сделайте это в обоих направлениях, и вы получите «бикубическую» интерполяцию.

Так что это более точно, но все же сложно. Один из способов решить проблему скорости - использовать свертку, которая имеет приятное свойство, заключающееся в том, что в области Фурье это просто умножение, поэтому мы можем реализовать его довольно быстро. Но вам не нужно беспокоиться о реализации, чтобы понять, что результатом свертки в любой момент является интеграция одной функции (вашего изображения) в другой продукт, обычно гораздо меньшая поддержка (часть, которая не равна нулю) функция, называемая ядром), после того, как это ядро ​​центрируется в этой конкретной точке. В дискретном мире это просто суммы произведений.

Оказывается, вы можете спроектировать ядро ​​свертки, которое имеет свойства, похожие на кубический сплайн, и использовать его для получения быстрой «бикубической»

передискретизации Ланцоса. похожая вещь, но с немного разными свойствами в ядре, что в первую очередь означает, что у них будут разные характерные артефакты. Вы можете достаточно легко найти подробную информацию об этих функциях ядра (я уверен, что они есть в Википедии или любой вводный текст). Реализации, используемые в графических программах, как правило, сильно оптимизированы и иногда имеют специальные допущения, которые делают их более эффективными, но менее общими.

после того, как это ядро ​​было центрировано в этой конкретной точке. В дискретном мире это просто суммы произведений.

Оказывается, вы можете спроектировать ядро ​​свертки, которое имеет свойства, похожие на кубический сплайн, и использовать его для получения быстрой «бикубической»

передискретизации Ланцоса. похожая вещь, но с немного разными свойствами в ядре, что в первую очередь означает, что у них будут разные характерные артефакты. Вы можете достаточно легко найти подробную информацию об этих функциях ядра (я уверен, что они есть в Википедии или любой вводный текст). Реализации, используемые в графических программах, как правило, сильно оптимизированы и иногда имеют специальные допущения, которые делают их более эффективными, но менее общими.

после того, как это ядро ​​было центрировано в этой конкретной точке. В дискретном мире это просто суммы произведений.

Оказывается, вы можете спроектировать ядро ​​свертки, которое имеет свойства, похожие на кубический сплайн, и использовать его для получения быстрой «бикубической»

передискретизации Ланцоса. похожая вещь, но с немного разными свойствами в ядре, что в первую очередь означает, что у них будут разные характерные артефакты. Вы можете достаточно легко найти подробную информацию об этих функциях ядра (я уверен, что они есть в Википедии или любой вводный текст). Реализации, используемые в графических программах, как правило, сильно оптимизированы и иногда имеют специальные допущения, которые делают их более эффективными, но менее общими.

Оказывается, вы можете спроектировать ядро ​​свертки, которое имеет свойства, очень похожие на кубический сплайн, и использовать его для получения быстрой «бикубической»

ресэмплинга Ланцоса - то же самое, но с немного другими свойствами в ядре, что в первую очередь означает, что у них будут разные характерные артефакты. Вы можете достаточно легко найти подробную информацию об этих функциях ядра (я уверен, что они есть в Википедии или любой вводный текст). Реализации, используемые в графических программах, как правило, сильно оптимизированы и иногда имеют специальные допущения, которые делают их более эффективными, но менее общими.

Оказывается, вы можете спроектировать ядро ​​свертки, которое имеет свойства, очень похожие на кубический сплайн, и использовать его для получения быстрой «бикубической»

ресэмплинга Ланцоса - то же самое, но с немного другими свойствами в ядре, что в первую очередь означает, что у них будут разные характерные артефакты. Вы можете достаточно легко найти подробную информацию об этих функциях ядра (я уверен, что они есть в Википедии или любой вводный текст). Реализации, используемые в графических программах, как правило, сильно оптимизированы и иногда имеют специальные допущения, которые делают их более эффективными, но менее общими.

что в первую очередь означает, что у них будут разные характерные артефакты. Вы можете достаточно легко найти подробную информацию об этих функциях ядра (я уверен, что они есть в Википедии или любой вводный текст). Реализации, используемые в графических программах, как правило, сильно оптимизированы и иногда имеют специальные допущения, которые делают их более эффективными, но менее общими.

что в первую очередь означает, что у них будут разные характерные артефакты. Вы можете достаточно легко найти подробную информацию об этих функциях ядра (я уверен, что они есть в Википедии или любой вводный текст). Реализации, используемые в графических программах, как правило, сильно оптимизированы и иногда имеют специальные допущения, которые делают их более эффективными, но менее общими.

12
ответ дан 30 November 2019 в 12:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: