2015-08-11 3 views
2

Я применяю функцию dwt2 для изображения, чтобы применить вейвлет-преобразование, которое дает четыре изображения результата cA (изображение с низким разрешением), cH (изображение с горизонтальной детализацией), cV (вертикальное подробное изображение), cD (Диагональное детальное изображение). Все это до сих пор. Я хочу визуализировать эти изображения результатов.Как показать функцию преобразования вейвлет-данных dwt2 приводит к получению matlab

Настоящий Я визуализирую эти четыре изображения результатов, используя этот ниже код.

image = imread(imagePath); 
wavename = 'haar'; 
[cA,cH,cV,cD] = dwt2(im2double(iamge),wavename); 
imshow([cA,cH; cV,cD],'Colormap',gray); 

, когда я запускаю этот код, визуализируя результат выглядит следующим образом enter image description here

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

enter image description here

ответ

1

На втором изображении вашего вопроса, отображается два уровня вейвлет-преобразования. В примере с кодом dwt2 вы выполняете одноуровневую декомпозицию. Чтобы выполнить двухуровневое разложение, вы можете использовать функцию wavedec2 с N=2. Для того, чтобы создать сюжет, как показано на рисунке, вы должны внимательно посмотреть на возвращаемых значений wavedec2:

data (изображение с помощью Mathworks, из [2])

Вектор C содержит все коэффициенты аппроксимации, хранящийся по-разному. S - это так называемая «бухгалтерская» матрица, так как она содержит информацию о том, как хранятся данные.

Теперь первое изображение, cA2 в приведенном выше примере, является первым 32 * 32 записями C. Использование ii и jj в качестве индексных переменных, мы можем получить соответствующие части C и использовать reshape, чтобы вернуться к формату изображения:

ii = 1; jj = prod(S(1,:)); 
cA2 = reshape(C(ii:jj),S(1,:)); 

аналогичным Достигнуты остальные коэффициенты второго уровня:

ii = jj+1; jj = ii + prod(S(2,:)) - 1; 
cH2 = reshape(C(ii:jj),S(2,:)); 

ii = jj+1; jj = ii + prod(S(2,:)) - 1; 
cV2 = reshape(C(ii:jj),S(2,:)); 

ii = jj+1; jj = ii + prod(S(2,:)) - 1; 
cD2 = reshape(C(ii:jj),S(2,:)); 

Коэффициенты первого уровня также могут быть получены аналогичным образом, используя третий ряд S:

ii = jj+1; jj = ii + prod(S(3,:)) - 1; 
cH1 = reshape(C(ii:jj),S(3,:)); 

ii = jj+1; jj = ii + prod(S(3,:)) - 1; 
cV1 = reshape(C(ii:jj),S(3,:)); 

ii = jj+1; jj = ii + prod(S(3,:)) - 1; 
cD1 = reshape(C(ii:jj),S(3,:)); 

Теперь сюжет просто может быть создан путем размещения изображения по желанию:

imshow([[cA2,cH2; cV2,cD2],cH1;cV1,cD1],'Colormap',pink) 

Для добавления границ, вы можете использовать rectangle функцию и информацию от S:

% Small rectangles 
rectangle('Position',[0,0,S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y'); 
rectangle('Position',[S(1,1),0,S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y'); 
rectangle('Position',[0,S(1,2),S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y'); 
rectangle('Position',[S(1,1),S(1,2),S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y'); 

% Large rectangles 
rectangle('Position',[0,S(3,2),S(3,1),S(3,2)],'LineWidth',2,'EdgeColor','y'); 
rectangle('Position',[S(3,1),0,S(3,1),S(3,2)],'LineWidth',2,'EdgeColor','y'); 
rectangle('Position',[S(3,1),S(3,2),S(3,1),S(3,2)],'LineWidth',2,'EdgeColor','y'); 
+0

Благодаря его работы, но одна вещь, как можно добавить границу для каждого изображения –

+0

Совершенная.. Самый простой способ - добавить каждую границу с помощью 'rectangle ('Position', [x, y, w, h])'. Вы также можете использовать содержимое 'S' для вычисления' x, y, w, h 'для каждого прямоугольника. – hbaderts

+0

Я новичок в Matlab. Можете ли вы показать мне, как рассчитать x, y, w, h, используя S. –

1

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

image = imread(imagePath); 
wavename = 'haar'; 
[cA,cH,cV,cD] = dwt2(im2double(image),wavename); 
[cAA,cAH,cAV,cAD] = dwt2(cA,wavename); % Recompute Wavelet of Approximation Coefs. 
Level2=[cAA,cAH; cAV,cAD]; %contacinat 
imshow([Level2,cH; cV,cD],'Colormap',gray); 

Результаты для "оператор.TIF»Изображение:

2 Level Haar Wavelet Image

Для более уровней просто вычислить вейвлет-аппроксимации коэффициентов второго уровня