Вейвлеты: работа с изображениями

В этом разделе приведены дополнительные сведения о работе с изображениями в программном обеспечении Wavelet Toolbox™. Он описывает типы поддерживаемых изображений и то, как MATLAB® окружение представляет их, а также методы анализа цветных изображений.

Понимание изображений в среде MATLAB

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

Пиксель слова получают из элемента изображения и обычно обозначает одну точку на компьютерном отображении или один элемент в матрице изображения. Можно выбрать один пиксель из матрицы изображений с помощью обычного матричного индексирования. Для примера:

I(2,15)

возвращает значение пикселя в строке 2 и столбце 15 изображения I. По умолчанию MATLAB масштабирует изображения, чтобы заполнить оси отображения; поэтому пиксель изображения может использовать больше, чем один пиксель на экране.

Индексированные изображения

Типичное цветное изображение требует двух матриц: палитры и матрицы изображения. Палитра является упорядоченным множеством значений, которые представляют цвета в изображении. Для каждого пикселя изображения матрица изображения содержит соответствующий индекс в палитру. (Элементами матрицы изображений являются целые числа с плавающей точкой или флинты, которые MATLAB сохраняет как значения двойной точности.)

Размер матрицы палитры n-by-3 для изображения, содержащего n цвета. Каждая строка матрицы палитры является красным, зеленым, синим (RGB) вектором цвета 1 на 3

color = [R G B]

это определяет интенсивность красных, зеленых и синих компонентов этого цвета. R, G, и B являются действительными скалярами, которые варьируются от 0,0 (черный) до 1,0 (полная интенсивность). MATLAB преобразует эти значения в интенсивность отображения при отображении изображения и его палитры.

Когда MATLAB отображает индексированное изображение, он использует значения в матрице изображения, чтобы просмотреть требуемый цвет в палитре. Для образца, если матрица изображений содержит значение, 18 в расположении матрицы (86 198), цвет для пикселя (86 198) является цветом из 18 строк палитры.

Вне MATLAB индексированные изображения с n цвета часто содержат значения от 0 до n-1. Эти значения являются индексами в палитру с 0 в качестве его первого индекса. Поскольку матрицы MATLAB начинаются с индекса 1, необходимо увеличить каждое значение в изображении или переместить изображение вверх, чтобы создать изображение, которым можно манипулировать с функциями тулбокса.

Вейвлет индексированных изображений

Индексированные изображения могут рассматриваться как масштабированные изображения интенсивности с элементами матрицы, содержащими только целые числа от 1 до n, где n - количество дискретных оттенков в изображении.

Если палитра не предусмотрена, приложение Wavelet Analyzer отображает изображение и результаты обработки с помощью монотонной палитры с max(max(X))-min(min(X))+1 цвета.

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

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

Как отображаются декомпозиции

Обратите внимание, что коэффициенты, приближения и детали, произведенные разложением вейвлетов, не являются индексированными матрицами изображений.

Чтобы отобразить эти изображения подходящим образом, приложение Wavelet Analyzer соблюдает следующие правила:

  • Восстановленные приближения отображаются с помощью палитры map.

  • Коэффициенты и восстановленные детали отображаются с помощью палитры map применяется к измененной версии матриц.

RGB (Truecolor) Изображения

Изображение RGB, иногда называемое изображением truecolor, хранится в MATLAB как массив данных m -by n -by-3, который задает красные, зеленые и синие компоненты цвета для каждого отдельного пикселя. Изображения RGB не используют палитру. Цвет каждого пикселя определяется комбинацией интенсивности красного, зеленого и синего цветов, сохраненной в каждой цветовой плоскости в местоположении пикселя. Форматы графических файлов хранят изображения RGB как 24-битные изображения, где красные, зеленые и синие компоненты составляют 8 биты каждый. Это дает потенциал 16 миллионов цветов.

