Сжатие изображения с Низким Рангом SVD

В этом примере показано, как использовать svdsketch сжимать изображение. svdsketch использует матричное приближение низкого ранга, чтобы сохранить важные функции изображения, при отфильтровывании менее важных функций. Когда допуск используется с svdsketch увеличения величины, больше функций отфильтровано, изменив уровень детализации в изображении.

Загрузка изображения

Загрузите изображение street1.jpg, который является изображением городской улицы. 3-D матрицей, которая формирует это изображение, является uint8, поэтому преобразуйте изображение в полутоновую матрицу. Просмотрите изображение с аннотацией исходного матричного ранга.

A = imread('street1.jpg');
A = rgb2gray(A);
imshow(A)
title(['Original (',sprintf('Rank %d)',rank(double(A)))])

Figure contains an axes object. The axes object with title Original (Rank 480) contains an object of type image.

Сожмите изображение

Используйте svdsketch вычислить матрицу низкого ранга, которая аппроксимирует A в допуске 1e-2. Сформируйте матрицу низкого ранга путем умножения факторов SVD, возвращенных svdsketch, преобразуйте результат в uint8, и просмотрите получившееся изображение.

[U1,S1,V1] = svdsketch(double(A),1e-2);
Anew1 = uint8(U1*S1*V1');
imshow(uint8(Anew1))
title(sprintf('Rank %d approximation',size(S1,1)))

Figure contains an axes object. The axes object with title Rank 288 approximation contains an object of type image.

svdsketch производит ранг 288 приближений, которые приводят к некоторой незначительной зернистости в некоторых границах изображения.

Теперь сожмите изображение во второй раз с помощью допуска 1e-1. Когда величина допуска увеличивается, ранг приближения, произведенного svdsketch обычно уменьшения.

[U2,S2,V2] = svdsketch(double(A),1e-1);
Anew2 = uint8(U2*S2*V2');
imshow(Anew2)
title(sprintf('Rank %d approximation',size(S2,1)))

Figure contains an axes object. The axes object with title Rank 48 approximation contains an object of type image.

На этот раз, svdsketch производит ранг 48 приближений. Большинство главных аспектов изображения все еще отображается, но дополнительное сжатие увеличивает нерезкость.

Ограничьте размер подпространства

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

Используйте svdsketch с допуском 1e-1 и максимальный размер подпространства 15. Задайте четвертый выход, чтобы возвратить относительную ошибку приближения.

[U3,S3,V3,apxErr] = svdsketch(double(A),1e-1,'MaxSubspaceDimension',15);

Сравните относительную ошибку приближения результата с заданным допуском. apxErr содержит один элемент начиная с svdsketch только потребности одна итерация, чтобы вычислить ответ.

apxErr <= 1e-1
ans = logical
   0

Результат показывает, что матричный эскиз не удовлетворяет заданному допуску.

Просмотрите в большой степени сжатый ранг 15 изображений.

Anew3 = uint8(U3*S3*V3');
imshow(Anew3)
title(sprintf('Rank %d approximation',size(S3,1)))

Figure contains an axes object. The axes object with title Rank 15 approximation contains an object of type image.

Сравните результаты

Наконец, просмотрите все изображения рядом друг с другом для сравнения.

tiledlayout(2,2,'TileSpacing','Compact')
nexttile
imshow(A)
title('Original')
nexttile
imshow(Anew1)
title(sprintf('Rank %d approximation',size(S1,1)))
nexttile
imshow(Anew2)
title(sprintf('Rank %d approximation',size(S2,1)))
nexttile
imshow(Anew3)
title(sprintf('Rank %d approximation',size(S3,1)))

Figure contains 4 axes objects. Axes object 1 with title Original contains an object of type image. Axes object 2 with title Rank 288 approximation contains an object of type image. Axes object 3 with title Rank 48 approximation contains an object of type image. Axes object 4 with title Rank 15 approximation contains an object of type image.

Смотрите также

| |

Похожие темы