wdenoise.m
上传用户:lcj80317
上传日期:2007-01-26
资源大小:625k
文件大小:2k
- function X = wdenoise(x, measure, sorh, thr, wname, n)
- % 阈值去噪函数
- % x为带噪声图像
- % measure表示全局或局部
- % sorh表示软硬阈值方法
- % thr为阈值
- % wname为小波函数名
- % n为分解层次
- [C, S] = wavedec2(x, n, wname); % 对图像进行小波分解
- switch measure
- case 'gbl' % 全局阈值方法
- dcoef = C( prod(S(1, :)) + 1 : end); % 提取细节部分系数
- switch sorh
- case 'h' % 硬阈值
- dcoef = dcoef .* (abs(dcoef) > thr);
- case 's' % 软阈值
- temp = abs(dcoef) - thr;
- temp = (temp + abs(temp)) / 2;
- dcoef = sign(dcoef) .* temp;
- end
- C( prod(S(1, :)) + 1 : end) = dcoef;
-
- case 'lvd' % 局部阈值方法
- for i = n:-1:1 % 每层单独处理
- k = size(S,1) - i;
- first = prod(S(1, :)) + ...
- 3 * sum(S(2:k-1, 1) .* S(2:k-1, 2)) + 1;
- % 第i层细节系数的起始位置
- last = first + 3*prod(S(k,:)) - 1; % 终止位置
- dcoef = C(first : last); % 细节系数
- switch sorh
- case 'h' % 硬阈值
- dcoef = dcoef .* (abs(dcoef) > thr(i));
- case 's' % 软阈值
- temp = abs(dcoef) - thr(i);
- temp = (temp + abs(temp)) / 2;
- dcoef = sign(dcoef) .* temp;
- end
- C(first:last) = dcoef;
- end
- end
- X = waverec2(C, S, wname); % 重构图像