На втором изображении вашего вопроса, отображается два уровня вейвлет-преобразования. В примере с кодом dwt2
вы выполняете одноуровневую декомпозицию. Чтобы выполнить двухуровневое разложение, вы можете использовать функцию wavedec2
с N=2
. Для того, чтобы создать сюжет, как показано на рисунке, вы должны внимательно посмотреть на возвращаемых значений wavedec2
:
(изображение с помощью 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');
Благодаря его работы, но одна вещь, как можно добавить границу для каждого изображения –
Совершенная.. Самый простой способ - добавить каждую границу с помощью 'rectangle ('Position', [x, y, w, h])'. Вы также можете использовать содержимое 'S' для вычисления' x, y, w, h 'для каждого прямоугольника. – hbaderts
Я новичок в Matlab. Можете ли вы показать мне, как рассчитать x, y, w, h, используя S. –