Image = im2gray(original_img); [C,S] = wavedec2(Image,3,'db4'); len = length(C); T = 150; pos = S(1,1)*S(1,2); C1 = C(1:pos);C1(C1>T)=C1(C1>T)*1.5;%低频系数增强 C2 = C(pos+1:len);C2(C2<T)=C2(C2<T)*0.75;%高频系数弱化 C(1:pos)=C1;C(pos+1:len)=C2; equalized_img = waverec2(C,S,'db4');
时间: 2023-08-22 08:07:46 浏览: 128
这段代码是对一张灰度图像进行小波变换,然后对小波系数进行处理,最终通过小波重构得到一张经过处理的图像。具体来说,代码中的 im2gray 函数将原始图像转换为灰度图像,wavedec2 函数对灰度图像进行二维小波变换,其中 'db4' 表示使用 Daubechies 4 小波基函数,3 表示进行三层分解。
len 记录了小波系数的总个数。T 是一个阈值,pos 是第一层小波分解产生的低频系数的个数。C1 和 C2 分别存储了低频和高频系数。代码中对低频系数进行增强,对高频系数进行弱化,这里的增强和弱化是通过乘以系数实现的。最后将处理后的小波系数进行重组,得到经过处理的图像 equalized_img。
相关问题
[C, S] = wavedec2(gray_img, level, wname); 返回数C代表什么
在这段代码中,`wavedec2`函数是用于二维小波变换的,其中`gray_img`是输入的灰度图像,`level`是小波变换的层数,`wname`是小波变换使用的小波类型。
`wavedec2`函数的返回值是一个长度为`1+(level*3)`的向量`C`和一个包含小波系数的结构体`S`。其中,向量`C`包含了小波变换的各个分解系数,具体来说,它的前`level`个元素是第1层到第`level`层的逼近系数(LL子带系数),后面的元素则按照从低频到高频的顺序排列,分别表示每一层的细节系数(LH、HL和HH子带系数)。
因此,向量`C`可以提供一幅图像的分解信息,方便后续对图像进行处理或重建。
function [cf_vec, dim_vec] = wavedec_process(x, num, wave_name) if ndims(x) == 3 x = rgb2gray(x); end [lf, hf] = wfilters(wave_name, 'd'); o = x; x = double(x); cf_vec = []; dim_vec = size(x); for i = 1 : num [ya, yv, yh, yd] = dwt2_process(x, lf, hf); tmp = {yv; yh; yd}; dim_vec = [size(yv); dim_vec]; cf_vec=[tmp; cf_vec]; x = ya; end cf_vec = [ya; cf_vec]; figure; imshow(o, []); title('原图像'); plot_wave_coef(cf_vec); plot_wave_coef_join(cf_vec, dim_vec);
这是一个用于小波分解的函数,输入参数包括待处理的信号 x、分解层数 num 和小波名称 wave_name。如果输入的信号是一个三维信号(比如 RGB 彩色图像),则将其转换为灰度图像。然后使用 wfilters 函数根据指定的小波名称获取低频和高频滤波器系数 lf 和 hf。接着对输入的信号进行 num 层小波分解,每一层分解得到一个低频分量 ya 和三个高频分量 yv、yh、yd,其中 yv、yh、yd 分别表示垂直、水平和对角线方向的高频分量。将每一层的高频分量按顺序存入 cf_vec 中,并将每一层分解得到的分量大小存入 dim_vec 中。最后将最后一层的低频分量 ya 加入到 cf_vec 中,并显示原始图像以及绘制分解得到的小波系数图形。
阅读全文