MATLAB imresize с пользовательским интерполяционным ядром - PullRequest
4 голосов
/ 07 ноября 2011

как я могу использовать свою функцию в качестве метода интерполяции для функции imresize в MATLAB?

Я прочитал справку MATLAB о том, как использовать пользовательскую функцию для метода интерполяции, но четкого примера не было.и я попытался написать код для ма

Ответы [ 2 ]

5 голосов
/ 07 ноября 2011

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

imNewSize = imresize(imOldSize, sizeFactor, 'box')

для коробчатого ядра. Если вы хотите указать свое собственное ядро, вы можете передать его как дескриптор функции вместе с шириной ядра в массиве ячеек. Например, чтобы реализовать ядро ​​в форме коробки (без использования встроенного) с шириной ядра 4, попробуйте:

boxKernel = @(x)(-0.5 <= x) & (x < 0.5);
imNewSize = imresize(imOldSize, sizeFactor, {boxKernel, 4});

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

4 голосов
/ 07 ноября 2011

Вот как вы вызываете функцию изменения размера для изображения A, которое хотело бы изменить размер до 64x52, со специальным ядром "lanczos2":

B = imresize(A, [64 52], {@lanczos2,4.0} );

Вот один пример одного ядра интерполяции, которое вы бы сохранили как lanczos2.m

function f = lanczos2(x)
f = (sin(pi*x) .* sin(pi*x/2) + eps) ./ ((pi^2 * x.^2 / 2) + eps);
f = f .* (abs(x) < 2);
end

Обратите внимание, что это конкретное ядро ​​уже реализовано в imresize.m Я думаю, что ваша проблема была связана с "@", который служит для ссылки на функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...