使用dwt和dct分解和重组图像

问题描述

我的想法是先使用dwt2分解图像,然后将dct2应用于系数_逼近,对结果应用水印,然后重新构成图像。

final_image = idwt2( idct2 ( dct2 ( dwt2 (starting_image))))

但是每当我这样做时,我都会失去很多品质,我不知道为什么。这是代码,知道吗?

clear all; clc;

%   read lena img
lena = double(imread('lena.jpg'));

%   read watermark img
%w = imread('mark.png');
load cookiebears.mat

%   compure DWT on lena and watermark
[approximate_lena,horizontal_lena,vertical_lena,diagonal_lena] = dwt2(lena,'haar');

%   i have to save the image first and then open it in order to use it in
%   dct2() omitting this step generate an error
imwrite(uint8(approximate_lena),'ca_lena.jpg');

%   read approximate_lena layer in a variable
lena_ca = double(imread('ca_lena.jpg'));

%   perform DCT on approximation level of lena picture
dct_lena = dct2(lena_ca);

%   embed the watermark into dct_lena
%   insert here function to embed the watermark
%   dct_lena = insert_watermark();

%   now I can recompose the lena coefficients approximation 
lena_ca_recomposed = idct2(dct_lena);

%   recompose DWT
lena_recomposed = idwt2(lena_ca_recomposed,diagonal_lena,'haar');

如下所示: 在第一行中,左侧有起始图片,而在righr上有合成图片(该图片更暗,细节更少)。 在左侧的第二行中,我们对原始图像上dwt2之后的CA和右侧的idct2组成的CA进行了比较。

Image

解决方法

此问题是由于将图像保存到文件并再次读取而引起的。 我删除了以下几行:

imwrite(uint8(approximate_lena),'ca_lena.jpg');

lena_ca = double(imread('ca_lena.jpg'));

现在可以了

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...