MATLAB 2-D обратное косинусное преобразование: восстановление изображений из частотных данных
Обратное косинусное преобразование, часто обозначаемое как ICT или IDCT, — это математическая операция, которая обращает процесс косинусного преобразования. Она особенно полезна в обработке сигналов и изображений для восстановления сигналов или изображений из их представлений в частотной области.
В контексте 2-D сигналов или изображений, 2-D обратное косинусное преобразование (2-D ICT или 2-D IDCT) преобразует матрицу косинусных коэффициентов (представляющую частотное содержимое сигнала или изображения) обратно в пространственную область, давая исходный сигнал или изображение.
2-D обратное дискретное косинусное преобразование в MATLAB используется для преобразования матрицы косинусных значений в пространственное изображение. Это обратная операция 2-D косинусного преобразования и обычно используется в обработке и сжатии изображений. Функция idct2 используется для выполнения 2-D обратного косинусного преобразования в MATLAB.
2-D обратное дискретное косинусное преобразование
В MATLAB функция idct2 используется для выполнения 2-D обратного косинусного преобразования. Она принимает матрицу косинусных коэффициентов на входе и возвращает пространственное представление сигнала или изображения. Результат — восстановленное изображение, которое может быть отображено или дальше обработано.
Обратное косинусное преобразование критично в различных приложениях, включая сжатие изображений (например, в 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].
Давайте посмотрим несколько примеров для 2-D обратного дискретного косинусного преобразования.
Пример 1: Удаление высоких частот из изображения с помощью функции idct2()
Код следующий:
img = imread('autumn.tif');
% Преобразование в оттенки серого при необходимости
if size(img, 3) == 3
img = rgb2gray(img);
end
% Вычисление 2-D DCT
dct_img = dct2(double(img));
% Установка порога для удаления высоких частот (например, оставить только первые 50 коэффициентов)
threshold = 50;
dct_img_thresh = dct_img;
dct_img_thresh(threshold+1:end, :) = 0;
dct_img_thresh(:, threshold+1:end) = 0;
% Вычисление обратного 2-D DCT для получения отфильтрованного изображения
filtered_img = uint8(idct2(dct_img_thresh));
% Отображение оригинального и отфильтрованного изображений
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 вычисляет 2-D DCT изображения. Результат сохраняется в переменной dct_img. DCT представляет изображение в частотной области, где высокочастотные компоненты соответствуют быстрым изменениям значений пикселей.
- Выбирается пороговое значение для определения, какие коэффициенты DCT сохранить, а какие отбросить. В этом примере мы выбираем оставить только первые 50 коэффициентов (в изображении 256x256 эти коэффициенты представляют низкие частоты). Высокочастотные коэффициенты (те, что за порогом) устанавливаются в ноль.
- Функция idct2 вычисляет обратное 2-D DCT модифицированных коэффициентов DCT (dct_img_thresh). Эта операция эффективно восстанавливает пространственное изображение из его частотного представления. Результат сохраняется в filtered_img.
- Наконец, оригинальное изображение и отфильтрованное изображение отображаются рядом с помощью функции imshow. Оригинальное изображение слева, отфильтрованное (с удаленными высокими частотами) справа.
При выполнении вывод получается:
(оригинал и сглаженное изображение без высоких частот)
Пример 2: Изменение размера изображения с помощью B = idct2(A, m,n)
Код следующий:
% Чтение изображения
img = imread('autumn.tif');
% Преобразование изображения в оттенки серого
if size(img, 3) == 3
img = rgb2gray(img);
end
% Вычисление 2-D DCT изображения
dct_img = dct2(double(img));
% Изменение размера матрицы коэффициентов DCT (частотного представления) до меньшего размера
% Давайте изменим размер до половины оригинала
new_size = size(img) / 2;
dct_resized = imresize(dct_img, new_size);
% Вычисление обратного 2-D DCT для получения изображения с измененным размером
resized_img = uint8(idct2(dct_resized, size(img, 1), size(img, 2)));
% Отображение оригинального и измененного изображений
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. Этот шаг важен, потому что 2-D DCT обычно применяется к изображениям в оттенках серого.
- Функция dct2 вычисляет 2-D DCT изображения. Результат сохраняется в dct_img. DCT представляет изображение в частотной области, где разные частоты представлены разными коэффициентами.
- Для изменения размера изображения мы изменяем размер матрицы коэффициентов DCT (dct_img) до меньшего размера. Это делается с помощью функции imresize, задавая новый размер как половину оригинала (new_size = size(img) / 2). Это эффективно уменьшает частотное представление изображения.
- Функция idct2 вычисляет обратное 2-D DCT измененных коэффициентов DCT (dct_resized). Эта операция эффективно восстанавливает пространственное изображение с измененным размером из его частотного представления с измененным размером.
- Наконец, оригинальное изображение и изображение с измененным размером отображаются рядом с помощью imshow. Оригинал слева, изображение с измененным размером (полученное с помощью 2-D IDCT) справа.
Вывод при выполнении:
(оригинал и уменьшенное через IDCT изображение)
Пример 3: Изменение размера матрицы с помощью 2-D обратного дискретного косинусного преобразования (IDCT)
Код следующий:
% Создание образцовой матрицы A
A = [ 10, 20, 30, 40;
50, 60, 70, 80;
90, 100, 110, 120;
130, 140, 150, 160 ];
% Отображение оригинальной матрицы A
disp('Original Matrix A:');
disp(A);
% Вычисление 2-D IDCT от A и изменение размера до матрицы 3x2
B = idct2(A, [3, 2]);
% Отображение измененной матрицы B
disp('Resized Matrix B (3x2):');
disp(B);
В этом примере мы создаем 4x4 образцовую матрицу A. Затем применяем 2-D 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
- Визуализация математических выражений в MATLAB: руководство по 2D и 3D построению графиков
- Освоение собственных значений и собственных векторов в MATLAB: практическое руководство
- Функции в MATLAB: определение, рабочая область, входные и выходные аргументы
- Импорт данных в MATLAB: эффективная загрузка внешних файлов
- Интегрирование в MATLAB: от неопределенных интегралов к суммам Римана
- MATLAB: фильтр Лапласиана Гаусса для детекции границ
- Преобразования в MATLAB: Лаплас, Фурье, БПФ (FFT)
- Быстрое руководство: Настройка окружения MATLAB
- MATLAB: эффективное вычисление производных полиномов
- Векторы в MATLAB: Строковые, столбцовые и основные операции