代码编织梦想

通过滤波器把图像分成结构层(包含图像的大部分信息)和纹理层(包含图像的纹理和噪声)

https://github.com/drakeguan/cp11fall_project1

全部文件见这个链接,这是一个边缘增强的程序,通过分解得到纹理层,然后乘上一个倍数,达到边缘增强的效果

我稍微改简化了他的主函数


filters = {
    'l0Minimization' 'C, 0.003';
    'wlsFilter' 'C, 0.1, 1.6';
    'bilateralFilter' 'C, [], 0, 1, 10, 0.2';
    'localExtrema' 'C, Y, 17';
    'domainTransform' 'C, 2, 0.4';
    'guidedFilter' 'Y, C, 2, 0.2^2';
};
% update/add path
for j=1:size(filters(:, 1))
    addpath(filters{j, 1});%下载上面github链接中的程序文件
end
I1 = imread('F:\enhancement\images\nighthouse.jpg');
% figure; imshow(I1),title('orignal image');
I = double(I1)/255;

G = rgb2gray(I);
YIQ = rgb2ntsc(I);
Y = YIQ(:, :, 1);
[height, width, channel] = size(I);
j = 6;%更改j选择滤波器1-6
expression = sprintf('%s(%s)', filters{j, 1}, filters{j, 2});
disp(['>>   applying the filter ' expression]);
% for each channel/component in input image
M = [];
 for k=1:channel
 % ex, localExtrema(I, 3)
 C = I(:, :, k);
 M(:, :, k) = eval(expression);
 end
 
D = I - M;%D是纹理层M是结构层I是原图
% show the smoothed image
figure;imshow(M);title('smoothed image');
% show the detail layer
figure;imshow(D+0.5);title('detail layer');
E = D*3 + M;
figure; imshow(E);title('output image');

图像的结构层(结构层越模糊,纹理层越清晰)

ecc5e209f8918c0fcdb0d721b1c63fff.png

图像的纹理层,第一张是imshow(D)这样的纹理层是黑色背景,纹理不太容易观察到。第二张是imshow(D+0.5)加一个0.5纹理较为清晰(或者mat2gray(D)),并且很多论文,纹理层都是以这个效果显示。

ece9cb6e802c80200fedee856ce38ebd.png

还发现很多论文为了使纹理更明显,对它进行了gamma增强,【figure;imshow(D.^0.5+0.5);title('detail layer');】不知道除了物体边缘纹理外,其他的是不是噪声

a5d9e8a85f2772e2727c2b548037be56.png

最后把纹理层乘3再加上结构层,乘3是纹理让纹理更加突出,可以是别的数儿,这个分解主要可以用在图像去噪图像增强领域,对结构层进行亮度提升(gamma变换、SSR增强等),对纹理层进行去噪操作(应该也能使用这个程序中的滤波器对纹理层进行平滑去噪)

a4ec3fa185aec35a3521df3bdd531469.png

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yanmengying/article/details/129626294

传统的水下图像分解分类方法_传统水下图像增强技术分类-爱代码爱编程

由于水体的特殊环境,导致水下图像对比度低,颜色失真,亮度低,纹理模糊等问题。因此,水下图像分解方法的主要目的是通过改变图像的对比度,颜色,亮度和纹理等来提高水下图像的质量。传统的水下图像分解分类方法主要是基于水下图像的上述特