Точность, с которой можно тиражировать реальное изображение, привела к прозвищу «изображение труколора». Массив RGB MATLAB может иметь класс double, single, uint8, или uint16. В массиве RGB с double классовкаждый цветовой компонент является значением от 0 до 1.

Цветные компоненты 8-битного изображения RGB являются целыми числами в области значений [0, 255], а не значениями с плавающей точкой в области значений [0, 1].

Вейвлет изображений Truecolor

Проанализированные изображения truecolor представляют собой m -by n -by-3 массивов uint8. Каждый из трехцветных компонентов является матрицей, которая разлагается с помощью схемы 2-D вейвлета разложения.

Другие изображения

Программное обеспечение Wavelet Toolbox позволяет работать с некоторыми другими типами изображений. Использование imread function, различные инструменты, использующие изображения, пытаются загрузить индексированные изображения из файлов, не являющихся файлами MAT (для примера, PCX-файлов).

Этими инструментами являются:

  • 2-D дискретный анализ вейвлет

  • 2-D вейвлеты вейвлет-пакетов

  • 2-D стационарного Вейвлеты анализа

Для получения дополнительной информации о поддерживаемых типах файлов введите help imread.

Используйте imfinfo функция для поиска типа изображения, хранящегося в файле. Если файл не содержит индексированного изображения, операция загрузки завершается неуспешно.

Преобразование изображений

Программное обеспечение Image Processing Toolbox™ предоставляет полный набор функций, которые позволяют вам легко преобразовывать между типами изображений. Если у вас нет программного обеспечения Image Processing Toolbox, приведенные ниже примеры демонстрируют, как это преобразование может быть выполнено с помощью основных команд MATLAB.

Пример 1: Преобразование цветовых индексированных изображений

load xpmndrll 
whos 
ИмяРазмерБайтыКласс
X2192x200307200double array
map64x31536double array
image(X2)
title('Original Color Indexed Image') 
colormap(map); colorbar

Цветовая панель справа от изображения не гладкая и монотонно не прогрессирует от темного к светлому. Этот тип индексированного изображения не подходит для прямого разложения вейвлета с помощью тулбокса и должен быть предварительно обработан.

Во-первых, разделите цветное индексированное изображение на компоненты RGB:

R = map(X2,1); R = reshape(R,size(X2));
G = map(X2,2); G = reshape(G,size(X2));
B = map(X2,3); B = reshape(B,size(X2));

Затем преобразуйте матрицы RGB в серое изображение интенсивности, используя стандартные перцепционные веса для трехцветных компонентов:

Xrgb = 0.2990*R + 0.5870*G + 0.1140*B;

Затем преобразуйте изображение интенсивности серого масштаба назад в индексированное изображение серого масштаба с 64 различными уровнями и создайте новую палитру с 64 уровнями серого:

n = 64;            % Number of shades in new indexed image 
X = round(Xrgb*(n-1)) + 1; 
map2 = gray(n); 
figure 
image(X), title('Processed
Gray Scale Indexed Image') 
colormap(map2), colorbar

Цветовая полоса преобразованного изображения теперь линейная и имеет плавный переход от темного к светлому. Теперь изображение подходит для вейвлет.

Наконец, сохраните преобразованное изображение в форме, совместимой с приложением Wavelet Toolbox Wavelet Analyzer:

baboon = X; 
map = map2; 
save baboon baboon map

Пример 2: Преобразование изображения RGB TIF

Предположим, что файл myImage.tif содержит изображение RGB (без сжатия) размера S1xS2. Используйте следующие команды для преобразования этого изображения:

A = imread('myImage.tif');  
% A is an S1xS2x3 array of uint8.  

A = double(A);
Xrgb  = 0.2990*A(:,:,1) + 0.5870*A(:,:,2) + 0.1140*A(:,:,3); 
NbColors = 255; 
X = wcodemat(Xrgb,NbColors); 
map = pink(NbColors);

Эта же программа может использоваться для преобразования файлов BMP или JPEG.