Wavelet-Transformation für N Dimensionen
Stieß ich auf dieses erstaunliche Antwort Anwendung von MATLAB ist idwt2
mehrmals, die ich ausgeführt, um es zu verstehen mich. Allerdings bin ich nicht in der Lage zu bekommen, wie die Verwendung der gleichen, mit der Arbeit mit einem RGB-Bild. Also, ich habe 3 Fragen.
-
Wie würde der code angewendet werden, um ein RGB-Bild mit nur der transformierte Bild in der Ausgabe angezeigt, die zusammen mit der hohen und niedrigen Frequenzanteile entlang der Zeile und Spalte,ist es möglich, die fusion aller Komponenten als ein einziges Bild? Ich bin mir bewusst, dass ich Katze Betreiber, aber ich kann nicht verstehen, wie man über es.
-
Zweitens, ich bin auch immer ein mazed Bild! Ich bin ratlos, da ich nicht zu Folgen scheinen der Grund. Ich habe auch an das gleiche code mit der Anweisung, die zeigen, wie dieses Bild erstellt wurde.
3.Was bedeutet der Begriff
db1
in die Funktion Unterschriftdwt
bedeuten?
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);
- Haben Sie sich nicht schon diese Fragen heute früher ? Ich sehe nicht die ursprüngliche Frage nicht mehr - hast du es löschen und umbuchen oder so ?
- Ja sicher, das habe ich getan und es ging unbemerkt und unbeantwortet für den ganzen Tag. So, dachte ich, kann umbuchen es wieder, um es zu markieren. Ich hätte Es schon eine immense Hilfe, wenn wenigstens konnte man jonglieren, einige Antworten anstelle von re-Bearbeiten Sie alle immer wieder,obwohl ich Sie gehalten hatte, Ihre früheren bearbeitete version intakt. Vielen Dank für die zusätzliche Mühe!
- Alles, was ich Tat, war fix den tags habe ich das nicht Bearbeiten Sie die Frage selbst. Für zukünftige Referenz, die Sie sollten versuchen, zu verbessern die ursprüngliche Frage, wenn Sie keine Antworten, sondern als Umbuchung.
- Ich entfernte das bisschen text über die Ruf-Voraussetzung für das hochladen eines Bildes. Jetzt haben Sie genug Ruf, lade es bitte hoch. Wenn man nicht genug Ruf, um ein Bild hochzuladen, an jedem Punkt, fügen Sie den link jedenfalls und jemand mit genug Ruf, Bearbeiten es für Sie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem Beispiel-Bild in meine Antwort auf die andere Frage war ein indizierte Bild, so gibt es ein paar änderungen, die vorgenommen werden müssen, um zu bekommen, dass der code funktioniert für eine RGB-Bild.
Werde ich zunächst auf Ihre Frage über die
'db1'
argument übergeben DWT2. Dieser gibt den Typ des wavelet zu verwenden, für die ZERLEGUNG (in diesem Fall ein Daubechies wavelet). Mehr Informationen über verfügbare wavelets finden Sie in der Dokumentation für die Funktionen WFILTERS und WAVEINFO.Werde ich Adresse Ihre ersten beiden Fragen zeigen, wie Sie den code ändern aus meiner anderen Antwort an die Arbeit für ein RGB-Bild. Ich verwende das Beispiel
'peppers.png'
Bild. Sie werden zuerst wollen, um das Bild zu laden und definieren Sie hier die Anzahl der Werte pro Farbe Komponente hat. Da das Beispiel-Bild ist ein vorzeichenloser 8-bit-integer-Typ (der häufigste Fall),nColors
werden 256:Wenn Ihre Bilder größer sind vorzeichenlose integer-Typen (z.B.
'uint16'
), eine Allgemeine Methode zu finden, die Anzahl der Farbwerte mit der Funktion " INTMAX etwa so:Für den folgenden code, ein Bild geben von
'uint8'
angenommen.Anwendung der Zerlegungen ist nicht anders als in der indizierten Bild Fall. Die Koeffizienten-Matrizen einfach auf die M-von-N-durch-3-Matrizen anstelle von M-von-N-Matrizen:
Den code zum erstellen der Fliesen-Bild, um die horizontalen, vertikalen und diagonalen Komponenten für jede ZERLEGUNG wird sich ändern, aufgrund der Tatsache, dass wir arbeiten jetzt mit 3-D-Matrizen und müssen mit der KATZE - Funktion anstelle der Verkettungsoperator
[]
:Dies gibt die folgende Abbildung zeigt die horizontale (oben rechts), vertikal (Links unten) und diagonal (rechts unten) - Komponenten für jedes Zersetzung Schritt, zusammen mit dem reduzierten Bild (oben Links):
Den Wiederaufbau Schritte werden unverändert aus der anderen Antwort. Nur den code für die Anzeige der letzten Bilder muss geändert werden:
Werden und Sie erhalten eine Bild zeigt das original-RGB-Bild (Links oben), den vollständig rekonstruierten Bild, das über alle gespeicherten detail-Koeffizienten-Matrizen (rechts oben), und die teilweise rekonstruierten Bild mit keiner der gespeicherten detail-Koeffizienten-Matrizen (unten Links):
imshow(uint8(wcodemat(cA{N},nColors)-1));
. Der Wert fürN
ist entweder 1, 2 oder 3, je nachdem, ob Sie ein Bild anzeigen, wurde zerlegt, einmal, zweimal, oder dreimal.X
ist nur die variable, die ich wählte, um das Bild zu speichern Daten. Sie können leicht ersetzen Sie einfachX
überall im code mit was auch immer Sie anrufen möchten, die variable.