bei der Dokumentation der Suche nach dwt2
und idwt2
, scheint es, dass Sie Ihre mehrfach zerlegt Bilder zur Rekonstruktion von 2 allgemeinen Optionen:
- Shop alle horizontalen, vertikalen und diagonalen Detail Koeffizientenmatrizen von jedem Zerlegungsschritt und benutze sie in der Rekonstruktion.
- Geben Sie eine leere Matrix() für alle Detailkoeffizientenmatrizen ein, die Sie nicht aus vorherigen Zerlegungsschritten gespeichert haben.
Da es ein langsamer Tag war, hier ist etwas Code zeigen, wie dies zu tun ist und was die Ergebnisse aussehen wie für jeden Fall ...
Zuerst ein Beispielbild laden und einige Variablen initialisieren:
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
Jetzt gelten die Zersetzungen (in diesem Fall 3) und speichert das Detail Koeffizientenmatrizen aus jedem Schritt in einem Zellenfeld:
startImage = X;
for iLevel = 1:nLevel,
[cA{iLevel}, cH{iLevel}, cV{iLevel}, cD{iLevel}] = dwt2(startImage, 'db1');
startImage = cA{iLevel};
end
Um zu sehen, was das endgültige zerlegt Bild sieht aus wie, zusammen mit allen Details Koeffizientenmatrizen auf dem Weg, den folgenden Code ausführen (die Verwendung von wcodemat
macht):
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);
Sie etwas sehen sollen:
Jetzt ist es Zeit zu rekonstruieren! Der folgende Code eine „vollständige“ Rekonstruktion führt (all des gespeicherten Detail Koeffizientenmatrizen verwendet wird) und eine „teilweise“ Rekonstruktion (mit keine von ihnen), dann zeichnet es die Bilder:
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);
Beachten Sie, dass das Original (oben links) und die "vollständige" Rekonstruktion (oben rechts) nicht zu unterscheiden sind, aber die "partielle" Rekonstruktion (unten links) ist sehr pixelig. Der Unterschied wäre nicht so gravierend, wenn Sie weniger Zerlegungsschritte anwenden würden, wie nur 1 oder 2.
Danke, sehr nette Antwort. – hyperboreean