我正在使用 MATLAB 在图像上应用离散小波变换。我多次应用它 (3) 以获得 3 级变换。我正在使用dwt2
MATLAB 提供的函数来压缩和idwt2
解压。问题是我不知道如何解压缩几次idwt2
,因为它返回一个矩阵。举个例子:
x = idwt2(scaled3, vertical3, horizontal3, diagonal3, Lo_R, Ho_R);
应该如何idwt2
应用到x?
我正在使用 MATLAB 在图像上应用离散小波变换。我多次应用它 (3) 以获得 3 级变换。我正在使用dwt2
MATLAB 提供的函数来压缩和idwt2
解压。问题是我不知道如何解压缩几次idwt2
,因为它返回一个矩阵。举个例子:
x = idwt2(scaled3, vertical3, horizontal3, diagonal3, Lo_R, Ho_R);
应该如何idwt2
应用到x?
查看dwt2
and的文档idwt2
,您似乎有 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
):
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);
您应该看到如下内容:
现在是重建的时候了!以下代码执行“完整”重建(使用所有存储的细节系数矩阵)和“部分”重建(不使用它们),然后绘制图像:
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);
请注意,原始(左上)和“完整”重建(右上)看起来无法区分,但“部分”重建(左下)非常像素化。如果您应用较少的分解步骤,例如 1 或 2,差异不会那么严重。