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,98% энергии в изображении.

X = R(:);

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

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

R(abs(R) < abs(X(ind(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 (Parallel Computing Toolbox) объекты.

Пример: 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+δkNcos(πN1(n1)(k1))

  • DCT-2:

    y(k)=2Nn=1Nx(n)11+δk1cos(π2N(2n1)(k1))

  • DCT-3:

    y(k)=2Nn=1Nx(n)11+δn1cos(π2N(n1)(2k1))

  • DCT-4:

    y(k)=2Nn=1Nx(n)cos(π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] Оппенхейм, Алан V, Рональд В. Шафер и Джон Р. Бак. Обработка сигналов дискретного времени. 2-й Эд. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1999.

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

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

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

| | (Image Processing Toolbox) | (Image Processing Toolbox)

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