regardant la documentation dwt2
et idwt2
, il semble que vous avez 2 options générales pour reconstruire vos images décomposées se multiplient-:
- magasin toutes les matrices de coefficients de détail horizontales, verticales et diagonales de chaque étape de décomposition et les utiliser dans la reconstruction.
- Entrez une matrice vide (
[]
) pour les matrices de coefficients de détail que vous n'avez pas sauvegardées lors des étapes de décomposition précédentes.
Comme il était un jour lent, voici un code montrant comment faire et ce que les résultats ressemblent pour chaque cas ...
En premier lieu, charger une image de l'échantillon et initialiser certaines variables:
load woman; % Load image data
nLevel = 3; % Number of decompositions
nColors = size(map, 1); % Number of colors in colormap
cA = cell(1, nLevel); % Approximation coefficients
cH = cell(1, nLevel); % Horizontal detail coefficients
cV = cell(1, nLevel); % Vertical detail coefficients
cD = cell(1, nLevel); % Diagonal detail coefficients
maintenant, appliquer les décompositions (dans ce cas 3) et stocker les matrices de coefficients de détail de chaque étape dans une matrice de cellules:
startImage = X;
for iLevel = 1:nLevel,
[cA{iLevel}, cH{iLevel}, cV{iLevel}, cD{iLevel}] = dwt2(startImage, 'db1');
startImage = cA{iLevel};
end
Pour voir ce que l'image décomposée finale ressemble, ainsi que toutes les matrices de coefficients de détail le long du chemin, exécutez le code suivant (qui utilise wcodemat
):
tiledImage = wcodemat(cA{nLevel}, nColors);
for iLevel = nLevel:-1:1,
tiledImage = [tiledImage wcodemat(cH{iLevel}, nColors); ...
wcodemat(cV{iLevel}, nColors) wcodemat(cD{iLevel}, nColors)];
end
figure;
imshow(tiledImage, map);
Vous devriez voir quelque chose comme ceci:
Maintenant il est temps de reconstruire! Le code suivant effectue une reconstruction « complète » (en utilisant tous des matrices de coefficients de détail stockées) et une reconstruction « partielle » (en utilisant aucune d'entre eux), il trace les images:
fullRecon = cA{nLevel};
for iLevel = nLevel:-1:1,
fullRecon = idwt2(fullRecon, cH{iLevel}, cV{iLevel}, cD{iLevel}, 'db1');
end
partialRecon = cA{nLevel};
for iLevel = nLevel:-1:1,
partialRecon = idwt2(partialRecon, [], [], [], 'db1');
end
figure;
imshow([X fullRecon; partialRecon zeros(size(X))], map, ...
'InitialMagnification', 50);
Notez que la reconstruction originale (en haut à gauche) et la reconstruction "complète" (en haut à droite) ne se distinguent pas, mais la reconstruction "partielle" (en bas à gauche) est très pixellisée. La différence ne serait pas aussi sévère si vous appliquiez moins d'étapes de décomposition, comme juste 1 ou 2.
Merci, très belle réponse. – hyperboreean