登录论坛

查看完整版本 : 多次应用MATLAB的idwt2


poster
2019-12-10, 16:49
我正在使用MATLAB在图像上应用离散小波变换。我将其应用几次(3),以获得3级变换。我正在使用MATLAB提供的dwt2函数来进行压缩,然后使用idwt2进行解压缩。问题是我不知道如何解压缩几次,就像对先前接收到的输出多次应用idwt2 ,因为它返回一个矩阵。举个例子:

x = idwt2(scaled3, vertical3, horizontal3, diagonal3, Lo_R, Ho_R); idwt2应该如何应用于x?


回答:
查看dwt2 (https://www.mathworks.com/help/wavelet/ref/dwt2.html)和idwt2 (https://www.mathworks.com/help/wavelet/ref/idwt2.html)的文档,您似乎有2个常规选项可用于重建倍增分解的图像:


存储每个分解步骤中的所有水平,垂直和对角线细节系数矩阵,并在重建中使用它们。
为您未从之前的分解步骤中保存的任何详细系数矩阵输入一个空矩阵( [] )。
由于这是很慢的一天,因此以下代码显示了如何执行此操作以及每种情况下的结果...

首先,加载样本图像并初始化一些变量:

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 现在,应用分解(在这种情况下为3),并将每个步骤的细节系数矩阵存储在单元格数组中:

startImage = X; for iLevel = 1:nLevel, [cA{iLevel}, cH{iLevel}, cV{iLevel}, cD{iLevel}] = dwt2(startImage, 'db1'); startImage = cA{iLevel}; end 要查看最终分解后的图像是什么样子,以及整个细节系数矩阵,请运行以下代码(使用wcodemat (https://www.mathworks.com/help/wavelet/ref/wcodemat.html) ):

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); 您应该会看到以下内容:

https://i.stack.imgur.com/Ex4NH.jpg (https://i.stack.imgur.com/Ex4NH.jpg)

现在该重建了!下面的代码进行一个“满”重建(使用所有所存储的细节系数矩阵)和一个“部分”重建(使用其中没有 ),则绘制图像:

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); https://i.stack.imgur.com/G105c.jpg (https://i.stack.imgur.com/G105c.jpg)

请注意,原始(左上)和“完整”重建(右上)看起来无法区分,但是“部分”重建(左下)则非常像素化。如果您使用较少的分解步骤(如1或2),差异将不会那么严重。



更多&回答... (https://stackoverflow.com/questions/1119917)