La transformée en ondelettes pour N dimensions
Je suis tombé sur cette réponse étonnante L'application MATLAB idwt2
à plusieurs reprises qui j'ai exécuté à comprendre moi-même. Cependant, je n'arrive pas à obtenir la façon d'utiliser le même travail avec une image RVB. Donc, j'ai 3 Questions.
-
Comment le code est appliqué à une image RVB avec seulement l'image affichée dans la sortie qui est le long de la haute et de basse fréquence des composants le long de la ligne et de la colonne,est-il possible de voir la fusion de tous les composants en une seule image? Je suis conscient que je dois mettre le chat de l'opérateur, mais je ne peux pas comprendre comment le faire.
-
D'autre part, je suis aussi une mazed image! Je suis perplexe car je n'arrive pas à suivre la raison. J'ai également joint le même code avec la déclaration de montrer comment cette image a été générée.
3.Que signifie le terme
db1
dans la signature de la fonction dedwt
implique?
CODE:
load woman; % Load image data
%startImage=imread('pic_rgb.jpg'); % IF I WANT TO WORK WITH RGB IMAGE
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
startImage = X;
for iLevel = 1:nLevel,
[cA{iLevel},cH{iLevel},cV{iLevel},cD{iLevel}] = dwt2(startImage,'db1');
startImage = cA{iLevel};
end
figure;colormap(map);
imagesc(dwt2(startImage,'db1')); %THIS GIVES THE MAZED IMAGE INSTEAD OF THE TRANSFORMED IMAGE
figure;
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);
%reconstruct
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);
Oui c'est sûr que je l'ai fait et c'est passé inaperçu et sans réponse pour l'ensemble de la journée. Donc, j'ai deviné peut-être de le transférer de nouveau pour le mettre en surbrillance. Je Il aurait été d'un grand secours si au moins vous pouvez jongler quelques réponses au lieu de ré-édition une fois de plus,si j'avais gardé votre précédente version éditée intacte. Merci pour l'effort supplémentaire!
Je me suis contenté de fixer les balises - je n'ai pas de modifier la question elle-même. Pour référence future, vous devriez essayer d'améliorer la question de départ, si vous n'obtenez pas de réponses, plutôt que de reposter.
J'ai enlevé le peu de texte à propos de l'exigence de notoriété pour l'upload d'une image. Maintenant que vous avez assez de réputation, veuillez le télécharger. Si vous n'avez pas assez de réputation pour télécharger une image à tout moment, d'ajouter le lien de toute façon et que quelqu'un avec assez de réputation de l'entreprise et de le modifier pour vous.
OriginalL'auteur Ria George | 2011-07-20
Vous devez vous connecter pour publier un commentaire.
L'image de l'échantillon utilisé dans ma réponse à cette autre question était un image indexée, il y a donc quelques changements qui doivent être faits pour obtenir le code de travail pour un Image RVB.
Je vais d'abord répondre à votre question au sujet de la
'db1'
argument passé à DWT2. Ceci spécifie le type d'ondelettes à utiliser pour la décomposition (dans ce cas, un Ondelette Daubechies). Plus d'information sur les ondelettes peuvent être trouvées dans la documentation pour les fonctions WFILTERS et WAVEINFO.Je vais répondre à vos deux premières questions en vous montrant comment modifier le code de mon autre réponse de travailler pour une image RVB. Je vais utiliser l'exemple de
'peppers.png'
image. Vous devez d'abord souhaitez charger votre image et de définir le nombre de valeurs de chaque composante de couleur. Depuis l'image de l'échantillon est un entier non signé de 8 bits type entier (la situation la plus courante),nColors
seront 256:Si vos images sont plus grand entier non signé de types (par exemple,
'uint16'
), d'une manière générale, pour trouver le nombre de valeurs de couleur est d'utiliser la fonction INTMAX comme suit:Pour le prochain code, une image type de
'uint8'
est supposé.L'application de la décomposition n'est pas différent de l'image indexée cas. Le coefficient de matrices seront tout simplement M-par-N-par-3 matrices à la place de M par N matrices:
Le code pour créer la mosaïque de l'image à afficher à l'horizontale, verticale et diagonale des composants pour chaque décomposition va changer en raison du fait que nous travaillons avec 3-D des matrices et doivent utiliser le CHAT fonction à la place de l'opérateur de concaténation
[]
:Ce que va donner la suite de l'image montrant l'horizontale (en haut à droite), verticale (en bas à gauche), et en diagonale (en bas à droite) des composants pour chaque étape de décomposition, ainsi que la réduction de l'image (en haut à gauche):
La reconstruction étapes sont les mêmes que l'autre réponse. Seulement le code pour afficher l'image finale doit être modifié:
Et vous obtiendrez une image montrant l'original de l'image RVB (en haut à gauche), entièrement reconstruit l'image à l'aide de l'ensemble de la stockées détail de matrices des coefficients (en haut à droite), et partiellement reconstruit l'image à l'aide d'aucun stockées détail de matrices des coefficients (en bas à gauche):
Vous pouvez afficher l'image transformée comme suit:
imshow(uint8(wcodemat(cA{N},nColors)-1));
. La valeur deN
est soit 1, 2, ou 3 selon que vous souhaitez afficher une image qui a été décomposé en une fois, deux fois, ou trois fois.X
est juste la variable, j'ai choisi de stocker les données d'image. Vous pouvez facilement remplacerX
partout dans le code avec ce que vous voulez l'appeler cette variable.:J'ai inclus la ligne ci-dessus après la première boucle for. Mais il affiche l'image d'origine à la place de l'image transformée. J'ai essayé avec différents niveaux de N, mais tous donnent l'image d'origine. 🙁
Êtes-vous bien c'est l'affichage de l'image d'origine? Vous pouvez penser que c'est de l'affichage de l'original, mais chaque transformée de l'image est en fait un petit la version de l'original, avec la taille de l'image se réduit par 2 à chaque fois qu'elle est transformée en ondelettes.
Oui, c'est exactement l'image d'origine. En fait, j'ai l'intention de voir une sortie tel qu'il apparaît lorsque nous faisons de la transformée de Fourier Rapide. Donc,dans ce cas, la sortie sera tout l'un de l'image affichée en mosaïque de résultat?
OriginalL'auteur gnovice