exponenta event banner

Сжатие изображения с помощью 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. The axes 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. The axes 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. The axes 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. The axes 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. Axes 1 with title Original contains an object of type image. Axes 2 with title Rank 288 approximation contains an object of type image. Axes 3 with title Rank 48 approximation contains an object of type image. Axes 4 with title Rank 15 approximation contains an object of type image.

См. также

| |

Связанные темы