dct

Дискретное косинусное преобразование

Описание

пример

y = dct(x) возвращает унитарное дискретное косинусное преобразование входного массива x. Выход y имеет тот же размер как x. Если x имеет больше чем одну размерность, затем dct действует вдоль первого измерения массива с размером, больше, чем 1.

y = dct(x,n) нулевые клавиатуры или обрезают соответствующую размерность x к длине n перед преобразованием.

пример

y = dct(x,n,dim) вычисляет преобразование по измерению dim. Вводить размерность и использовать значение по умолчанию n, задайте второй аргумент как пустой, [].

пример

y = dct(___,'Type',dcttype) задает тип дискретного косинусного преобразования, чтобы вычислить. Смотрите Дискретное косинусное преобразование для деталей. Эта опция может быть объединена с любым из предыдущих синтаксисов.

Примеры

свернуть все

Найдите, сколько коэффициентов DCT представляет 99% энергии в последовательности.

x = (1:100) + 50*cos((1:100)*2*pi/40);
X = dct(x);
[XX,ind] = sort(abs(X),'descend');
i = 1;
while norm(X(ind(1:i)))/norm(X) < 0.99
   i = i + 1;
end
needed = i;

Восстановите сигнал и сравните его с исходным сигналом.

X(ind(needed+1:end)) = 0;
xx = idct(X);

plot([x;xx]')
legend('Original',['Reconstructed, N = ' int2str(needed)], ...
       'Location','SouthEast')

Загрузите файл, который содержит измерения глубины формы, используемой, чтобы чеканить пенс Соединенных Штатов. Данные, взятые в Национальном институте стандартов и технологий, производятся на 128 128 сетка. Отобразите данные.

load penny

surf(P)
view(2)
colormap copper
shading interp
axis ij square off

Вычислите дискретное косинусное преобразование данных изображения. Действуйте сначала вдоль строк и затем вдоль столбцов.

Q = dct(P,[],1);
R = dct(Q,[],2);

Найдите, какой процент коэффициентов DCT содержат 99,9% энергии в изображении.

X = R(:);

[~,ind] = sort(abs(R(:)),'descend');
coeffs = 1;
while norm(X(ind(1:coeffs)))/norm(X) < 0.999
   coeffs = coeffs + 1;
end
fprintf('%3.1f%% of the coefficients are sufficient\n',coeffs/numel(R)*100)
6.9% of the coefficients are sufficient

Восстановите изображение с помощью только необходимые коэффициенты.

R(abs(R) < X(coeffs)) = 0;

S = idct(R,[],2);
T = idct(S,[],1);

Отобразите восстановленное изображение.

surf(T)
view(2)
shading interp
axis ij square off

Загрузите файл, который содержит измерения глубины формы, используемой, чтобы чеканить пенс Соединенных Штатов. Данные, взятые в Национальном институте стандартов и технологий, производятся на 128 128 сетка. Отобразите данные.

load penny

surf(P)
view(2)
colormap copper
shading interp
axis ij square off

Вычислите дискретное косинусное преобразование данных изображения с помощью варианта DCT 1. Действуйте сначала вдоль строк и затем вдоль столбцов.

Q = dct(P,[],1,'Type',1);
R = dct(Q,[],2,'Type',1);

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

S = idct(R,size(P,2)/2,2,'Type',1);
T = idct(S,size(P,1)/2,1,'Type',1);

Инвертируйте преобразование снова. Нулевая клавиатура инверсия так, чтобы каждая размерность восстановленного изображения была дважды длиной оригинала.

U = idct(R,size(P,2)*2,2,'Type',1);
V = idct(U,size(P,1)*2,1,'Type',1);

Отобразите исходные и восстановленные изображения.

surf(V)
view(2)
shading interp
hold on

surf(P)
view(2)
shading interp

surf(T)
view(2)
shading interp
hold off
axis ij equal off

Входные параметры

свернуть все

Входной массив, заданный как или комплексный вектор с действительным знаком, матрица, массив N-D или gpuArray объект.

Смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox) и Поддержка графического процессора Релизом (Parallel Computing Toolbox) для получения дополнительной информации о gpuArray объекты.

Пример: sin(2*pi*(0:255)/4) задает синусоиду как вектор-строку.

Пример: sin(2*pi*[0.1;0.3]*(0:39))' задает двухканальную синусоиду.

Типы данных: single | double
Поддержка комплексного числа: Да

Преобразуйте длину, заданную как положительный целочисленный скаляр.

Типы данных: single | double

Величина для работы, заданная как положительный целый скаляр.

Типы данных: single | double

Тип дискретного косинусного преобразования, заданный как положительный целочисленный скаляр от 1 до 4. Смотрите Дискретное косинусное преобразование для определений различных типов DCT.

Типы данных: single | double

Выходные аргументы

свернуть все

Дискретное косинусное преобразование, возвращенное как или комплексный вектор с действительным знаком, матрица, массив N-D или gpuArray объект.

Больше о

свернуть все

Дискретное косинусное преобразование

Дискретное косинусное преобразование (DCT) тесно связано с дискретным преобразованием Фурье. Можно часто восстанавливать последовательность очень точно только от нескольких коэффициентов DCT. Это свойство полезно для приложений, требующих снижения объема данных.

DCT имеет четыре стандартных варианта. Для x сигнала длины N, и с δkℓ Кронекерова дельта, преобразования заданы:

  • DCT-1:

    y(k)=2N1n=1Nx(n)11+δn1+δnN11+δk1+δkNпотому что(πN1(n1)(k1))

  • DCT-2:

    y(k)=2Nn=1Nx(n)11+δk1потому что(π2N(2n1)(k1))

  • DCT-3:

    y(k)=2Nn=1Nx(n)11+δn1потому что(π2N(n1)(2k1))

  • DCT-4:

    y(k)=2Nn=1Nx(n)потому что(π4N(2n1)(2k1))

Ряды индексируются от n = 1 и k = 1 вместо обычного n = 0 и k = 0, потому что векторы MATLAB®, запущенные от 1 до N вместо от 0 до N – 1.

Все варианты DCT являются унитарными (или, эквивалентно, ортогональными): найти их инверсии, переключатель k и n в каждом определении. В частности, DCT-1 и DCT-4 являются их собственными инверсиями, и DCT-2 и DCT-3 являются инверсиями друг друга.

Ссылки

[1] Джайн, А. К. Основные принципы цифровой обработки изображений. Englewood Cliffs, NJ: Prentice Hall, 1989.

[2] Pennebaker, W. B. и Дж. Л. Митчелл. Стандарт сжатия данных неподвижного изображения JPEG. Нью-Йорк: Ван Нострэнд Райнхольд, 1993.

[3] Оппенхейм, Алан V, Рональд В. Шафер и Джон Р. Бак. Обработка сигналов дискретного времени. 2-й Эд. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1999.

Расширенные возможности

Представлено до R2006a

Для просмотра документации необходимо авторизоваться на сайте