MATLAB 2-D Обратное косинусное преобразование:восстановите изображения из частотных данных
Обратное косинусное преобразование, часто обозначаемое как ICT или IDCT, представляет собой математическую операцию, обращающую процесс косинусного преобразования. Это особенно полезно при обработке сигналов и изображений для восстановления сигналов или изображений из их представлений в частотной области.
В контексте двумерных сигналов или изображений двумерное обратное косинусное преобразование (2-D ICT или 2-D IDCT) преобразует матрицу косинусных коэффициентов (представляющую частотный состав сигнала или изображения) обратно в пространственную область, давая исходный сигнал или изображение.
Двумерное обратное косинусное преобразование в MATLAB используется для преобразования матрицы значений косинуса в изображение пространственной области. Это операция, обратная двумерному косинусному преобразованию, которая обычно используется при обработке и сжатии изображений. Функция idct2 используется для выполнения двумерного обратного косинусного преобразования в MATLAB.
2-D обратное дискретное косинусное преобразование
В MATLAB функция idct2 используется для выполнения двумерного обратного косинусного преобразования. В качестве входных данных он принимает матрицу косинусных коэффициентов и возвращает представление сигнала или изображения в пространственной области. Результатом является реконструированное изображение, которое можно отобразить или подвергнуть дальнейшей обработке.
Обратное косинусное преобразование имеет решающее значение в различных приложениях, включая сжатие изображений (например, при сжатии JPEG), реконструкцию изображений и задачи обработки сигналов, когда сигналы или изображения необходимо преобразовать обратно в исходную форму после манипуляций в частотной области.
Синтаксис
B = idct2(A) B = idct2(A,m,n) B = idct2(A,[m n])
Пояснение синтаксиса
B =idct2(A) — вычисляет двумерное обратное дискретное косинусное преобразование (IDCT) матрицы A, возвращая результат в матрице B. Эта операция эффективно восстанавливает изображение пространственной области из его представления в частотной области в A.
B =idct2(A, m,n) — вычисляет двумерное обратное дискретное косинусное преобразование (IDCT) матрицы A и определяет размер выходной матрицы B как m на n. Эта операция эффективно реконструирует изображение в пространственной области из его представления в частотной области в A, изменяя его размер до указанных размеров m на n.
B =idct2(A, [m,n]) — вычисляет двумерное обратное дискретное косинусное преобразование (IDCT) матрицы A и изменяет размер выходной матрицы B так, чтобы она имела m строк и n столбцов. Эта операция реконструирует изображение в пространственной области из его представления в частотной области в A, изменяя его размер до указанных размеров [m n].
Давайте посмотрим несколько примеров двумерного обратного дискретного косинусного преобразования
Пример 1. Удаление высоких частот из изображения с помощью функции idct2()
У нас есть код —
img = imread('autumn.tif');
% Convert to grayscale if necessary
if size(img, 3) == 3
img = rgb2gray(img);
end
% Compute 2-D DCT
dct_img = dct2(double(img));
% Set a threshold to remove high frequencies (e.g., keep only the first 50 coefficients)
threshold = 50;
dct_img_thresh = dct_img;
dct_img_thresh(threshold+1:end, :) = 0;
dct_img_thresh(:, threshold+1:end) = 0;
% Compute the inverse 2-D DCT to get the filtered image
filtered_img = uint8(idct2(dct_img_thresh));
% Display the original and filtered images
figure;
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(filtered_img);
title('Filtered Image');
В примере —
- Функция imread используется для чтения изображения из файла (в данном случае «autumn.tif») и сохранения его в переменной img.
- Если изображение является цветным (т. е. имеет три канала для красного, зеленого и синего), оно преобразуется в оттенки серого с помощью функции rgb2gray. Это сделано потому, что 2-D DCT обычно применяется к изображениям в оттенках серого.
- Функция dct2 вычисляет двумерное DCT изображения. Результат сохраняется в переменной dct_img. DCT представляет изображение в частотной области, где высокочастотные компоненты соответствуют быстрым изменениям значений пикселей.
- Пороговое значение выбирается для определения того, какие коэффициенты DCT сохранить, а какие отбросить. В этом примере мы решили сохранить только первые 50 коэффициентов (в изображении размером 256x256 эти коэффициенты представляют самые низкие частоты). Высокочастотные коэффициенты (за порогом) обнуляются.
- Функция idct2 вычисляет обратное двумерное ДКП модифицированных коэффициентов ДКП (dct_img_thresh). Эта операция эффективно восстанавливает изображение в пространственной области из его представления в частотной области. Результат сохраняется в filtered_img.
- Наконец, исходное изображение и отфильтрованное изображение отображаются рядом с помощью функции imshow. Исходное изображение отображается слева, а отфильтрованное изображение (с удалением высоких частот) — справа.
При выполнении мы получаем результат —
Пример 2. Изменение размера изображения с помощью B =idct2(A, m,n)
У нас есть код —
% Read the image
img = imread('autumn.tif');
% Convert the image to grayscale
if size(img, 3) == 3
img = rgb2gray(img);
end
% Compute the 2-D DCT of the image
dct_img = dct2(double(img));
% Resize the DCT coefficients matrix (frequency domain representation) to a smaller size
% Let's resize it to half the original size
new_size = size(img) / 2;
dct_resized = imresize(dct_img, new_size);
% Compute the inverse 2-D DCT to get the resized image
resized_img = uint8(idct2(dct_resized, size(img, 1), size(img, 2)));
% Display the original and resized images
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(resized_img);
title('Resized Image using 2-D IDCT');
В примере у нас есть —
- Функция imread используется для чтения изображения из файла (в данном случае «autumn.tif») и сохранения его в переменной img.
- Если изображение является цветным (т. е. имеет три канала для красного, зеленого и синего), оно преобразуется в оттенки серого с помощью функции rgb2gray. Этот шаг важен, поскольку 2D DCT обычно применяется к изображениям в оттенках серого.
- Функция dct2 вычисляет двумерное DCT изображения. Результат сохраняется в переменной dct_img. DCT представляет изображение в частотной области, где разные частоты изображения представлены разными коэффициентами.
- Чтобы изменить размер изображения, мы изменяем размер матрицы коэффициентов DCT (dct_img) до меньшего размера. Это делается с помощью функции imresize, определяющей новый размер как половину исходного размера (new_size =size(img)/2). Это эффективно уменьшает представление изображения в частотной области.
- Функция idct2 вычисляет обратное двумерное ДКП коэффициентов ДКП с измененным размером (dct_resized). Эта операция эффективно реконструирует измененное изображение в пространственной области из его измененного представления в частотной области.
- Наконец, исходное изображение и изображение с измененным размером отображаются рядом с помощью функции imshow. Исходное изображение отображается слева, а изображение с измененным размером (полученное с помощью 2-D IDCT) — справа.
Результат выполнения:—
Пример 3. Изменение размера матрицы с использованием двумерного обратного дискретного косинусного преобразования (IDCT)
У нас есть следующий код:
% Create a sample matrix A
A = [
10, 20, 30, 40;
50, 60, 70, 80;
90, 100, 110, 120;
130, 140, 150, 160
];
% Display the original matrix A
disp('Original Matrix A:');
disp(A);
% Compute the 2-D IDCT of A and resize it to a 3x2 matrix
B = idct2(A, [3, 2]);
% Display the resized matrix B
disp('Resized Matrix B (3x2):');
disp(B);
В этом примере мы создаем выборочную матрицу A размером 4x4. Затем мы применяем 2D IDCT к A и изменяем размер результата до матрицы 3x2 [m, n] =[3, 2]. Матрица B с измененным размером отображается после преобразования.
Результат, который мы получаем, следующий:
Original Matrix A: 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 Resized Matrix B (3x2): 122.0957 -11.9692 -97.4491 1.6910 12.0957 -1.9692
MATLAB