exponenta event banner

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

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

Общие сведения об изображениях в среде MATLAB

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

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

I(2,15)

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

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

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

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

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-ю схему разложения небольшой волны.

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

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

К этим инструментам относятся:

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

  • 2-D Вейвлет-анализ пакетов

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

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

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

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

Программное обеспечение 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.