В этом примере показано, как использовать griddedInterpolant для повторной выборки пикселов в изображении. Повторная выборка изображения полезна для настройки разрешения и размера, а также для сглаживания пикселов после масштабирования.
Загрузить и показать изображение ngc6543a.jpg, который представляет собой изображение планетарных туманностей NGC 6543 космическим телескопом Хаббла. Это изображение отображает несколько интересных структур, таких как концентрические газовые оболочки, струи высокоскоростного газа и необычные узлы газа. Матрица A , который представляет изображение, является матрицей 650 на 600 на 3 uint8 целые числа.
A = imread('ngc6543a.jpg');
imshow(A)
Создайте для изображения интерполированный объект с сеткой. griddedInterpolant работает только для матриц с двойной и одной точностью, поэтому преобразуйте uint8 матрица для double. Для интерполяции каждого канала RGB изображения укажите два вектора сетки для описания точек выборки в первых двух измерениях. Векторы сетки группируются как векторы столбцов в массиве ячеек {xg1,xg2,...,xgN}. С этой формулировкой, griddedInterpolant обрабатывает матрицу 3-D как содержащую несколько наборов данных 2-D, определенных в одной сетке.
sz = size(A);
xg = 1:sz(1);
yg = 1:sz(2);
F = griddedInterpolant({xg,yg},double(A));Используйте размеры первых двух матричных размеров для повторной выборки изображения таким образом, чтобы оно составляло 120% размера. То есть для каждого 5 пикселей в исходном изображении интерполированное изображение имеет 6 пикселей. Вычислить интерполятор в точках запроса с помощью синтаксиса F({xq,yq}). griddedInterpolant оценивает каждую страницу в 3-D изображении в точках запроса.
xq = (0:5/6:sz(1))';
yq = (0:5/6:sz(2))';
vq = uint8(F({xq,yq}));
imshow(vq)
title('Higher Resolution')
Аналогично, уменьшите размер изображения, запросив интерполятор с 55% меньшим количеством точек, чем исходное изображение. Хотя можно просто индексировать в исходную матрицу изображения для создания изображений с более низким разрешением, интерполяция позволяет выполнить повторную выборку изображения в неинтегрированных местоположениях пикселей.
xq = (0:1.55:sz(1))';
yq = (0:1.55:sz(2))';
vq = uint8(F({xq,yq}));
figure
imshow(vq)
title('Lower Resolution')
При увеличении изображения пикселы в интересующей области становятся больше, а детали изображения быстро теряются. Для сглаживания этих артефактов масштабирования можно использовать повторную выборку изображений.
Увеличьте изображение светлого пятна в центре исходного изображения. (Индексация в A является центрировать это светлое пятно на изображении так, чтобы последующее увеличение не выталкивало его из кадра.)
imshow(A(1:570,10:600,:),'InitialMagnification','fit') zoom(10) title('Original Image, 10x Zoom')

Запрос интерполятора F для воспроизведения этого увеличенного изображения (приблизительно) с более высоким разрешением в 10 раз. Сравните результаты нескольких различных методов интерполяции.
xq = (1:0.1:sz(1))'; yq = (1:0.1:sz(2))'; F.Method = 'linear'; vq = uint8(F({xq,yq})); imshow(vq(1:5700,150:5900,:),'InitialMagnification','fit') zoom(10) title('Linear method')

F.Method = 'cubic'; vq = uint8(F({xq,yq})); imshow(vq(1:5700,150:5900,:),'InitialMagnification','fit') zoom(10) title('Cubic method')

F.Method = 'spline'; vq = uint8(F({xq,yq})); imshow(vq(1:5700,150:5900,:),'InitialMagnification','fit') zoom(10) title('Spline method')
