【问题标题】:Decompose and recompose an image using dwt and dct使用 dwt 和 dct 分解和重构图像
【发布时间】:2021-01-30 09:11:29
【问题描述】:

我的想法是先使用dwt2 分解图像,然后将dct2 应用于coefficients_approximation,将水印应用于结果,然后重新组合图像。

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, horizontal_lena,vertical_lena, diagonal_lena, 'haar');

如下所示: 在第一行中,左侧是起始图片,右侧是最终图片(更暗,细节更少)。 在左侧的第二行中,我们比较了原始图像上 dwt2 之后的 CA 和右侧用 idct2 重组的 CA

【问题讨论】:

    标签: matlab image-processing dct dwt


    【解决方案1】:

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

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

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

    现在可以了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 2018-10-27
      • 2021-05-29
      相关资源
      最近更新 更多